Browse Source

商城功能完成

Jing 2 weeks ago
parent
commit
53477dd474
51 changed files with 12921 additions and 1863 deletions
  1. 60 0
      .nuxt/components.d.ts
  2. 1 1
      .nuxt/imports.d.ts
  3. 1 1
      .nuxt/manifest/latest.json
  4. 1 0
      .nuxt/manifest/meta/c9d07707-7b72-4655-8337-cda8413da691.json
  5. 0 1
      .nuxt/manifest/meta/d95050ca-a5d5-4bfe-9348-e22e9c83b20c.json
  6. 1 1
      .nuxt/tsconfig.json
  7. 2 0
      .nuxt/types/imports.d.ts
  8. 8 4
      assets/css/index.less
  9. 27 0
      assets/css/public/nav.less
  10. 449 0
      assets/css/shop/goodsDetail.less
  11. 526 0
      assets/css/shop/goodsDetail1.less
  12. 752 0
      assets/css/shop/goodsList.less
  13. 866 0
      assets/css/shop/newsClass.less
  14. 606 0
      assets/css/shop/newsDetail.less
  15. 1064 0
      assets/css/shop/newsList.less
  16. 1320 0
      assets/css/shop/shopClass.less
  17. 0 0
      assets/css/shop/threeLevelPage.less
  18. 362 0
      components/goods/SubMenu1.vue
  19. 363 0
      components/goods/SubMenu2.vue
  20. 364 0
      components/goods/SubMenu3.vue
  21. 392 0
      components/goods/class.vue
  22. 576 0
      components/goods/detail.vue
  23. 582 0
      components/goods/detail3.vue
  24. 576 0
      components/goods/detail_sec.vue
  25. 244 0
      components/goods/list_one.vue
  26. 341 0
      components/goods/list_sec.vue
  27. 361 0
      components/goods/subMenu.vue
  28. 48 20
      components/home/pageNavigation.vue
  29. 595 0
      components/news/class.vue
  30. 250 0
      components/news/detail.vue
  31. 253 0
      components/news/detail_sec.vue
  32. 255 0
      components/news/list.vue
  33. 259 0
      components/news/list_sec.vue
  34. 35 27
      composables/publicFunction.ts
  35. 66 0
      pages/[dir]/[dir]/[dir]/[id].vue
  36. 424 0
      pages/[dir]/[dir]/[dir]/list-[id].vue
  37. 17 235
      pages/[dir]/[dir]/[id].vue
  38. 518 0
      pages/[dir]/[dir]/index.html.vue
  39. 19 244
      pages/[dir]/[dir]/list-[id].vue
  40. 16 231
      pages/[dir]/[id].vue
  41. 63 340
      pages/[dir]/index.html.vue
  42. 17 238
      pages/[dir]/list-[id].vue
  43. 202 488
      pages/index.vue
  44. 24 17
      plugins/category.ts
  45. 10 10
      plugins/globals.ts
  46. 5 5
      plugins/request.ts
  47. BIN
      public/img/8.png
  48. BIN
      public/img/9.png
  49. BIN
      public/shop/01.png
  50. BIN
      public/shop/02.png
  51. BIN
      public/topic/empty.png

+ 60 - 0
.nuxt/components.d.ts

@@ -6,6 +6,16 @@ interface _GlobalComponents {
     'AdvertisingOrderList': typeof import("../components/advertising/OrderList.vue")['default']
     'DetailHotNews': typeof import("../components/detail/HotNews.vue")['default']
     'DetailHotNews2': typeof import("../components/detail/HotNews2.vue")['default']
+    'GoodsSubMenu1': typeof import("../components/goods/SubMenu1.vue")['default']
+    'GoodsSubMenu2': typeof import("../components/goods/SubMenu2.vue")['default']
+    'GoodsSubMenu3': typeof import("../components/goods/SubMenu3.vue")['default']
+    'GoodsClass': typeof import("../components/goods/class.vue")['default']
+    'GoodsDetail': typeof import("../components/goods/detail.vue")['default']
+    'GoodsDetail3': typeof import("../components/goods/detail3.vue")['default']
+    'GoodsDetailSec': typeof import("../components/goods/detail_sec.vue")['default']
+    'GoodsListOne': typeof import("../components/goods/list_one.vue")['default']
+    'GoodsListSec': typeof import("../components/goods/list_sec.vue")['default']
+    'GoodsSubMenu': typeof import("../components/goods/subMenu.vue")['default']
     'HomeAdvertising': typeof import("../components/home/Advertising.vue")['default']
     'HomeAdvertisingClass': typeof import("../components/home/AdvertisingClass.vue")['default']
     'HomeBigSwiper': typeof import("../components/home/BigSwiper.vue")['default']
@@ -28,6 +38,11 @@ interface _GlobalComponents {
     'HomePageHead': typeof import("../components/home/pageHead.vue")['default']
     'HomePageNavigation': typeof import("../components/home/pageNavigation.vue")['default']
     'HomePageNavigation1': typeof import("../components/home/pageNavigation1.vue")['default']
+    'NewsClass': typeof import("../components/news/class.vue")['default']
+    'NewsDetail': typeof import("../components/news/detail.vue")['default']
+    'NewsDetailSec': typeof import("../components/news/detail_sec.vue")['default']
+    'NewsList': typeof import("../components/news/list.vue")['default']
+    'NewsListSec': typeof import("../components/news/list_sec.vue")['default']
     'NuxtWelcome': typeof import("../node_modules/nuxt/dist/app/components/welcome.vue")['default']
     'NuxtLayout': typeof import("../node_modules/nuxt/dist/app/components/nuxt-layout")['default']
     'NuxtErrorBoundary': typeof import("../node_modules/nuxt/dist/app/components/nuxt-error-boundary")['default']
@@ -55,6 +70,16 @@ interface _GlobalComponents {
     'LazyAdvertisingOrderList': typeof import("../components/advertising/OrderList.vue")['default']
     'LazyDetailHotNews': typeof import("../components/detail/HotNews.vue")['default']
     'LazyDetailHotNews2': typeof import("../components/detail/HotNews2.vue")['default']
+    'LazyGoodsSubMenu1': typeof import("../components/goods/SubMenu1.vue")['default']
+    'LazyGoodsSubMenu2': typeof import("../components/goods/SubMenu2.vue")['default']
+    'LazyGoodsSubMenu3': typeof import("../components/goods/SubMenu3.vue")['default']
+    'LazyGoodsClass': typeof import("../components/goods/class.vue")['default']
+    'LazyGoodsDetail': typeof import("../components/goods/detail.vue")['default']
+    'LazyGoodsDetail3': typeof import("../components/goods/detail3.vue")['default']
+    'LazyGoodsDetailSec': typeof import("../components/goods/detail_sec.vue")['default']
+    'LazyGoodsListOne': typeof import("../components/goods/list_one.vue")['default']
+    'LazyGoodsListSec': typeof import("../components/goods/list_sec.vue")['default']
+    'LazyGoodsSubMenu': typeof import("../components/goods/subMenu.vue")['default']
     'LazyHomeAdvertising': typeof import("../components/home/Advertising.vue")['default']
     'LazyHomeAdvertisingClass': typeof import("../components/home/AdvertisingClass.vue")['default']
     'LazyHomeBigSwiper': typeof import("../components/home/BigSwiper.vue")['default']
@@ -77,6 +102,11 @@ interface _GlobalComponents {
     'LazyHomePageHead': typeof import("../components/home/pageHead.vue")['default']
     'LazyHomePageNavigation': typeof import("../components/home/pageNavigation.vue")['default']
     'LazyHomePageNavigation1': typeof import("../components/home/pageNavigation1.vue")['default']
+    'LazyNewsClass': typeof import("../components/news/class.vue")['default']
+    'LazyNewsDetail': typeof import("../components/news/detail.vue")['default']
+    'LazyNewsDetailSec': typeof import("../components/news/detail_sec.vue")['default']
+    'LazyNewsList': typeof import("../components/news/list.vue")['default']
+    'LazyNewsListSec': typeof import("../components/news/list_sec.vue")['default']
     'LazyNuxtWelcome': typeof import("../node_modules/nuxt/dist/app/components/welcome.vue")['default']
     'LazyNuxtLayout': typeof import("../node_modules/nuxt/dist/app/components/nuxt-layout")['default']
     'LazyNuxtErrorBoundary': typeof import("../node_modules/nuxt/dist/app/components/nuxt-error-boundary")['default']
@@ -110,6 +140,16 @@ export const AdvertisingBuyAD: typeof import("../components/advertising/BuyAD.vu
 export const AdvertisingOrderList: typeof import("../components/advertising/OrderList.vue")['default']
 export const DetailHotNews: typeof import("../components/detail/HotNews.vue")['default']
 export const DetailHotNews2: typeof import("../components/detail/HotNews2.vue")['default']
+export const GoodsSubMenu1: typeof import("../components/goods/SubMenu1.vue")['default']
+export const GoodsSubMenu2: typeof import("../components/goods/SubMenu2.vue")['default']
+export const GoodsSubMenu3: typeof import("../components/goods/SubMenu3.vue")['default']
+export const GoodsClass: typeof import("../components/goods/class.vue")['default']
+export const GoodsDetail: typeof import("../components/goods/detail.vue")['default']
+export const GoodsDetail3: typeof import("../components/goods/detail3.vue")['default']
+export const GoodsDetailSec: typeof import("../components/goods/detail_sec.vue")['default']
+export const GoodsListOne: typeof import("../components/goods/list_one.vue")['default']
+export const GoodsListSec: typeof import("../components/goods/list_sec.vue")['default']
+export const GoodsSubMenu: typeof import("../components/goods/subMenu.vue")['default']
 export const HomeAdvertising: typeof import("../components/home/Advertising.vue")['default']
 export const HomeAdvertisingClass: typeof import("../components/home/AdvertisingClass.vue")['default']
 export const HomeBigSwiper: typeof import("../components/home/BigSwiper.vue")['default']
@@ -132,6 +172,11 @@ export const HomeKefu: typeof import("../components/home/kefu.vue")['default']
 export const HomePageHead: typeof import("../components/home/pageHead.vue")['default']
 export const HomePageNavigation: typeof import("../components/home/pageNavigation.vue")['default']
 export const HomePageNavigation1: typeof import("../components/home/pageNavigation1.vue")['default']
+export const NewsClass: typeof import("../components/news/class.vue")['default']
+export const NewsDetail: typeof import("../components/news/detail.vue")['default']
+export const NewsDetailSec: typeof import("../components/news/detail_sec.vue")['default']
+export const NewsList: typeof import("../components/news/list.vue")['default']
+export const NewsListSec: typeof import("../components/news/list_sec.vue")['default']
 export const NuxtWelcome: typeof import("../node_modules/nuxt/dist/app/components/welcome.vue")['default']
 export const NuxtLayout: typeof import("../node_modules/nuxt/dist/app/components/nuxt-layout")['default']
 export const NuxtErrorBoundary: typeof import("../node_modules/nuxt/dist/app/components/nuxt-error-boundary")['default']
@@ -159,6 +204,16 @@ export const LazyAdvertisingBuyAD: typeof import("../components/advertising/BuyA
 export const LazyAdvertisingOrderList: typeof import("../components/advertising/OrderList.vue")['default']
 export const LazyDetailHotNews: typeof import("../components/detail/HotNews.vue")['default']
 export const LazyDetailHotNews2: typeof import("../components/detail/HotNews2.vue")['default']
+export const LazyGoodsSubMenu1: typeof import("../components/goods/SubMenu1.vue")['default']
+export const LazyGoodsSubMenu2: typeof import("../components/goods/SubMenu2.vue")['default']
+export const LazyGoodsSubMenu3: typeof import("../components/goods/SubMenu3.vue")['default']
+export const LazyGoodsClass: typeof import("../components/goods/class.vue")['default']
+export const LazyGoodsDetail: typeof import("../components/goods/detail.vue")['default']
+export const LazyGoodsDetail3: typeof import("../components/goods/detail3.vue")['default']
+export const LazyGoodsDetailSec: typeof import("../components/goods/detail_sec.vue")['default']
+export const LazyGoodsListOne: typeof import("../components/goods/list_one.vue")['default']
+export const LazyGoodsListSec: typeof import("../components/goods/list_sec.vue")['default']
+export const LazyGoodsSubMenu: typeof import("../components/goods/subMenu.vue")['default']
 export const LazyHomeAdvertising: typeof import("../components/home/Advertising.vue")['default']
 export const LazyHomeAdvertisingClass: typeof import("../components/home/AdvertisingClass.vue")['default']
 export const LazyHomeBigSwiper: typeof import("../components/home/BigSwiper.vue")['default']
@@ -181,6 +236,11 @@ export const LazyHomeKefu: typeof import("../components/home/kefu.vue")['default
 export const LazyHomePageHead: typeof import("../components/home/pageHead.vue")['default']
 export const LazyHomePageNavigation: typeof import("../components/home/pageNavigation.vue")['default']
 export const LazyHomePageNavigation1: typeof import("../components/home/pageNavigation1.vue")['default']
+export const LazyNewsClass: typeof import("../components/news/class.vue")['default']
+export const LazyNewsDetail: typeof import("../components/news/detail.vue")['default']
+export const LazyNewsDetailSec: typeof import("../components/news/detail_sec.vue")['default']
+export const LazyNewsList: typeof import("../components/news/list.vue")['default']
+export const LazyNewsListSec: typeof import("../components/news/list_sec.vue")['default']
 export const LazyNuxtWelcome: typeof import("../node_modules/nuxt/dist/app/components/welcome.vue")['default']
 export const LazyNuxtLayout: typeof import("../node_modules/nuxt/dist/app/components/nuxt-layout")['default']
 export const LazyNuxtErrorBoundary: typeof import("../node_modules/nuxt/dist/app/components/nuxt-error-boundary")['default']

+ 1 - 1
.nuxt/imports.d.ts

@@ -29,6 +29,6 @@ export { onBeforeRouteLeave, onBeforeRouteUpdate, useLink } from 'vue-router';
 export { withCtx, withDirectives, withKeys, withMemo, withModifiers, withScopeId, onActivated, onBeforeMount, onBeforeUnmount, onBeforeUpdate, onDeactivated, onErrorCaptured, onMounted, onRenderTracked, onRenderTriggered, onServerPrefetch, onUnmounted, onUpdated, computed, customRef, isProxy, isReactive, isReadonly, isRef, markRaw, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, toRaw, toRef, toRefs, triggerRef, unref, watch, watchEffect, watchPostEffect, watchSyncEffect, isShallow, effect, effectScope, getCurrentScope, onScopeDispose, defineComponent, defineAsyncComponent, resolveComponent, getCurrentInstance, h, inject, hasInjectionContext, nextTick, provide, mergeModels, toValue, useModel, useAttrs, useCssModule, useCssVars, useSlots, useTransitionState, useId, useTemplateRef, useShadowRoot, Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue';
 export { injectHead, useHead, useSeoMeta, useHeadSafe, useServerHead, useServerSeoMeta, useServerHeadSafe } from '@unhead/vue';
 export { requestData, requestDataPromise, requestDataWebUrl, requestHome } from '../composables/getData';
-export { getTime, getTitleLength, getLinkPath, getLinkPathDetail, getRoutePath } from '../composables/publicFunction';
+export { getTime, getTitleLength, getLinkPath, getLinkPath1, getLinkPathDetail, getRoutePath } from '../composables/publicFunction';
 export { seoSetup } from '../composables/useSeo';
 export { definePageMeta } from '../node_modules/nuxt/dist/pages/runtime/composables';

+ 1 - 1
.nuxt/manifest/latest.json

@@ -1 +1 @@
-{"id":"d95050ca-a5d5-4bfe-9348-e22e9c83b20c","timestamp":1750727108136}
+{"id":"c9d07707-7b72-4655-8337-cda8413da691","timestamp":1751440689024}

+ 1 - 0
.nuxt/manifest/meta/c9d07707-7b72-4655-8337-cda8413da691.json

@@ -0,0 +1 @@
+{"id":"c9d07707-7b72-4655-8337-cda8413da691","timestamp":1751440689024,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}

+ 0 - 1
.nuxt/manifest/meta/d95050ca-a5d5-4bfe-9348-e22e9c83b20c.json

@@ -1 +0,0 @@
-{"id":"d95050ca-a5d5-4bfe-9348-e22e9c83b20c","timestamp":1750727108136,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}

+ 1 - 1
.nuxt/tsconfig.json

@@ -102,7 +102,7 @@
         "./imports"
       ],
       "#app-manifest": [
-        "./manifest/meta/d95050ca-a5d5-4bfe-9348-e22e9c83b20c.json"
+        "./manifest/meta/c9d07707-7b72-4655-8337-cda8413da691.json"
       ],
       "#components": [
         "./components"

+ 2 - 0
.nuxt/types/imports.d.ts

@@ -27,6 +27,7 @@ declare global {
   const getAppManifest: typeof import('../../node_modules/nuxt/dist/app/composables/manifest')['getAppManifest']
   const getCurrentInstance: typeof import('vue')['getCurrentInstance']
   const getCurrentScope: typeof import('vue')['getCurrentScope']
+  const getLinkPath1: typeof import('../../composables/publicFunction')['getLinkPath1']
   const getLinkPath: typeof import('../../composables/publicFunction')['getLinkPath']
   const getLinkPathDetail: typeof import('../../composables/publicFunction')['getLinkPathDetail']
   const getRoutePath: typeof import('../../composables/publicFunction')['getRoutePath']
@@ -214,6 +215,7 @@ declare module 'vue' {
     readonly getAppManifest: UnwrapRef<typeof import('../../node_modules/nuxt/dist/app/composables/manifest')['getAppManifest']>
     readonly getCurrentInstance: UnwrapRef<typeof import('vue')['getCurrentInstance']>
     readonly getCurrentScope: UnwrapRef<typeof import('vue')['getCurrentScope']>
+    readonly getLinkPath1: UnwrapRef<typeof import('../../composables/publicFunction')['getLinkPath1']>
     readonly getLinkPath: UnwrapRef<typeof import('../../composables/publicFunction')['getLinkPath']>
     readonly getLinkPathDetail: UnwrapRef<typeof import('../../composables/publicFunction')['getLinkPathDetail']>
     readonly getRoutePath: UnwrapRef<typeof import('../../composables/publicFunction')['getRoutePath']>

+ 8 - 4
assets/css/index.less

@@ -330,11 +330,12 @@ section {
       }
 }
 
-.index_2_color_box {
+.index_3_box_box {
+      min-height: 230px;
+}
 
+.index_2_color_box {
       background: #FAFAFA;
-      // background:aqua;
-
       padding: 20px 0px 25px;
       margin: -11px auto 0px;
 }
@@ -436,6 +437,7 @@ section {
             font-weight: bold;
             margin-top: 0px;
             background-image: url(@/public/img/34.png);
+            background-color: #fff;
       }
 }
 
@@ -478,7 +480,7 @@ section {
 .index_ul_3_in {
       margin-top: 13px;
       // padding-bottom: 11px;
-      margin-left: -13px;
+      // margin-left: -13px;
       height: 65px;
 
       .index_ul_3_a {
@@ -791,6 +793,8 @@ section {
 }
 
 .index_name_ul {
+      min-height: 120px;
+
       .index_name_ul_li {
             height: 24px;
             margin-bottom: 18px;

+ 27 - 0
assets/css/public/nav.less

@@ -10,6 +10,7 @@
         width: 1200px;
         height: 133px;
         margin: 0 auto;
+        position: relative;
 
         .navLeft {
             width: 135px;
@@ -82,6 +83,32 @@
     }
 }
 
+.navigationTwo {
+    position: absolute;
+    top: 88px;
+    left: 73px;
+    font-size: 16px;
+    color: #333;
+    padding: 5px 10px;
+    background-color: #f8f8f8;
+    box-sizing: border-box;
+    border-radius: 5px;
+    border: 1px solid #ddd;
+
+    li {
+        height: 30px;
+        line-height: 30px;
+
+        a {
+            color: #333;
+        }
+
+        a:hover {
+            color: #a91b33;
+        }
+    }
+}
+
 .partTwo {
     width: 100%;
     height: 60px;

+ 449 - 0
assets/css/shop/goodsDetail.less

@@ -0,0 +1,449 @@
+@charset "utf-8";
+
+* {
+    font-family: "微软雅黑", "microsoft yahei";
+}
+
+ul,
+ol {
+    list-style: none;
+}
+
+a:active {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: none;
+}
+
+a:visited {
+    text-decoration: none;
+}
+
+a:link {
+    text-decoration: none;
+}
+
+a:focus {
+    text-decoration: none;
+}
+
+body {
+    position: relative;
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.clearfix_2::after {
+    content: '';
+    display: block;
+    height: 0;
+    visibility: hidden;
+    clear: both;
+}
+
+.hiddenColor {
+    visibility: hidden;
+}
+
+.hand {
+    cursor: pointer;
+}
+
+.aTag_parent {
+    position: relative;
+}
+
+.aTag_parent>a,
+.aTag {
+    display: block;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    z-index: 99;
+    border: 0px;
+    top: 0px;
+    left: 0px;
+    background: rgba(0, 0, 0, 0);
+}
+
+.dot1 {
+    display: block;
+    word-break: keep-all;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+.dot2 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+}
+
+input,
+img {
+    border: none;
+}
+
+.cover100 img {
+    display: block;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+
+.back100 {
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+}
+
+article,
+aside,
+footer,
+header,
+time,
+video,
+main,
+nav,
+h4,
+h3,
+section {
+    display: block;
+}
+
+.index_main {
+    margin: 0 auto 30px;
+}
+
+.slow_6 {
+    -webkit-transition: all .6s;
+    -moz-transition: all .6s;
+    -ms-transition: all .6s;
+    -o-transition: all .6s;
+    transition: all .6s;
+}
+
+.index_main {
+    width: 1200px;
+}
+
+.banner_1 {
+    margin-top: 29px;
+    height: 90px;
+    overflow: hidden;
+
+    .banner_1_a {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .banner_1_img {
+        display: block;
+        width: 100%;
+    }
+}
+
+.categ_crumb {
+    line-height: 26px;
+    color: #999;
+    font-size: 20px;
+    margin-top: 30px;
+    padding-bottom: 30px;
+    border-bottom: solid 1px #D9D9D9;
+
+    .categ_crumb_text {
+        display: inline-block;
+        line-height: 26px;
+        color: #999;
+        font-size: 20px;
+        margin: 0px 11px;
+    }
+
+    span.categ_crumb_text {
+        color: #333;
+    }
+
+    a.categ_crumb_text:hover {
+        color: #a91b33;
+    }
+}
+
+.index_2 {
+    margin-top: 30px;
+}
+
+.index_2_img {
+    float: left;
+    width: 330px;
+    height: 330px;
+}
+
+.index_2_right {
+    float: right;
+    width: 540px;
+}
+
+.index_2_h4 {
+    line-height: 29px;
+    color: #333;
+    font-size: 22px;
+}
+
+.index_2_title_box {}
+
+.index_2_title {
+    float: left;
+    height: 31px;
+    line-height: 31px;
+    color: #999;
+    font-size: 16px;
+    padding: 0px 10px;
+    margin: 14px 20px 0px 0px;
+    background: #F8F8F8;
+}
+
+.index_2_ul {
+    margin-top: 10px;
+}
+
+.index_2_li {
+    display: flex;
+    margin-bottom: 16px;
+
+    .index_2_li_label {
+        line-height: 21px;
+        color: #999;
+        font-size: 16px;
+        min-width: 64px;
+        margin-right: 15px;
+    }
+
+    .index_2_li_text {
+        line-height: 21px;
+        color: #333;
+        font-size: 16px;
+    }
+}
+
+.shop_head_1 {
+    position: relative;
+    padding-bottom: 30px;
+    border-bottom: solid 1px #E9E9E9;
+
+    .shop_head_1_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #666;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+    }
+
+    .shop_head_1_name_only {
+        color: #a91b33;
+    }
+
+    .shop_head_1_name:nth-of-type(1) {
+        background: url(@/public/shop/01.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+}
+
+.card_out {
+    margin-top: 30px;
+}
+
+.card_1_box {
+    font-size: 18px;
+    color: #333333;
+
+    p {
+        line-height: 35px;
+    }
+}
+
+
+.box_1_head {
+    height: 67px;
+    background: #F7FBFE;
+    border-bottom: solid 1px #ddd;
+    position: relative;
+
+    .box_1_head_name {
+        float: left;
+        height: 67px;
+        line-height: 67px;
+        margin-left: 20px;
+        color: #a91b33;
+        font-size: 22px;
+        font-weight: bold;
+    }
+
+    .box_1_head_a {
+        float: right;
+        height: 67px;
+        line-height: 67px;
+        color: #999;
+        font-size: 16px;
+        margin-right: 20px;
+    }
+
+    .box_1_head_a::after {
+        content: '';
+        display: block;
+        width: 100%;
+        height: 100%;
+        position: absolute;
+        left: 0px;
+        top: 0px;
+    }
+}
+
+.box_1 {
+    border: solid 1px #ddd;
+    margin-top: 30px;
+}
+
+.img_ul_1 {
+    margin: 20px auto 0px;
+    box-sizing: border-box;
+    padding: 0px 7px;
+
+    .img_li_1 {
+        float: left;
+        width: 120px;
+        margin: 0px 13.8px 19px;
+    }
+
+    .img_li_1_a {
+        display: block;
+        width: 120px;
+    }
+
+    .img_li_1_img_box {
+        width: 120px;
+        height: 120px;
+    }
+
+    .img_li_1_img {
+        display: block;
+        width: 120px;
+        height: 120px;
+    }
+
+    .img_li_1_dot2 {
+        height: 32px;
+        line-height: 16px;
+        color: #999;
+        font-size: 12px;
+        margin-top: 5px;
+        text-align: center;
+    }
+
+    .img_li_1_a:hover .img_li_1_dot2 {
+        color: #a91b33;
+    }
+}
+
+.index_3 {
+    margin-top: 17px;
+}
+
+.index_4 {}
+
+@media screen and (min-width:1200px) {
+    /*pc_1440*/
+    @media screen and (max-width:1440px) {
+        /*1200*/
+    }
+
+    .pc_none {
+        display: none;
+    }
+}
+
+@media screen and (max-width:599px) {}
+
+@media screen and (max-width:320px) {}
+
+//导航条
+.breadcrumb {
+    width: 100%;
+    height: 22px;
+    padding-bottom: 30px;
+    border-bottom: 1px solid #ccc;
+    font-family: Microsoft YaHei, Microsoft YaHei;
+    font-weight: 400;
+    font-size: 20px;
+    color: #666666;
+    line-height: 23px;
+    text-align: left;
+    font-style: normal;
+    text-transform: none;
+    margin-top: 20px;
+
+    :deep(.el-breadcrumb) {
+        display: inline-block;
+        vertical-align: -4px;
+    }
+
+    :deep(.el-breadcrumb__inner a),
+    :deep(.el-breadcrumb__inner.is-link) {
+        color: #666666;
+        font-weight: 400;
+        text-decoration: none;
+        transition: var(--el-transition-color);
+    }
+
+    span {
+        font-family: Microsoft YaHei, Microsoft YaHei;
+        font-weight: 400;
+        font-size: 20px;
+        color: #666666;
+        line-height: 23px;
+        text-align: left;
+        font-style: normal;
+        text-transform: none;
+    }
+
+    span:hover {
+        color: #666666;
+    }
+
+    .location {
+        margin-right: 20px;
+        width: 100px;
+        height: 22px;
+        font-family: Microsoft YaHei, Microsoft YaHei;
+        font-weight: 400;
+        font-size: 20px;
+        color: #666666;
+        line-height: 23px;
+        text-align: left;
+        font-style: normal;
+        text-transform: none;
+    }
+}
+
+.supply_art_box_img {
+    img {
+        width: 210px;
+        height: 210px;
+        margin-right: 30px;
+    }
+
+}
+
+// .allInfo {
+//     font-size: 14px;
+//     color: #a91b33;
+//     margin-top: 20px;
+//     margin-bottom: 20px;
+// }

+ 526 - 0
assets/css/shop/goodsDetail1.less

@@ -0,0 +1,526 @@
+@charset "utf-8";
+
+* {
+    // margin: 0;
+    // padding: 0;
+    font-family: "微软雅黑", "microsoft yahei";
+}
+
+ul,
+ol {
+    list-style: none;
+}
+
+a:active {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: none;
+}
+
+a:visited {
+    text-decoration: none;
+}
+
+a:link {
+    text-decoration: none;
+}
+
+a:focus {
+    text-decoration: none;
+}
+
+body {
+    position: relative;
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.clearfix_2::after {
+    content: '';
+    display: block;
+    height: 0;
+    visibility: hidden;
+    clear: both;
+}
+
+.hiddenColor {
+    visibility: hidden;
+}
+
+.hand {
+    cursor: pointer;
+}
+
+.aTag_parent {
+    position: relative;
+}
+
+.aTag_parent>a,
+.aTag {
+    display: block;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    z-index: 99;
+    border: 0px;
+    top: 0px;
+    left: 0px;
+    background: rgba(0, 0, 0, 0);
+}
+
+.dot1 {
+    display: block;
+    word-break: keep-all;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+.dot2 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+}
+
+input,
+img {
+    border: none;
+}
+
+.cover100 img {
+    display: block;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+
+.back100 {
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+}
+
+article,
+aside,
+footer,
+header,
+time,
+video,
+main,
+nav,
+h4,
+h3,
+section {
+    display: block;
+}
+
+.index_main {
+    margin: 0 auto 30px;
+}
+
+.slow_6 {
+    -webkit-transition: all .6s;
+    -moz-transition: all .6s;
+    -ms-transition: all .6s;
+    -o-transition: all .6s;
+    transition: all .6s;
+}
+
+.index_main {
+    width: 1200px;
+}
+
+.banner_1 {
+    margin-top: 29px;
+    height: 90px;
+    overflow: hidden;
+
+    .banner_1_a {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .banner_1_img {
+        display: block;
+        width: 100%;
+    }
+}
+
+.categ_crumb {
+    line-height: 26px;
+    color: #999;
+    font-size: 20px;
+    margin-top: 30px;
+    padding-bottom: 30px;
+    border-bottom: solid 1px #D9D9D9;
+
+    .categ_crumb_text {
+        display: inline-block;
+        line-height: 26px;
+        color: #999;
+        font-size: 20px;
+        margin: 0px 11px;
+    }
+
+    span.categ_crumb_text {
+        color: #333;
+    }
+
+    a.categ_crumb_text:hover {
+        color: #a91b33;
+    }
+}
+
+.index_2 {
+    margin-top: 30px;
+}
+
+.index_2_img {
+    float: left;
+    width: 330px;
+    height: 330px;
+}
+
+.index_2_left {
+    float: left;
+    margin-left: 20px;
+    width: 850px;
+}
+
+.index_2_h4 {
+    line-height: 29px;
+    color: #333;
+    font-size: 22px;
+    border-bottom: solid 1px #E9E9E9;
+    padding-bottom: 20px;
+}
+
+.index_2_title_box {}
+
+.index_2_title {
+    float: left;
+    line-height: 31px;
+    color: #999;
+    font-size: 16px;
+    padding: 0px 10px;
+    margin: 14px 20px 0px 0px;
+    background: #F8F8F8;
+}
+
+.index_2_ul {
+    margin-top: 20px;
+}
+
+.index_2_li {
+    display: flex;
+    margin-bottom: 11px;
+
+    .index_2_li_label {
+        line-height: 21px;
+        color: #999;
+        font-size: 16px;
+        min-width: 64px;
+        margin-right: 15px;
+    }
+
+    .index_2_li_text {
+        line-height: 21px;
+        color: #333;
+        font-size: 16px;
+    }
+}
+
+.shop_head_1 {
+    position: relative;
+    padding-bottom: 30px;
+    border-bottom: solid 1px #E9E9E9;
+
+    .shop_head_1_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #666;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+    }
+
+    .shop_head_1_name_only {
+        color: #a91b33;
+    }
+
+    .shop_head_1_name:nth-of-type(1) {
+        background: url(@/public/shop/01.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+}
+
+.card_out {
+    margin-top: 30px;
+
+    .card_1_box {
+        display: none;
+    }
+
+    .card_1_box_only {
+        display: block;
+    }
+}
+
+.box_1_head {
+    height: 67px;
+    background: #F7FBFE;
+    border-bottom: solid 1px #ddd;
+    position: relative;
+
+    .box_1_head_name {
+        float: left;
+        height: 67px;
+        line-height: 67px;
+        margin-left: 20px;
+        color: #a91b33;
+        font-size: 22px;
+        font-weight: bold;
+    }
+
+    .box_1_head_a {
+        float: right;
+        height: 67px;
+        line-height: 67px;
+        color: #999;
+        font-size: 16px;
+        margin-right: 20px;
+    }
+
+    .box_1_head_a::after {
+        content: '';
+        display: block;
+        width: 100%;
+        height: 100%;
+        position: absolute;
+        left: 0px;
+        top: 0px;
+    }
+}
+
+.box_1 {
+    border: solid 1px #ddd;
+    margin-top: 30px;
+}
+
+.img_ul_1 {
+    margin: 20px auto 0px;
+    box-sizing: border-box;
+    padding: 0px 7px;
+    min-height: 176px;
+
+    .img_li_1 {
+        float: left;
+        width: 120px;
+        margin: 0px 13.8px 19px;
+    }
+
+    .img_li_1_a {
+        display: block;
+        width: 120px;
+    }
+
+    .img_li_1_img_box {
+        width: 120px;
+        height: 120px;
+    }
+
+    .img_li_1_img {
+        display: block;
+        width: 120px;
+        height: 120px;
+    }
+
+    .img_li_1_dot2 {
+        height: 32px;
+        line-height: 16px;
+        color: #999;
+        font-size: 12px;
+        margin-top: 5px;
+    }
+
+    .img_li_1_a:hover .img_li_1_dot2 {
+        color: #a91b33;
+    }
+}
+
+.index_3 {
+    margin-top: 17px;
+}
+
+.index_4 {}
+
+.index_out_1_left {
+    float: left;
+    width: 894px;
+}
+
+/* 选项卡 */
+.choice_1_box {
+    border: solid 1px #E9E9E9;
+    box-sizing: border-box;
+
+    .choice_1_btn_box {
+        height: 64px;
+    }
+
+    .choice_1_btn {
+        height: 64px;
+        width: 50%;
+        float: left;
+    }
+
+    .choice_1_btn_a {
+        display: block;
+        width: 100%;
+        line-height: 64px;
+        color: #333;
+        font-style: italic;
+        height: 64px;
+        background: #F8F8F8;
+        text-align: center;
+        font-size: 16px;
+        box-sizing: border-box;
+        font-family: DingTalk JinBuTi, DingTalk JinBuTi;
+        letter-spacing: 1px;
+    }
+
+    .choice_1_btn_only {}
+
+    .choice_1_btn_only .choice_1_btn_a {
+        background: #fff;
+        border-bottom: solid 1px #fff;
+    }
+}
+
+/* 选项卡 */
+.shop_3_right {
+    margin-top: 87px;
+    float: right;
+    width: 280px;
+}
+
+.shop_ul_img_2 {
+    height: 260px;
+    width: 252px;
+    margin: 20px auto 0px;
+}
+
+.shop_li_img_2 {
+    width: 252px;
+    height: 22px;
+    margin-bottom: 22px;
+
+    .shop_li_img_2_a {
+        display: block;
+        height: 22px;
+        display: flex;
+    }
+
+    .shop_li_img_2_num {
+        width: 22px;
+        max-width: 22px;
+        min-width: 22px;
+        height: 22px;
+        line-height: 22px;
+        text-align: center;
+        background: #ccc;
+        color: #F6F6F6;
+        font-size: 16px;
+        font-weight: bold;
+        border-radius: 4px;
+        margin-right: 10px;
+    }
+
+    .shop_li_img_2_right {
+        height: 22px;
+    }
+
+    .shop_li_img_2_img {
+        display: none;
+    }
+
+    .shop_li_img_2_text {
+        height: 22px;
+        line-height: 22px;
+        color: #333;
+        font-size: 16px;
+        display: block;
+        word-break: keep-all;
+        white-space: nowrap;
+        overflow: hidden;
+        text-overflow: ellipsis;
+    }
+}
+
+.shop_li_img_2:nth-of-type(1) {
+    height: auto;
+    margin-bottom: 15px;
+}
+
+.shop_li_img_2:nth-of-type(1) .shop_li_img_2_a {
+    height: auto;
+}
+
+.shop_li_img_2:nth-of-type(1) .shop_li_img_2_right {
+    width: 252px;
+    height: auto;
+    display: flex;
+    border-bottom: solid 1px #E9E9E9;
+    padding-bottom: 10px;
+}
+
+.shop_li_img_2:nth-of-type(1) .shop_li_img_2_img {
+    display: block;
+    width: 45px;
+    height: 45px;
+    margin-right: 10px;
+}
+
+.shop_li_img_2:nth-of-type(1) .shop_li_img_2_text {
+    height: 44px;
+    line-height: 22px;
+    color: #333;
+    font-size: 16px;
+    font-weight: bold;
+    overflow: hidden;
+    display: -webkit-box !important;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+    word-break: break-all;
+    white-space: wrap;
+}
+
+.shop_li_img_2:nth-of-type(-n+3) .shop_li_img_2_num {
+    background: #a91b33;
+    color: #fff;
+}
+
+.shop_li_img_2:hover .shop_li_img_2_text {
+    color: #a91b33;
+}
+
+@media screen and (min-width:1200px) {
+    /*pc_1440*/
+    @media screen and (max-width:1440px) {
+        /*1200*/
+    }
+
+    .pc_none {
+        display: none;
+    }
+}
+
+@media screen and (max-width:599px) {}
+
+@media screen and (max-width:320px) {}

+ 752 - 0
assets/css/shop/goodsList.less

@@ -0,0 +1,752 @@
+* {
+    font-family: "微软雅黑", "microsoft yahei";
+}
+
+ul,
+ol {
+    list-style: none;
+}
+
+a:active {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: none;
+}
+
+a:visited {
+    text-decoration: none;
+}
+
+a:link {
+    text-decoration: none;
+}
+
+a:focus {
+    text-decoration: none;
+}
+
+body {
+    position: relative;
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.clearfix_2::after {
+    content: '';
+    display: block;
+    height: 0;
+    visibility: hidden;
+    clear: both;
+}
+
+.hiddenColor {
+    visibility: hidden;
+}
+
+.hand {
+    cursor: pointer;
+}
+
+.aTag_parent {
+    position: relative;
+}
+
+.aTag_parent>a,
+.aTag {
+    display: block;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    z-index: 99;
+    border: 0px;
+    top: 0px;
+    left: 0px;
+    background: rgba(0, 0, 0, 0);
+}
+
+.dot1 {
+    display: block;
+    word-break: keep-all;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+.dot2 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+}
+
+input,
+img {
+    border: none;
+}
+
+.cover100 img {
+    display: block;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+
+.back100 {
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+}
+
+article,
+aside,
+footer,
+header,
+time,
+video,
+main,
+nav,
+h4,
+h3,
+section {
+    display: block;
+}
+
+.index_main {
+    margin: 0 auto;
+}
+
+.slow_6 {
+    -webkit-transition: all .6s;
+    -moz-transition: all .6s;
+    -ms-transition: all .6s;
+    -o-transition: all .6s;
+    transition: all .6s;
+}
+
+.index_main {
+    width: 1200px;
+    margin: 0px auto 30px;
+}
+
+.banner_1 {
+    margin-top: 29px;
+    height: 90px;
+    overflow: hidden;
+
+    .banner_1_a {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .banner_1_img {
+        display: block;
+        width: 100%;
+    }
+}
+
+.banner_2 {
+    margin-top: 29px;
+    height: 90px;
+    overflow: hidden;
+
+    .banner_2_a {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .banner_2_img {
+        display: block;
+        width: 100%;
+    }
+}
+
+.shop_head_1 {
+    height: 29px;
+    position: relative;
+
+    .shop_head_1_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #a91b33;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/shop/01.png) no-repeat left center;
+        background-size: 12px 18px;
+
+        a {
+            color: #a91b33;
+        }
+    }
+
+    .shop_head_1_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+
+    .shop_head_1_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+
+.categ_color_box {
+    border: solid 1px #E9E9E9;
+    background: #F8F8F8;
+    margin-top: 30px;
+    box-sizing: border-box;
+    min-height: 50px;
+
+    .categ_color_name {
+        width: 1160px;
+        margin: 0px auto;
+        height: 60px;
+        line-height: 60px;
+        color: #333;
+        font-size: 18px;
+        border-bottom: dashed 1px #E9E9E9;
+    }
+
+    .categ_color_in {
+        padding: 6px 0px 0px;
+    }
+
+    .categ_color_a {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #333;
+        margin: 10px 10px 16px;
+        font-size: 16px;
+        padding: 0px 10px;
+    }
+
+    .categ_color_a_only {
+        color: #fff;
+        background: #a91b33;
+    }
+}
+
+.categ_crumb {
+    line-height: 26px;
+    color: #999;
+    font-size: 20px;
+    margin-top: 30px;
+    padding-bottom: 30px;
+    border-bottom: solid 1px #D9D9D9;
+
+    .categ_crumb_text {
+        display: inline-block;
+        line-height: 26px;
+        color: #999;
+        font-size: 20px;
+        margin: 0px 11px;
+    }
+
+    span.categ_crumb_text {
+        color: #333;
+    }
+
+    a.categ_crumb_text:hover {
+        color: #a91b33;
+    }
+}
+
+.box_1 {
+    border: solid 1px #ddd;
+    width: 588px;
+}
+
+.box_1:nth-of-type(odd) {
+    float: left;
+}
+
+.box_1:nth-of-type(even) {
+    float: right;
+}
+
+.box_1_head {
+    height: 67px;
+    background: #f8f8f8;
+    border-bottom: solid 1px #ddd;
+    position: relative;
+
+    .box_1_head_name {
+        float: left;
+        height: 67px;
+        line-height: 67px;
+        margin-left: 20px;
+        color: #a91b33;
+        font-size: 22px;
+        font-weight: bold;
+    }
+
+    .box_1_head_a {
+        float: right;
+        height: 67px;
+        line-height: 67px;
+        color: #999;
+        font-size: 16px;
+        margin-right: 20px;
+    }
+
+    .box_1_head_a::after {
+        content: '';
+        display: block;
+        width: 100%;
+        height: 100%;
+        position: absolute;
+        left: 0px;
+        top: 0px;
+    }
+}
+
+.img_ul_1 {
+    margin: 20px auto 0px;
+    width: 588px;
+    box-sizing: border-box;
+    padding: 0px 9px;
+    min-height: 175px;
+
+    .img_li_1 {
+        float: left;
+        width: 120px;
+        margin: 0px 11px 19px;
+    }
+
+    .img_li_1_a {
+        display: block;
+        width: 120px;
+    }
+
+    .img_li_1_img_box {
+        width: 120px;
+        height: 120px;
+    }
+
+    .img_li_1_img {
+        display: block;
+        width: 120px;
+        height: 120px;
+    }
+
+    .img_li_1_dot2 {
+        height: 32px;
+        line-height: 16px;
+        color: #999;
+        font-size: 12px;
+        margin-top: 5px;
+        text-align: center;
+    }
+
+    .img_li_1_a:hover .img_li_1_dot2 {
+        color: #a91b33;
+    }
+}
+
+.box_2_head {
+    height: 67px;
+    background: #f8f8f8;
+    border-bottom: solid 1px #ddd;
+    position: relative;
+
+    .box_2_head_name {
+        float: left;
+        height: 67px;
+        line-height: 67px;
+        margin-left: 20px;
+        color: #a91b33;
+        font-size: 22px;
+        font-weight: bold;
+    }
+
+    .box_2_head_a {
+        float: right;
+        height: 67px;
+        line-height: 67px;
+        color: #999;
+        font-size: 16px;
+        margin-right: 20px;
+    }
+
+    .box_2_head_a::after {
+        content: '';
+        display: block;
+        width: 100%;
+        height: 100%;
+        position: absolute;
+        left: 0px;
+        top: 0px;
+    }
+}
+
+.box_2 {
+    border: solid 1px #ddd;
+}
+
+.img_ul_2 {
+    margin: 20px auto 0px;
+    box-sizing: border-box;
+    padding: 0px 7px;
+    min-height: 175px;
+
+    .img_li_2 {
+        float: left;
+        width: 120px;
+        margin: 0px 13.8px 19px;
+    }
+
+    .img_li_2_a {
+        display: block;
+        width: 120px;
+    }
+
+    .img_li_2_img_box {
+        width: 120px;
+        height: 120px;
+    }
+
+    .img_li_2_img {
+        display: block;
+        width: 120px;
+        height: 120px;
+    }
+
+    .img_li_2_dot2 {
+        height: 32px;
+        line-height: 16px;
+        color: #999;
+        font-size: 12px;
+        margin-top: 5px;
+        text-align: center;
+    }
+
+    .img_li_2_a:hover .img_li_2_dot2 {
+        color: #a91b33;
+    }
+}
+
+.index_1 {
+    margin-top: 30px;
+
+    .shop_nav_2 {
+        width: 1200px;
+        min-height: 50px;
+        line-height: 35px;
+        border: 1px solid #ddd;
+        background-color: #f7fbfe;
+        margin-top: 20px;
+        padding: 10px;
+        box-sizing: border-box;
+        font-size: 16px;
+        font-weight: 600;
+
+        .shop_nav_2_a {
+            color: #a91b33;
+            display: inline-block;
+            width: 117px;
+            text-align: center;
+        }
+    }
+}
+
+
+
+.index_2 {
+    margin-top: 30px;
+    min-height: 100px;
+}
+
+.index_3 {
+    margin-top: 30px;
+    min-height: 100px;
+}
+
+.index_4 {
+    margin-top: 30px;
+    min-height: 100px;
+}
+
+.index_5 {
+    margin-top: 30px;
+    min-height: 100px;
+    margin-bottom: 30px;
+}
+
+/* 三农市场网-商城-商品列表 */
+.categ_table {
+    .categ_table_head_box {
+        height: 61px;
+        border-bottom: solid 1px #E9E9E9;
+    }
+
+    .categ_table_head_box>.categ_table_td_1 {
+        height: 61px;
+        line-height: 61px;
+    }
+
+    .categ_table_head_box>.categ_table_td_2 {
+        height: 61px;
+        line-height: 61px;
+    }
+
+    .categ_table_head_box>.categ_table_td_3 {
+        height: 61px;
+        line-height: 61px;
+    }
+
+    .categ_table_head_box>.categ_table_td_4 {
+        height: 61px;
+        line-height: 61px;
+    }
+
+    .categ_table_td_1 {
+        float: left;
+        height: 100%;
+        text-align: center;
+        color: #666;
+        font-size: 16px;
+        width: 155px;
+        margin-right: 126px;
+    }
+
+    .categ_table_td_2 {
+        float: left;
+        height: 100%;
+        text-align: center;
+        color: #666;
+        font-size: 16px;
+        width: 480px;
+        margin-right: 124px;
+    }
+
+    .categ_table_td_3 {
+        float: left;
+        height: 100%;
+        text-align: center;
+        color: #666;
+        font-size: 16px;
+        width: 120px;
+        margin-right: 62px;
+    }
+
+    .categ_table_td_4 {
+        float: left;
+        height: 100%;
+        text-align: center;
+        color: #666;
+        font-size: 16px;
+        width: 133px;
+    }
+
+    .categ_table_li {
+        height: 161px;
+        box-sizing: border-box;
+        padding: 15px 0px;
+        border-bottom: solid 1px #E9E9E9;
+    }
+
+    .categ_table_td_1_img {
+        display: block;
+        width: 130px;
+        height: 130px;
+        margin: 0px auto;
+    }
+
+    .categ_table_li .categ_table_td_1 {
+        line-height: 160px;
+        line-height: 160px;
+    }
+
+    .categ_table_li .categ_table_td_2 {
+        height: 100%;
+        display: flex;
+        align-items: center;
+    }
+
+    .categ_table_td_2_in {
+        display: flex;
+        flex-direction: column;
+        width: 100%;
+    }
+
+    .categ_table_li .categ_table_td_2_dot1 {
+        text-align: left;
+        flex-basis: 100%;
+        height: 21px;
+        line-height: 21px;
+        font-size: 16px;
+        font-weight: bold;
+        color: #333;
+    }
+
+    .categ_table_li .categ_table_td_2_dot2 {
+        flex-basis: 100%;
+        max-height: 36px;
+        text-align: left;
+        line-height: 18px;
+        width: 100%;
+        font-size: 14px;
+        color: #999;
+    }
+
+    .categ_table_li .categ_table_td_3 {
+        line-height: 144px;
+    }
+
+    .categ_table_li .categ_table_td_4 {
+        line-height: 144px;
+    }
+}
+
+.info_foot {
+    margin-top: 60px;
+    text-align: center;
+
+    .info_foot_a {
+        height: 34px;
+        line-height: 34px;
+        color: #666;
+        display: inline-block;
+        border-radius: 4px;
+        margin: 0px 10px;
+        font-size: 14px;
+        border: solid 1px #EAEAEA;
+        background: #F6F6F6;
+        padding: 0px 15px;
+    }
+
+    .info_foot_a_only {
+        font-weight: bold;
+        background: #a91b33;
+        color: #fff;
+    }
+}
+
+@media screen and (min-width:1200px) {
+    /*pc_1440*/
+    @media screen and (max-width:1440px) {
+        /*1200*/
+    }
+
+    .pc_none {
+        display: none;
+    }
+}
+
+@media screen and (max-width:599px) {}
+
+@media screen and (max-width:320px) {}
+
+//导航条
+.breadcrumb {
+    width: 100%;
+    height: 22px;
+    padding-bottom: 30px;
+    border-bottom: 1px solid #ccc;
+    font-family: Microsoft YaHei, Microsoft YaHei;
+    font-weight: 400;
+    font-size: 20px;
+    color: #666666;
+    line-height: 23px;
+    text-align: left;
+    font-style: normal;
+    text-transform: none;
+    margin-top: 30px;
+
+    :deep(.el-breadcrumb) {
+        display: inline-block;
+        vertical-align: -4px;
+    }
+
+    :deep(.el-breadcrumb__inner a),
+    :deep(.el-breadcrumb__inner.is-link) {
+        color: #666666;
+        font-weight: 400;
+        text-decoration: none;
+        transition: var(--el-transition-color);
+    }
+
+    span {
+        font-family: Microsoft YaHei, Microsoft YaHei;
+        font-weight: 400;
+        font-size: 20px;
+        color: #666666;
+        line-height: 23px;
+        text-align: left;
+        font-style: normal;
+        text-transform: none;
+    }
+
+    span:hover {
+        color: #666666;
+    }
+
+    .location {
+        margin-right: 20px;
+        width: 100px;
+        height: 22px;
+        font-family: Microsoft YaHei, Microsoft YaHei;
+        font-weight: 400;
+        font-size: 20px;
+        color: #666666;
+        line-height: 23px;
+        text-align: left;
+        font-style: normal;
+        text-transform: none;
+    }
+}
+
+//分页
+.pagination1 {
+    width: 1200px;
+    height: 34px;
+    margin-left: 141px;
+    display: flex;
+    justify-content: center;
+    margin: 0;
+
+    // 鼠标移入后字体颜色
+    .el-pagination::v-deep :hover {
+        color: #a91b33;
+    }
+
+    .el-pagination.is-background::v-deep .btn-next,
+    .el-pagination.is-background::v-deep .btn-prev {
+        width: 70px;
+        height: 34px;
+        margin: 0px 10px;
+        border-radius: 4px;
+    }
+
+    .el-pagination.is-background::v-deep .el-pager li {
+        margin: 0px 10px;
+        width: 38px;
+        height: 34px;
+        border-radius: 4px;
+    }
+
+    .el-pagination.is-background::v-deep .btn-next.is-active,
+    .el-pagination.is-background::v-deep .btn-prev.is-active,
+    .el-pagination.is-background::v-deep .el-pager li.is-active {
+        background-color: #a91b33;
+        color: #fff;
+    }
+
+
+}

+ 866 - 0
assets/css/shop/newsClass.less

@@ -0,0 +1,866 @@
+@charset "utf-8";
+* {
+    font-family: "微软雅黑", "microsoft yahei";
+}
+ul,
+ol {
+    list-style: none;
+}
+a:active {
+    text-decoration: none;
+}
+a:hover {
+    text-decoration: none;
+}
+a:visited {
+    text-decoration: none;
+}
+a:link {
+    text-decoration: none;
+}
+a:focus {
+    text-decoration: none;
+}
+body {
+    position: relative;
+}
+.clearfix {
+    overflow: hidden;
+}
+.clearfix_2::after {
+    content: '';
+    display: block;
+    height: 0;
+    visibility: hidden;
+    clear: both;
+}
+.hiddenColor {
+    visibility: hidden;
+}
+.hand {
+    cursor: pointer;
+}
+.aTag_parent {
+    position: relative;
+}
+.aTag_parent>a,
+.aTag {
+    display: block;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    z-index: 99;
+    border: 0px;
+    top: 0px;
+    left: 0px;
+    background: rgba(0, 0, 0, 0);
+}
+.dot1 {
+    display: block;
+    word-break: keep-all;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+.dot2 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+}
+.dot3 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 3;
+}
+input,
+img {
+    border: none;
+}
+.cover100 img {
+    display: block;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+.back100 {
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+}
+article,
+aside,
+footer,
+header,
+time,
+video,
+main,
+nav,
+h4,
+h3,
+section {
+    display: block;
+}
+.index_main {
+    margin: 0 auto;
+}
+.slow_6 {
+    -webkit-transition: all .6s;
+    -moz-transition: all .6s;
+    -ms-transition: all .6s;
+    -o-transition: all .6s;
+    transition: all .6s;
+}
+.index_main {
+    width: 1200px;
+    margin: 0px auto 330px;
+}
+.shop_head_1 {
+    height: 29px;
+    position: relative;
+    .shop_head_1_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+    .shop_head_1_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+    .shop_head_1_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+.categ_color_box {
+    border: solid 1px #E9E9E9;
+    background: #F8F8F8;
+    margin-top: 30px;
+    box-sizing: border-box;
+    .categ_color_name {
+        width: 1160px;
+        margin: 0px auto;
+        height: 60px;
+        line-height: 60px;
+        color: #333;
+        font-size: 18px;
+        border-bottom: dashed 1px #E9E9E9;
+    }
+    .categ_color_in {
+        padding: 6px 0px 0px;
+    }
+    .categ_color_a {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #333;
+        margin: 10px 10px 16px;
+        font-size: 16px;
+        padding: 0px 10px;
+    }
+    .categ_color_a_only {
+        color: #fff;
+        background: #255590;
+    }
+}
+.categ_crumb {
+    line-height: 26px;
+    color: #999;
+    font-size: 20px;
+    margin-top: 30px;
+    padding-bottom: 30px;
+    border-bottom: solid 1px #D9D9D9;
+    .categ_crumb_text {
+        display: inline-block;
+        line-height: 26px;
+        color: #999;
+        font-size: 20px;
+        margin: 0px 11px;
+    }
+    span.categ_crumb_text {
+        color: #333;
+    }
+    a.categ_crumb_text:hover {
+        color: #255590;
+    }
+}
+.shop_head_2 {
+    height: 29px;
+    position: relative;
+    .shop_head_2_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+    .shop_head_2_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+    .shop_head_2_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+.shop_ul_2 {
+    margin-top: 30px;
+    .shop_li_2 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 17px;
+        box-sizing: border-box;
+        text-indent: 16px;
+        position: relative;
+    }
+    .shop_li_2:hover {
+        color: #255590;
+    }
+    .shop_li_2::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #ddd;
+        border-radius: 50%;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        z-index: 11;
+    }
+    .shop_li_2:nth-of-type(3n-2) {
+        font-weight: bold;
+    }
+    .shop_li_2:hover::after {
+        content: '';
+        display: block;
+        background: #255590;
+    }
+    .shop_li_2:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+.shop_img_ul_1 {
+    margin-top: 30px;
+    .shop_img_li_1 {
+        width: 350px;
+        height: 230px;
+        position: relative;
+    }
+    .shop_img_li_1_a {}
+    .shop_img_li_1_img {
+        display: block;
+        width: 350px;
+        height: 230px;
+    }
+    .shop_img_li_1_rgba {
+        width: 350px;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-size: 18px;
+        padding: 0px 10px;
+        box-sizing: border-box;
+        position: absolute;
+        z-index: 11;
+        left: 0px;
+        bottom: 0px;
+        background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 33%, rgba(0, 0, 0, 0) 100%);
+    }
+}
+.shop_ul_1 {
+    margin-top: 17px;
+    .shop_li_1 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 18px;
+        box-sizing: border-box;
+        position: relative;
+    }
+    .shop_li_1:hover {
+        color: #255590;
+    }
+    .shop_li_1:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+.shop_head_3 {
+    margin-top: 30px;
+    height: 29px;
+    position: relative;
+    .shop_head_3_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+    .shop_head_3_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+    .shop_head_3_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+.shop_img_ul_2 {
+    margin-top: 30px;
+    .shop_img_li_2 {
+        width: 350px;
+        height: 230px;
+        position: relative;
+    }
+    .shop_img_li_2_a {}
+    .shop_img_li_2_img {
+        display: block;
+        width: 350px;
+        height: 230px;
+    }
+    .shop_img_li_2_rgba {
+        width: 350px;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-size: 18px;
+        padding: 0px 10px;
+        box-sizing: border-box;
+        position: absolute;
+        z-index: 11;
+        left: 0px;
+        bottom: 0px;
+        background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 33%, rgba(0, 0, 0, 0) 100%);
+    }
+}
+.shop_ul_3 {
+    margin-top: 30px;
+    .shop_li_3 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 17px;
+        box-sizing: border-box;
+        text-indent: 16px;
+        position: relative;
+    }
+    .shop_li_3:hover {
+        color: #255590;
+    }
+    .shop_li_3::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #ddd;
+        border-radius: 50%;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        z-index: 11;
+    }
+    .shop_li_3:nth-of-type(3n-2) {
+        font-weight: bold;
+    }
+    .shop_li_3:hover::after {
+        content: '';
+        display: block;
+        background: #255590;
+    }
+    .shop_li_3:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+.shop_head_4 {
+    height: 29px;
+    position: relative;
+    .shop_head_4_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+    .shop_head_4_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+    .shop_head_4_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+.shop_img_ul_3 {
+    margin-top: 30px;
+    .shop_img_li_3 {
+        width: 451px;
+        height: 265px;
+        margin-bottom: 20px;
+        position: relative;
+    }
+    .shop_img_li_3_a {}
+    .shop_img_li_3_img {
+        display: block;
+        width: 451px;
+        height: 265px;
+    }
+    .shop_img_li_3_rgba {
+        width: 451px;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-size: 18px;
+        padding: 0px 10px;
+        box-sizing: border-box;
+        position: absolute;
+        z-index: 11;
+        left: 0px;
+        bottom: 0px;
+        background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 33%, rgba(0, 0, 0, 0) 100%);
+    }
+}
+.shop_ul_4 {
+    .shop_li_4 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 24px;
+        box-sizing: border-box;
+        text-indent: 28px;
+        position: relative;
+    }
+    .shop_li_4:hover {
+        color: #255590;
+    }
+    .shop_li_4_num {
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        display: block;
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        font-style: italic;
+        text-indent: 0px;
+        content: '??';
+    }
+    .shop_li_4:nth-of-type(-n+3) .shop_li_4_num {
+        color: #255590;
+    }
+    .shop_li_4:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+.banner_1 {
+    margin-top: 29px;
+    height: 90px;
+    overflow: hidden;
+    .banner_1_a {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+    .banner_1_img {
+        display: block;
+        width: 100%;
+    }
+}
+.banner_2 {
+    margin-top: 29px;
+    height: 90px;
+    overflow: hidden;
+    .banner_2_a {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+    .banner_2_img {
+        display: block;
+        width: 100%;
+    }
+}
+.index_1 {
+    margin-top: 30px;
+}
+.index_2 {
+    margin-top: 30px;
+}
+.index_2_left {
+    float: left;
+    width: 720px;
+}
+.index_2_right {
+    float: right;
+    width: 451px;
+}
+.index_3 {
+    margin-top: 30px;
+}
+.index_3_left {
+    float: left;
+    width: 720px;
+}
+.index_3_right {
+    float: right;
+    width: 451px;
+}
+.index_3_in {
+    width: 350px;
+}
+.index_3_in:nth-of-type(odd) {
+    float: left;
+}
+.index_3_in:nth-of-type(even) {
+    float: right;
+}
+.index_3_in_2 {
+    width: 350px;
+}
+.index_3_in_2:nth-of-type(odd) {
+    float: left;
+}
+.index_3_in_2:nth-of-type(even) {
+    float: right;
+}
+/* 三农市场网-商城-资讯列表 */
+.info_1_left {
+    width: 900px;
+    float: left;
+}
+.info_1_aside {
+    width: 266px;
+    float: right;
+}
+.info_ul_1 {
+    .info_li_1 {
+        margin-bottom: 20px;
+    }
+    .info_li_1_a {
+        height: 24px;
+        line-height: 24px;
+        float: left;
+        color: #333;
+        font-size: 18px;
+        padding-right: 22px;
+        max-width: 777px;
+        position: relative;
+    }
+    .info_li_1_a_hot::after {
+        content: '热';
+        display: block;
+        width: 20px;
+        height: 20px;
+        border-radius: 4px;
+        position: absolute;
+        top: 0px;
+        right: 0px;
+        background: #FF2626;
+        font-weight: lighter;
+        line-height: 20px;
+        text-align: center;
+        color: #fff;
+        font-size: 14px;
+    }
+    .info_li_1_time {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        float: right;
+    }
+    .info_li_1:nth-of-type(5n-4) {
+        font-weight: bold;
+        margin-top: 30px;
+    }
+    .info_li_1:nth-of-type(5n-4) .info_li_1_a {
+        font-weight: bold;
+    }
+    .info_li_1:nth-of-type(5n-4) .info_li_1_time {
+        font-weight: bold;
+    }
+    .info_li_1:nth-of-type(5n) {
+        border-bottom: solid 1px #D9D9D9;
+        padding-bottom: 30px;
+    }
+}
+.info_foot {
+    margin-top: 60px;
+    text-align: center;
+    .info_foot_a {
+        height: 34px;
+        line-height: 34px;
+        color: #666;
+        display: inline-block;
+        border-radius: 4px;
+        margin: 0px 10px;
+        font-size: 14px;
+        border: solid 1px #EAEAEA;
+        background: #F6F6F6;
+        padding: 0px 15px;
+    }
+    .info_foot_a_only {
+        font-weight: bold;
+        background: #255590;
+        color: #fff;
+    }
+}
+.shop_head_5 {
+    height: 29px;
+    margin-top: 58px;
+    position: relative;
+    .shop_head_5_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+}
+.shop_img_ul_4 {
+    margin-top: 30px;
+    .shop_img_li_4 {
+        margin-bottom: 20px;
+    }
+    .shop_img_li_4_a {
+        display: block;
+        width: 100%;
+    }
+    .shop_img_li_4_img {
+        float: left;
+        width: 120px;
+        height: 120px;
+    }
+    .shop_img_li_4_right {
+        float: right;
+        width: 140px;
+    }
+    .shop_img_li_4_dot3 {
+        height: 69px;
+        line-height: 23px;
+        margin-top: 2px;
+        color: #333;
+        font-size: 18px;
+    }
+    .shop_img_li_4_btn {
+        border: solid 1px #255590;
+        height: 23px;
+        line-height: 23px;
+        color: #255590;
+        font-size: 14px;
+        margin-top: 16px;
+        padding: 0px 4px;
+        float: left;
+    }
+    .shop_img_li_4_a:hover .shop_img_li_4_dot3 {
+        color: #255590;
+    }
+    .shop_img_li_4:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+.shop_ul_5 {
+    margin-top: 30px;
+    .shop_li_5 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 17px;
+        box-sizing: border-box;
+        text-indent: 16px;
+        position: relative;
+    }
+    .shop_li_5:hover {
+        color: #255590;
+    }
+    .shop_li_5::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #ddd;
+        border-radius: 50%;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        z-index: 11;
+    }
+    .shop_li_5:hover::after {
+        content: '';
+        display: block;
+        background: #255590;
+    }
+    .shop_li_5:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+.shop_head_6 {
+    height: 29px;
+    margin-top: 31px;
+    position: relative;
+    .shop_head_6_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+}
+.shop_img_ul_5 {
+    margin-top: 30px;
+    .shop_img_li_5 {
+        margin-bottom: 20px;
+    }
+    .shop_img_li_5_a {
+        display: block;
+        width: 100%;
+    }
+    .shop_img_li_5_img {
+        float: left;
+        width: 120px;
+        height: 120px;
+    }
+    .shop_img_li_5_right {
+        float: right;
+        width: 140px;
+    }
+    .shop_img_li_5_dot3 {
+        height: 69px;
+        line-height: 23px;
+        margin-top: 2px;
+        color: #333;
+        font-size: 18px;
+    }
+    .shop_img_li_5_btn {
+        border: solid 1px #255590;
+        height: 23px;
+        line-height: 23px;
+        color: #255590;
+        font-size: 14px;
+        margin-top: 16px;
+        padding: 0px 4px;
+        float: left;
+    }
+    .shop_img_li_5_a:hover .shop_img_li_5_dot3 {
+        color: #255590;
+    }
+    .shop_img_li_5:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+.shop_ul_6 {
+    margin-top: 30px;
+    .shop_li_6 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 17px;
+        box-sizing: border-box;
+        text-indent: 16px;
+        position: relative;
+    }
+    .shop_li_6:hover {
+        color: #255590;
+    }
+    .shop_li_6::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #ddd;
+        border-radius: 50%;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        z-index: 11;
+    }
+    .shop_li_6:hover::after {
+        content: '';
+        display: block;
+        background: #255590;
+    }
+    .shop_li_6:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+/* 三农市场网-商城-资讯列表 */
+@media screen and (min-width:1200px) {
+    /*pc_1440*/
+    @media screen and (max-width:1440px) {
+        /*1200*/
+    }
+    .pc_none {
+        display: none;
+    }
+}
+@media screen and (max-width:599px) {}
+@media screen and (max-width:320px) {}

+ 606 - 0
assets/css/shop/newsDetail.less

@@ -0,0 +1,606 @@
+@charset "utf-8";
+
+* {
+    font-family: "微软雅黑", "microsoft yahei";
+}
+
+ul,
+ol {
+    list-style: none;
+}
+
+a:active {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: none;
+}
+
+a:visited {
+    text-decoration: none;
+}
+
+a:link {
+    text-decoration: none;
+}
+
+a:focus {
+    text-decoration: none;
+}
+
+body {
+    position: relative;
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.clearfix_2::after {
+    content: '';
+    display: block;
+    height: 0;
+    visibility: hidden;
+    clear: both;
+}
+
+.hiddenColor {
+    visibility: hidden;
+}
+
+.hand {
+    cursor: pointer;
+}
+
+.aTag_parent {
+    position: relative;
+}
+
+.aTag_parent>a,
+.aTag {
+    display: block;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    z-index: 99;
+    border: 0px;
+    top: 0px;
+    left: 0px;
+    background: rgba(0, 0, 0, 0);
+}
+
+.dot1 {
+    display: block;
+    word-break: keep-all;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+.dot2 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+}
+
+.dot3 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 3;
+}
+
+input,
+img {
+    border: none;
+}
+
+.cover100 img {
+    display: block;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+
+.back100 {
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+}
+
+article,
+aside,
+footer,
+header,
+time,
+video,
+main,
+nav,
+h4,
+h3,
+section {
+    display: block;
+}
+
+.slow_6 {
+    -webkit-transition: all .6s;
+    -moz-transition: all .6s;
+    -ms-transition: all .6s;
+    -o-transition: all .6s;
+    transition: all .6s;
+}
+
+.index_main {
+    width: 1200px;
+    margin: 0px auto 30px;
+}
+
+.banner_1 {
+    margin-top: 29px;
+    height: 90px;
+    overflow: hidden;
+
+    .banner_1_a {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .banner_1_img {
+        display: block;
+        width: 100%;
+    }
+}
+
+.banner_2 {
+    margin-top: 29px;
+    height: 90px;
+    overflow: hidden;
+
+    .banner_2_a {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .banner_2_img {
+        display: block;
+        width: 100%;
+    }
+}
+
+.info_1_left {
+    width: 900px;
+    float: left;
+}
+
+.info_1_aside {
+    width: 266px;
+    float: right;
+    margin-top: 20px;
+}
+
+.info_ul_1 {
+    .info_li_1 {
+        margin-bottom: 20px;
+    }
+
+    .info_li_1_a {
+        height: 24px;
+        line-height: 24px;
+        float: left;
+        color: #333;
+        font-size: 18px;
+        padding-right: 22px;
+        max-width: 777px;
+        position: relative;
+    }
+
+    .info_li_1_a_hot::after {
+        content: '热';
+        display: block;
+        width: 20px;
+        height: 20px;
+        border-radius: 4px;
+        position: absolute;
+        top: 0px;
+        right: 0px;
+        background: #FF2626;
+        font-weight: lighter;
+        line-height: 20px;
+        text-align: center;
+        color: #fff;
+        font-size: 14px;
+    }
+
+    .info_li_1_time {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        float: right;
+    }
+
+    .info_li_1:nth-of-type(5n-4) {
+        font-weight: bold;
+        margin-top: 30px;
+    }
+
+    .info_li_1:nth-of-type(5n-4) .info_li_1_a {
+        font-weight: bold;
+    }
+
+    .info_li_1:nth-of-type(5n-4) .info_li_1_time {
+        font-weight: bold;
+    }
+
+    .info_li_1:nth-of-type(5n) {
+        border-bottom: solid 1px #D9D9D9;
+        padding-bottom: 30px;
+    }
+}
+
+.info_foot {
+    margin-top: 60px;
+    text-align: center;
+
+    .info_foot_a {
+        height: 34px;
+        line-height: 34px;
+        color: #666;
+        display: inline-block;
+        border-radius: 4px;
+        margin: 0px 10px;
+        font-size: 14px;
+        border: solid 1px #EAEAEA;
+        background: #F6F6F6;
+        padding: 0px 15px;
+    }
+
+    .info_foot_a_only {
+        font-weight: bold;
+        background: #255590;
+        color: #fff;
+    }
+}
+
+.shop_head_1 {
+    height: 29px;
+    margin-top: 26px;
+    position: relative;
+
+    .shop_head_1_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(../public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+}
+
+.shop_img_ul_1 {
+    margin-top: 30px;
+
+    .shop_img_li_1 {
+        margin-bottom: 20px;
+    }
+
+    .shop_img_li_1_a {
+        display: block;
+        width: 100%;
+    }
+
+    .shop_img_li_1_img {
+        float: left;
+        width: 120px;
+        height: 120px;
+    }
+
+    .shop_img_li_1_right {
+        float: right;
+        width: 140px;
+    }
+
+    .shop_img_li_1_dot3 {
+        height: 69px;
+        line-height: 23px;
+        margin-top: 2px;
+        color: #333;
+        font-size: 18px;
+    }
+
+    .shop_img_li_1_btn {
+        border: solid 1px #255590;
+        height: 23px;
+        line-height: 23px;
+        color: #255590;
+        font-size: 14px;
+        margin-top: 16px;
+        padding: 0px 4px;
+        float: left;
+    }
+
+    .shop_img_li_1_a:hover .shop_img_li_4_dot3 {
+        color: #255590;
+    }
+
+    .shop_img_li_1:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.shop_ul_1 {
+    margin-top: 30px;
+
+    .shop_li_1 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 17px;
+        box-sizing: border-box;
+        text-indent: 16px;
+        position: relative;
+    }
+
+    .shop_li_1:hover {
+        color: #255590;
+    }
+
+    .shop_li_1::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #ddd;
+        border-radius: 50%;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        z-index: 11;
+    }
+
+    .shop_li_1:hover::after {
+        content: '';
+        display: block;
+        background: #255590;
+    }
+
+    .shop_li_1:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.shop_head_2 {
+    height: 29px;
+    margin-top: 31px;
+    position: relative;
+
+    .shop_head_2_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(../public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+}
+
+.shop_img_ul_2 {
+    margin-top: 30px;
+
+    .shop_img_li_2 {
+        margin-bottom: 20px;
+    }
+
+    .shop_img_li_2_a {
+        display: block;
+        width: 100%;
+    }
+
+    .shop_img_li_2_img {
+        float: left;
+        width: 120px;
+        height: 120px;
+    }
+
+    .shop_img_li_2_right {
+        float: right;
+        width: 140px;
+    }
+
+    .shop_img_li_2_dot3 {
+        height: 69px;
+        line-height: 23px;
+        margin-top: 2px;
+        color: #333;
+        font-size: 18px;
+    }
+
+    .shop_img_li_2_btn {
+        border: solid 1px #255590;
+        height: 23px;
+        line-height: 23px;
+        color: #255590;
+        font-size: 14px;
+        margin-top: 16px;
+        padding: 0px 4px;
+        float: left;
+    }
+
+    .shop_img_li_2_a:hover .shop_img_li_5_dot3 {
+        color: #255590;
+    }
+
+    .shop_img_li_2:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.shop_ul_2 {
+    margin-top: 30px;
+
+    .shop_li_2 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 17px;
+        box-sizing: border-box;
+        text-indent: 16px;
+        position: relative;
+    }
+
+    .shop_li_2:hover {
+        color: #255590;
+    }
+
+    .shop_li_2::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #ddd;
+        border-radius: 50%;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        z-index: 11;
+    }
+
+    .shop_li_2:hover::after {
+        content: '';
+        display: block;
+        background: #255590;
+    }
+
+    .shop_li_2:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.categ_crumb {
+    line-height: 26px;
+    color: #999;
+    font-size: 20px;
+    margin-top: 30px;
+    padding-bottom: 30px;
+    border-bottom: solid 1px #D9D9D9;
+
+    .categ_crumb_text {
+        display: inline-block;
+        line-height: 26px;
+        color: #999;
+        font-size: 20px;
+        margin: 0px 11px;
+    }
+
+    span.categ_crumb_text {
+        color: #333;
+    }
+
+    a.categ_crumb_text:hover {
+        color: #255590;
+    }
+}
+
+.show_1_h4 {
+    margin-top: 30px;
+    color: #333;
+    font-size: 30px;
+    line-height: 40px;
+}
+
+.show_1_title_box {
+    margin-top: 30px;
+}
+
+.show_1_title {
+    font-size: 14px;
+    color: #999;
+    height: 18px;
+    line-height: 18px;
+    margin-right: 40px;
+    float: left;
+}
+
+.show_1_article {
+    margin-top: 60px;
+    padding-bottom: 60px;
+}
+
+.show_foot {
+    color: #999;
+    font-size: 20px;
+    line-height: 34px;
+    margin-top: 40px;
+    border-top: solid 1px #D9D9D9;
+
+}
+
+//导航条
+.breadcrumb {
+    width: 100%;
+    height: 22px;
+    padding-bottom: 25px;
+    border-bottom: 1px solid #ccc;
+    font-family: Microsoft YaHei, Microsoft YaHei;
+    font-weight: 400;
+    font-size: 20px;
+    color: #666666;
+    line-height: 23px;
+    text-align: left;
+    font-style: normal;
+    text-transform: none;
+    margin-top: 25px;
+
+    :deep(.el-breadcrumb) {
+        display: inline-block;
+        vertical-align: -4px;
+    }
+
+    :deep(.el-breadcrumb__inner a),
+    :deep(.el-breadcrumb__inner.is-link) {
+        color: #666666;
+        font-weight: 400;
+        text-decoration: none;
+        transition: var(--el-transition-color);
+    }
+
+    span {
+        font-family: Microsoft YaHei, Microsoft YaHei;
+        font-weight: 400;
+        font-size: 20px;
+        color: #666666;
+        line-height: 23px;
+        text-align: left;
+        font-style: normal;
+        text-transform: none;
+    }
+
+    span:hover {
+        color: #666666;
+    }
+
+    .location {
+        margin-right: 20px;
+        width: 100px;
+        height: 22px;
+        font-family: Microsoft YaHei, Microsoft YaHei;
+        font-weight: 400;
+        font-size: 20px;
+        color: #666666;
+        line-height: 23px;
+        text-align: left;
+        font-style: normal;
+        text-transform: none;
+    }
+}

+ 1064 - 0
assets/css/shop/newsList.less

@@ -0,0 +1,1064 @@
+@charset "utf-8";
+
+* {
+    font-family: "微软雅黑", "microsoft yahei";
+}
+
+ul,
+ol {
+    list-style: none;
+}
+
+a:active {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: none;
+}
+
+a:visited {
+    text-decoration: none;
+}
+
+a:link {
+    text-decoration: none;
+}
+
+a:focus {
+    text-decoration: none;
+}
+
+body {
+    position: relative;
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.clearfix_2::after {
+    content: '';
+    display: block;
+    height: 0;
+    visibility: hidden;
+    clear: both;
+}
+
+.hiddenColor {
+    visibility: hidden;
+}
+
+.hand {
+    cursor: pointer;
+}
+
+.aTag_parent {
+    position: relative;
+}
+
+.aTag_parent>a,
+.aTag {
+    display: block;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    z-index: 99;
+    border: 0px;
+    top: 0px;
+    left: 0px;
+    background: rgba(0, 0, 0, 0);
+}
+
+.dot1 {
+    display: block;
+    word-break: keep-all;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+.dot2 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+}
+
+.dot3 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 3;
+}
+
+input,
+img {
+    border: none;
+}
+
+.cover100 img {
+    display: block;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+
+.back100 {
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+}
+
+article,
+aside,
+footer,
+header,
+time,
+video,
+main,
+nav,
+h4,
+h3,
+section {
+    display: block;
+}
+
+.index_main {
+    margin: 0 auto;
+}
+
+.slow_6 {
+    -webkit-transition: all .6s;
+    -moz-transition: all .6s;
+    -ms-transition: all .6s;
+    -o-transition: all .6s;
+    transition: all .6s;
+}
+
+.index_main {
+    width: 1200px;
+    margin: 0px auto 30px;
+}
+
+.shop_head_1 {
+    height: 29px;
+    position: relative;
+
+    .shop_head_1_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(../public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+
+    .shop_head_1_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+
+    .shop_head_1_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+
+.categ_color_box {
+    border: solid 1px #E9E9E9;
+    background: #F8F8F8;
+    margin-top: 30px;
+    box-sizing: border-box;
+
+    .categ_color_name {
+        width: 1160px;
+        margin: 0px auto;
+        height: 60px;
+        line-height: 60px;
+        color: #333;
+        font-size: 18px;
+        border-bottom: dashed 1px #E9E9E9;
+    }
+
+    .categ_color_in {
+        padding: 6px 0px 0px;
+    }
+
+    .categ_color_a {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #333;
+        margin: 10px 10px 16px;
+        font-size: 16px;
+        padding: 0px 10px;
+    }
+
+    .categ_color_a_only {
+        color: #fff;
+        background: #255590;
+    }
+}
+
+.categ_crumb {
+    line-height: 26px;
+    color: #999;
+    font-size: 20px;
+    margin-top: 30px;
+    padding-bottom: 30px;
+    border-bottom: solid 1px #D9D9D9;
+
+    .categ_crumb_text {
+        display: inline-block;
+        line-height: 26px;
+        color: #999;
+        font-size: 20px;
+        margin: 0px 11px;
+    }
+
+    span.categ_crumb_text {
+        color: #333;
+    }
+
+    a.categ_crumb_text:hover {
+        color: #255590;
+    }
+}
+
+.shop_head_2 {
+    height: 29px;
+    position: relative;
+
+    .shop_head_2_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(../public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+
+    .shop_head_2_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+
+    .shop_head_2_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+
+.shop_ul_2 {
+    margin-top: 30px;
+
+    .shop_li_2 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 17px;
+        box-sizing: border-box;
+        text-indent: 16px;
+        position: relative;
+    }
+
+    .shop_li_2:hover {
+        color: #255590;
+    }
+
+    .shop_li_2::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #ddd;
+        border-radius: 50%;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        z-index: 11;
+    }
+
+    .shop_li_2:nth-of-type(3n-2) {
+        font-weight: bold;
+    }
+
+    .shop_li_2:hover::after {
+        content: '';
+        display: block;
+        background: #255590;
+    }
+
+    .shop_li_2:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.shop_img_ul_1 {
+    margin-top: 30px;
+
+    .shop_img_li_1 {
+        width: 350px;
+        height: 230px;
+        position: relative;
+    }
+
+    .shop_img_li_1_a {}
+
+    .shop_img_li_1_img {
+        display: block;
+        width: 350px;
+        height: 230px;
+    }
+
+    .shop_img_li_1_rgba {
+        width: 350px;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-size: 18px;
+        padding: 0px 10px;
+        box-sizing: border-box;
+        position: absolute;
+        z-index: 11;
+        left: 0px;
+        bottom: 0px;
+        background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 33%, rgba(0, 0, 0, 0) 100%);
+    }
+}
+
+.shop_ul_1 {
+    margin-top: 17px;
+
+    .shop_li_1 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 18px;
+        box-sizing: border-box;
+        position: relative;
+    }
+
+    .shop_li_1:hover {
+        color: #255590;
+    }
+
+    .shop_li_1:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.shop_head_3 {
+    margin-top: 30px;
+    height: 29px;
+    position: relative;
+
+    .shop_head_3_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(../public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+
+    .shop_head_3_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+
+    .shop_head_3_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+
+.shop_img_ul_2 {
+    margin-top: 30px;
+
+    .shop_img_li_2 {
+        width: 350px;
+        height: 230px;
+        position: relative;
+    }
+
+    .shop_img_li_2_a {}
+
+    .shop_img_li_2_img {
+        display: block;
+        width: 350px;
+        height: 230px;
+    }
+
+    .shop_img_li_2_rgba {
+        width: 350px;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-size: 18px;
+        padding: 0px 10px;
+        box-sizing: border-box;
+        position: absolute;
+        z-index: 11;
+        left: 0px;
+        bottom: 0px;
+        background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 33%, rgba(0, 0, 0, 0) 100%);
+    }
+}
+
+.shop_ul_3 {
+    margin-top: 30px;
+
+    .shop_li_3 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 17px;
+        box-sizing: border-box;
+        text-indent: 16px;
+        position: relative;
+    }
+
+    .shop_li_3:hover {
+        color: #255590;
+    }
+
+    .shop_li_3::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #ddd;
+        border-radius: 50%;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        z-index: 11;
+    }
+
+    .shop_li_3:nth-of-type(3n-2) {
+        font-weight: bold;
+    }
+
+    .shop_li_3:hover::after {
+        content: '';
+        display: block;
+        background: #255590;
+    }
+
+    .shop_li_3:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.shop_head_4 {
+    height: 29px;
+    position: relative;
+
+    .shop_head_4_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(../public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+
+    .shop_head_4_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+
+    .shop_head_4_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+
+.shop_img_ul_3 {
+    margin-top: 30px;
+
+    .shop_img_li_3 {
+        width: 451px;
+        height: 265px;
+        margin-bottom: 20px;
+        position: relative;
+    }
+
+    .shop_img_li_3_a {}
+
+    .shop_img_li_3_img {
+        display: block;
+        width: 451px;
+        height: 265px;
+    }
+
+    .shop_img_li_3_rgba {
+        width: 451px;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-size: 18px;
+        padding: 0px 10px;
+        box-sizing: border-box;
+        position: absolute;
+        z-index: 11;
+        left: 0px;
+        bottom: 0px;
+        background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 33%, rgba(0, 0, 0, 0) 100%);
+    }
+}
+
+.shop_ul_4 {
+    .shop_li_4 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 24px;
+        box-sizing: border-box;
+        text-indent: 28px;
+        position: relative;
+    }
+
+    .shop_li_4:hover {
+        color: #255590;
+    }
+
+    .shop_li_4_num {
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        display: block;
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        font-style: italic;
+        text-indent: 0px;
+        content: '??';
+    }
+
+    .shop_li_4:nth-of-type(-n+3) .shop_li_4_num {
+        color: #255590;
+    }
+
+    .shop_li_4:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.banner_1 {
+    margin-top: 29px;
+    height: 90px;
+    overflow: hidden;
+
+    .banner_1_a {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .banner_1_img {
+        display: block;
+        width: 100%;
+    }
+}
+
+.banner_2 {
+    margin-top: 29px;
+    height: 90px;
+    overflow: hidden;
+
+    .banner_2_a {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .banner_2_img {
+        display: block;
+        width: 100%;
+    }
+}
+
+.index_1 {
+    margin-top: 30px;
+}
+
+.index_2 {
+    margin-top: 30px;
+}
+
+.index_2_left {
+    float: left;
+    width: 720px;
+}
+
+.index_2_right {
+    float: right;
+    width: 451px;
+}
+
+.index_3 {
+    margin-top: 30px;
+    margin-bottom: 25px;
+}
+
+.index_3_left {
+    float: left;
+    width: 720px;
+}
+
+.index_3_right {
+    float: right;
+    width: 451px;
+}
+
+.index_3_in {
+    width: 350px;
+}
+
+.index_3_in:nth-of-type(odd) {
+    float: left;
+}
+
+.index_3_in:nth-of-type(even) {
+    float: right;
+}
+
+.index_3_in_2 {
+    width: 350px;
+}
+
+.index_3_in_2:nth-of-type(odd) {
+    float: left;
+}
+
+.index_3_in_2:nth-of-type(even) {
+    float: right;
+}
+
+/* 三农市场网-商城-资讯列表 */
+.info_1_left {
+    width: 900px;
+    float: left;
+}
+
+.info_1_aside {
+    width: 266px;
+    float: right;
+    margin-top: 55px;
+}
+
+.info_ul_1 {
+    .info_li_1 {
+        margin-bottom: 20px;
+    }
+
+    .info_li_1_a {
+        height: 24px;
+        line-height: 24px;
+        float: left;
+        color: #333;
+        font-size: 18px;
+        padding-right: 22px;
+        max-width: 777px;
+        position: relative;
+    }
+
+    .info_li_1_a_hot::after {
+        content: '热';
+        display: block;
+        width: 20px;
+        height: 20px;
+        border-radius: 4px;
+        position: absolute;
+        top: 0px;
+        right: 0px;
+        background: #FF2626;
+        font-weight: lighter;
+        line-height: 20px;
+        text-align: center;
+        color: #fff;
+        font-size: 14px;
+    }
+
+    .info_li_1_time {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        float: right;
+    }
+
+    .info_li_1:nth-of-type(5n-4) {
+        font-weight: bold;
+        margin-top: 30px;
+    }
+
+    .info_li_1:nth-of-type(5n-4) .info_li_1_a {
+        font-weight: bold;
+    }
+
+    .info_li_1:nth-of-type(5n-4) .info_li_1_time {
+        font-weight: bold;
+    }
+
+    .info_li_1:nth-of-type(5n) {
+        border-bottom: solid 1px #D9D9D9;
+        padding-bottom: 30px;
+    }
+}
+
+.info_foot {
+    margin-top: 60px;
+    text-align: center;
+
+    .info_foot_a {
+        height: 34px;
+        line-height: 34px;
+        color: #666;
+        display: inline-block;
+        border-radius: 4px;
+        margin: 0px 10px;
+        font-size: 14px;
+        border: solid 1px #EAEAEA;
+        background: #F6F6F6;
+        padding: 0px 15px;
+    }
+
+    .info_foot_a_only {
+        font-weight: bold;
+        background: #255590;
+        color: #fff;
+    }
+}
+
+.shop_head_5 {
+    height: 29px;
+    margin-top: 58px;
+    position: relative;
+
+    .shop_head_5_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(../public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+}
+
+.shop_img_ul_4 {
+    margin-top: 30px;
+
+    .shop_img_li_4 {
+        margin-bottom: 20px;
+    }
+
+    .shop_img_li_4_a {
+        display: block;
+        width: 100%;
+    }
+
+    .shop_img_li_4_img {
+        float: left;
+        width: 120px;
+        height: 120px;
+    }
+
+    .shop_img_li_4_right {
+        float: right;
+        width: 140px;
+    }
+
+    .shop_img_li_4_dot3 {
+        height: 69px;
+        line-height: 23px;
+        margin-top: 2px;
+        color: #333;
+        font-size: 18px;
+    }
+
+    .shop_img_li_4_btn {
+        border: solid 1px #255590;
+        height: 23px;
+        line-height: 23px;
+        color: #255590;
+        font-size: 14px;
+        margin-top: 16px;
+        padding: 0px 4px;
+        float: left;
+    }
+
+    .shop_img_li_4_a:hover .shop_img_li_4_dot3 {
+        color: #255590;
+    }
+
+    .shop_img_li_4:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.shop_ul_5 {
+    margin-top: 30px;
+
+    .shop_li_5 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 17px;
+        box-sizing: border-box;
+        text-indent: 16px;
+        position: relative;
+    }
+
+    .shop_li_5:hover {
+        color: #255590;
+    }
+
+    .shop_li_5::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #ddd;
+        border-radius: 50%;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        z-index: 11;
+    }
+
+    .shop_li_5:hover::after {
+        content: '';
+        display: block;
+        background: #255590;
+    }
+
+    .shop_li_5:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.shop_head_6 {
+    height: 29px;
+    margin-top: 31px;
+    position: relative;
+
+    .shop_head_6_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(../public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+}
+
+.shop_img_ul_5 {
+    margin-top: 30px;
+
+    .shop_img_li_5 {
+        margin-bottom: 20px;
+    }
+
+    .shop_img_li_5_a {
+        display: block;
+        width: 100%;
+    }
+
+    .shop_img_li_5_img {
+        float: left;
+        width: 120px;
+        height: 120px;
+    }
+
+    .shop_img_li_5_right {
+        float: right;
+        width: 140px;
+    }
+
+    .shop_img_li_5_dot3 {
+        height: 69px;
+        line-height: 23px;
+        margin-top: 2px;
+        color: #333;
+        font-size: 18px;
+    }
+
+    .shop_img_li_5_btn {
+        border: solid 1px #255590;
+        height: 23px;
+        line-height: 23px;
+        color: #255590;
+        font-size: 14px;
+        margin-top: 16px;
+        padding: 0px 4px;
+        float: left;
+    }
+
+    .shop_img_li_5_a:hover .shop_img_li_5_dot3 {
+        color: #255590;
+    }
+
+    .shop_img_li_5:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.shop_ul_6 {
+    margin-top: 30px;
+
+    .shop_li_6 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 17px;
+        box-sizing: border-box;
+        text-indent: 16px;
+        position: relative;
+    }
+
+    .shop_li_6:hover {
+        color: #255590;
+    }
+
+    .shop_li_6::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #ddd;
+        border-radius: 50%;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        z-index: 11;
+    }
+
+    .shop_li_6:hover::after {
+        content: '';
+        display: block;
+        background: #255590;
+    }
+
+    .shop_li_6:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+/* 三农市场网-商城-资讯列表 */
+@media screen and (min-width:1200px) {
+    /*pc_1440*/
+    @media screen and (max-width:1440px) {
+        /*1200*/
+    }
+
+    .pc_none {
+        display: none;
+    }
+}
+
+@media screen and (max-width:599px) {}
+
+@media screen and (max-width:320px) {}
+
+//分页
+.pagination {
+    width: 800px;
+    height: 34px;
+    margin-left: 141px;
+    display: flex;
+    justify-content: center;
+    margin: 0;
+
+    // 鼠标移入后字体颜色
+    .el-pagination::v-deep :hover {
+        color: #255590;
+    }
+
+    .el-pagination.is-background::v-deep .btn-next,
+    .el-pagination.is-background::v-deep .btn-prev {
+        width: 70px;
+        height: 34px;
+        margin: 0px 10px;
+        border-radius: 4px;
+    }
+
+    .el-pagination.is-background::v-deep .el-pager li {
+        margin: 0px 10px;
+        width: 38px;
+        height: 34px;
+        border-radius: 4px;
+    }
+
+    .el-pagination.is-background::v-deep .btn-next.is-active,
+    .el-pagination.is-background::v-deep .btn-prev.is-active,
+    .el-pagination.is-background::v-deep .el-pager li.is-active {
+        background-color: #255590;
+        color: #fff;
+    }
+
+
+}

+ 1320 - 0
assets/css/shop/shopClass.less

@@ -0,0 +1,1320 @@
+@charset "utf-8";
+
+* {
+    margin: 0;
+    padding: 0;
+    font-family: "微软雅黑", "microsoft yahei";
+}
+
+ul,
+ol {
+    list-style: none;
+}
+
+a:active {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: none;
+}
+
+a:visited {
+    text-decoration: none;
+}
+
+a:link {
+    text-decoration: none;
+}
+
+a:focus {
+    text-decoration: none;
+}
+
+body {
+    position: relative;
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.clearfix_2::after {
+    content: '';
+    display: block;
+    height: 0;
+    visibility: hidden;
+    clear: both;
+}
+
+.hiddenColor {
+    visibility: hidden;
+}
+
+.hand {
+    cursor: pointer;
+}
+
+.aTag_parent {
+    position: relative;
+}
+
+.aTag_parent>a,
+.aTag {
+    display: block;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    z-index: 99;
+    border: 0px;
+    top: 0px;
+    left: 0px;
+    background: rgba(0, 0, 0, 0);
+}
+
+.dot1 {
+    display: block;
+    word-break: keep-all;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+.dot2 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+}
+
+input,
+img {
+    border: none;
+}
+
+.cover100 img {
+    display: block;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+
+.back100 {
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+}
+
+article,
+aside,
+footer,
+header,
+time,
+video,
+main,
+nav,
+h4,
+h3,
+section {
+    display: block;
+}
+
+.index_main {
+    margin: 0 auto;
+}
+
+.slow_6 {
+    -webkit-transition: all .6s;
+    -moz-transition: all .6s;
+    -ms-transition: all .6s;
+    -o-transition: all .6s;
+    transition: all .6s;
+}
+
+.index_main {
+    width: 1200px;
+    margin-bottom: 30px;
+    margin-top: 20px;
+}
+
+.shop_nav {
+    margin-top: 20px;
+
+    .shop_nav_1 {
+        height: 44px;
+        line-height: 45px;
+        border-bottom: 2px solid #a91b33;
+        font-size: 24px;
+
+        .shop_nav_1_a {
+            display: inline-block;
+            color: #fff;
+            width: 150px;
+            text-align: center;
+            letter-spacing: 2px;
+            background-image: url(@/public/img/34.png);
+            background-repeat: no-repeat;
+        }
+    }
+
+    .shop_nav_2 {
+        width: 1200px;
+        min-height: 50px;
+        line-height: 35px;
+        border: 1px solid #ddd;
+        background-color: #f8f8f8;
+        margin: 20px 0;
+        padding: 10px;
+        box-sizing: border-box;
+        font-size: 16px;
+        font-weight: 600;
+
+        .shop_nav_2_a {
+            color: #333;
+            display: inline-block;
+            width: 117px;
+            text-align: center;
+        }
+        .shop_nav_2_a:hover{
+            color: #a91b33;
+        }
+    }
+
+}
+
+.shop_3 {
+    margin-top: 30px;
+}
+
+.shop_3_in {
+    width: 590px;
+}
+
+.shop_3_in:nth-of-type(odd) {
+    float: left;
+}
+
+.shop_3_in:nth-of-type(even) {
+    float: right;
+}
+
+.shop_head_2 {
+    height: 29px;
+    position: relative;
+
+    .shop_head_2_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #a91b33;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/shop/01.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+
+    .shop_head_2_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+
+    .shop_head_2_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+
+.shop_head_3 {
+    height: 29px;
+    position: relative;
+
+    .shop_head_3_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #F7812B;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/shop/02.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+
+    .shop_head_3_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+
+    .shop_head_3_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+
+.shop_img_ul_1 {
+    margin-top: 30px;
+    min-height: 580px;
+
+    .shop_img_li_1 {
+        margin-bottom: 22px;
+        border: solid 1px #ddd;
+        box-sizing: border-box;
+    }
+
+    .shop_img_li_1_img_box {
+        float: left;
+        width: 180px;
+        height: 178px;
+    }
+
+    .shop_img_li_1_img {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .shop_img_li_1_right {
+        float: right;
+        width: 367px;
+        margin-right: 22px;
+    }
+
+    .shop_img_li_1_h4 {
+        height: 50px;
+        line-height: 26px;
+        color: #333;
+        font-size: 20px;
+        font-weight: 500;
+        margin-top: 10px;
+    }
+
+    .shop_img_li_1_tag {
+        height: 25px;
+        line-height: 25px;
+        color: #a91b33;
+        border: solid 1px #a91b33;
+        margin-top: 16px;
+        box-sizing: border-box;
+        font-size: 14px;
+        float: left;
+        padding: 0px 5px;
+    }
+
+    .shop_img_li_1_price_box {
+        height: 26px;
+        margin-top: 21px;
+        line-height: 26px;
+        color: #333;
+        font-size: 20px;
+    }
+
+    .shop_img_li_1_price_tag {
+        height: 26px;
+        line-height: 26px;
+        color: #333;
+        font-size: 14px;
+        display: inline-block;
+    }
+
+    .shop_img_li_1_btn {
+        clear: both;
+        float: left;
+        height: 30px;
+        line-height: 30px;
+        color: #fff;
+        font-size: 14px;
+        background: #a91b33;
+        padding: 0px 20px;
+        margin-top: 32px;
+    }
+
+    .shop_img_li_1:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+
+    .shop_img_li_1_a:hover .shop_img_li_1_h4 {
+        color: #a91b33;
+    }
+
+    .shop_img_li_1_a:hover .shop_img_li_1_price_box {
+        color: #a91b33;
+    }
+
+    .shop_img_li_1_a:hover .shop_img_li_1_price_tag {
+        color: #a91b33;
+    }
+}
+
+.shop_ul_1 {
+    background: #F9F9F9;
+    border: solid 1px #ddd;
+    box-sizing: border-box;
+    margin-top: 30px;
+
+    .shop_li_1 {
+        border-bottom: dashed 1px #ddd;
+        padding: .6px 0px;
+    }
+
+    .shop_li_1_a {
+        display: block;
+        width: 100%;
+    }
+
+    .shop_li_1_left {
+        float: left;
+        width: 400px;
+        margin-left: 20px;
+    }
+
+    .shop_li_1_h4 {
+        height: 26px;
+        line-height: 26px;
+        color: #333;
+        font-size: 20px;
+        font-weight: 500;
+        position: relative;
+        text-indent: 16px;
+        margin-top: 20px;
+    }
+
+    .shop_li_1_h4::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #F7812B;
+        position: absolute;
+        left: 0px;
+        top: 11px;
+    }
+
+    .shop_li_1_text {
+        height: 21px;
+        line-height: 21px;
+        text-indent: 16px;
+        color: #666;
+        font-size: 16px;
+        margin: 10px 0px 18px 0px;
+    }
+
+    .shop_li_1_btn {
+        float: right;
+        height: 30px;
+        line-height: 30px;
+        color: #fff;
+        font-size: 14px;
+        background: #F7812B;
+        padding: 0px 20px;
+        margin: 34px 20px 0px 0px;
+    }
+
+    .shop_li_1_a:hover .shop_li_1_h4 {
+        color: #F7812B;
+    }
+
+    .shop_li_1_a:hover .shop_li_1_text {
+        color: #F7812B;
+    }
+}
+
+.shop_head_4 {
+    height: 29px;
+    position: relative;
+
+    .shop_head_4_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #a91b33;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/shop/01.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+
+    .shop_head_4_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+
+    .shop_head_4_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+
+.shop_head_5 {
+    height: 29px;
+    position: relative;
+
+    .shop_head_5_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #F7812B;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/shop/02.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+
+    .shop_head_5_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+
+    .shop_head_5_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+
+.shop_img_ul_2 {
+    margin-top: 30px;
+    min-height: 580px;
+
+    .shop_img_li_2 {
+        margin-bottom: 20px;
+        border: solid 1px #ddd;
+        box-sizing: border-box;
+    }
+
+    .shop_img_li_2_img_box {
+        float: left;
+        width: 180px;
+        height: 178px;
+    }
+
+    .shop_img_li_2_img {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .shop_img_li_2_right {
+        float: right;
+        width: 367px;
+        margin-right: 22px;
+    }
+
+    .shop_img_li_2_h4 {
+        height: 50px;
+        line-height: 26px;
+        color: #333;
+        font-size: 20px;
+        font-weight: 500;
+        margin-top: 10px;
+    }
+
+    .shop_img_li_2_tag {
+        height: 25px;
+        line-height: 25px;
+        color: #a91b33;
+        border: solid 1px #a91b33;
+        margin-top: 16px;
+        box-sizing: border-box;
+        font-size: 14px;
+        float: left;
+        padding: 0px 5px;
+    }
+
+    .shop_img_li_2_price_box {
+        height: 26px;
+        margin-top: 21px;
+        line-height: 26px;
+        color: #333;
+        font-size: 20px;
+    }
+
+    .shop_img_li_2_price_tag {
+        height: 26px;
+        line-height: 26px;
+        color: #333;
+        font-size: 14px;
+        display: inline-block;
+    }
+
+    .shop_img_li_2_btn {
+        clear: both;
+        float: left;
+        height: 30px;
+        line-height: 30px;
+        color: #fff;
+        font-size: 14px;
+        background: #a91b33;
+        padding: 0px 20px;
+        margin-top: 27px;
+    }
+
+    .shop_img_li_2:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+
+    .shop_img_li_2_a:hover .shop_img_li_2_h4 {
+        color: #a91b33;
+    }
+
+    .shop_img_li_2_a:hover .shop_img_li_2_price_box {
+        color: #a91b33;
+    }
+
+    .shop_img_li_2_a:hover .shop_img_li_2_price_tag {
+        color: #a91b33;
+    }
+}
+
+.shop_img_ul_3 {
+    margin-top: 30px;
+
+    .shop_img_li_3 {
+        margin-bottom: 20px;
+        border: solid 1px #ddd;
+        box-sizing: border-box;
+    }
+
+    .shop_img_li_3_img_box {
+        float: left;
+        width: 180px;
+        height: 178px;
+    }
+
+    .shop_img_li_3_img {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .shop_img_li_3_right {
+        float: right;
+        width: 367px;
+        margin-right: 22px;
+    }
+
+    .shop_img_li_3_h4 {
+        height: 50px;
+        line-height: 26px;
+        color: #333;
+        font-size: 20px;
+        font-weight: 500;
+        margin-top: 10px;
+    }
+
+    .shop_img_li_3_tag {
+        height: 25px;
+        line-height: 25px;
+        color: #F7812B;
+        border: solid 1px #F7812B;
+        margin-top: 16px;
+        box-sizing: border-box;
+        font-size: 14px;
+        float: left;
+        padding: 0px 5px;
+    }
+
+    .shop_img_li_3_price_box {
+        height: 26px;
+        margin-top: 21px;
+        line-height: 26px;
+        color: #333;
+        font-size: 20px;
+    }
+
+    .shop_img_li_3_price_tag {
+        height: 26px;
+        line-height: 26px;
+        color: #333;
+        font-size: 14px;
+        display: inline-block;
+    }
+
+    .shop_img_li_3_btn {
+        clear: both;
+        float: left;
+        height: 30px;
+        line-height: 30px;
+        color: #fff;
+        font-size: 14px;
+        background: #F7812B;
+        padding: 0px 20px;
+        margin-top: 27px;
+    }
+
+    .shop_img_li_3:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+
+    .shop_img_li_3_a:hover .shop_img_li_3_h4 {
+        color: #F7812B;
+    }
+
+    .shop_img_li_3_a:hover .shop_img_li_3_price_box {
+        color: #F7812B;
+    }
+
+    .shop_img_li_3_a:hover .shop_img_li_3_price_tag {
+        color: #F7812B;
+    }
+}
+
+.shop_4 {
+    margin-top: 29px;
+}
+
+.banner_1 {
+    margin-top: 29px;
+    height: 90px;
+    overflow: hidden;
+
+    .banner_1_a {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .banner_1_img {
+        display: block;
+        width: 100%;
+    }
+}
+
+.shop_5 {
+    margin-top: 30px;
+    margin-bottom: 30px;
+}
+
+.shop_5_left {
+    float: left;
+    width: 720px;
+}
+
+.shop_5_right {
+    float: right;
+    width: 450px;
+    min-height: 411px;
+}
+
+.shop_head_7 {
+    height: 29px;
+    position: relative;
+
+    .shop_head_7_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #a91b33;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+
+    .shop_head_7_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+
+    .shop_head_7_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+
+.shop_box_1 {
+    float: left;
+    width: 350px;
+}
+
+.shop_box_2 {
+    float: right;
+    width: 350px;
+}
+
+.shop_img_ul_4 {
+    margin-top: 30px;
+
+    .shop_img_li_4 {
+        width: 350px;
+        height: 230px;
+        margin-bottom: 20px;
+        position: relative;
+    }
+
+
+    .shop_img_li_4_img {
+        display: block;
+        width: 350px;
+        height: 230px;
+    }
+
+    .shop_img_li_4_rgba {
+        width: 350px;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-size: 18px;
+        padding: 0px 10px;
+        box-sizing: border-box;
+        position: absolute;
+        z-index: 11;
+        left: 0px;
+        bottom: 0px;
+        background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 33%, rgba(0, 0, 0, 0) 100%);
+    }
+}
+
+.shop_img_ul_5 {
+    margin-top: 0px;
+
+    .shop_img_li_5 {
+        width: 165px;
+        height: 96px;
+        position: relative;
+    }
+
+    .shop_img_li_5:nth-of-type(odd) {
+        float: left;
+    }
+
+    .shop_img_li_5:nth-of-type(even) {
+        float: right;
+    }
+
+
+    .shop_img_li_5_img {
+        width: 165px;
+        height: 96px;
+    }
+
+    .shop_img_li_5_rgba {
+        width: 165px;
+        height: 28px;
+        line-height: 28px;
+        color: #fff;
+        font-size: 14px;
+        box-sizing: border-box;
+        position: absolute;
+        padding: 0px 10px;
+        left: 0px;
+        bottom: 0px;
+        z-index: 11;
+        background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 6%, rgba(0, 0, 0, 0) 100%);
+    }
+}
+
+.shop_ul_2 {
+    margin-top: 30px;
+
+    .shop_li_2 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 17px;
+        box-sizing: border-box;
+        text-indent: 16px;
+        position: relative;
+    }
+
+    .shop_li_2:hover {
+        color: #a91b33;
+    }
+
+    .shop_li_2::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #ddd;
+        border-radius: 50%;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        z-index: 11;
+    }
+
+    .shop_li_2:nth-of-type(3n-2) {
+        font-weight: bold;
+    }
+
+    .shop_li_2:hover::after {
+        content: '';
+        display: block;
+        background: #a91b33;
+    }
+
+    .shop_li_2:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.shop_head_8 {
+    height: 29px;
+    position: relative;
+
+    .shop_head_8_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #a91b33;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+
+    .shop_head_8_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+
+    .shop_head_8_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+
+.shop_img_ul_6 {
+    margin-top: 30px;
+
+    .shop_img_li_6 {
+        height: 267px;
+        position: relative;
+        width: 450px;
+    }
+
+
+    .shop_img_li_6_img {
+        display: block;
+        height: 267px;
+        width: 450px;
+    }
+
+    .shop_img_li_6_rgba {
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-size: 18px;
+        padding: 0px 10px;
+        box-sizing: border-box;
+        position: absolute;
+        width: 450px;
+        z-index: 11;
+        left: 0px;
+        bottom: 0px;
+        background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 6%, rgba(0, 0, 0, 0) 100%);
+    }
+}
+
+.shop_ul_3 {
+    margin-top: 20px;
+
+    .shop_li_3 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 17px;
+        box-sizing: border-box;
+        text-indent: 16px;
+        position: relative;
+    }
+
+    .shop_li_3:hover {
+        color: #a91b33;
+    }
+
+    .shop_li_3::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #ddd;
+        border-radius: 50%;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        z-index: 11;
+    }
+
+    .shop_li_3:hover::after {
+        content: '';
+        display: block;
+        background: #a91b33;
+    }
+
+    .shop_li_3:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.shop_head_9 {
+    height: 29px;
+    position: relative;
+
+    .shop_head_9_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #a91b33;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+
+    .shop_head_9_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+
+    .shop_head_9_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+
+.shop_6 {
+    margin-top: 30px;
+}
+
+.shop_6_left {
+    float: left;
+    width: 720px;
+}
+
+.shop_6_right {
+    float: right;
+    width: 450px;
+}
+
+.shop_box_3 {
+    width: 350px;
+    float: left;
+}
+
+.shop_box_4 {
+    width: 350px;
+    float: right;
+}
+
+.shop_img_ul_7 {
+    margin-top: 30px;
+
+    .shop_img_li_7 {
+        width: 350px;
+        height: 230px;
+        margin-bottom: 20px;
+        position: relative;
+    }
+
+    .shop_img_li_7:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+
+
+    .shop_img_li_7_img {
+        display: block;
+        width: 350px;
+        height: 230px;
+    }
+
+    .shop_img_li_7_rgba {
+        width: 350px;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-size: 18px;
+        padding: 0px 10px;
+        box-sizing: border-box;
+        position: absolute;
+        z-index: 11;
+        left: 0px;
+        bottom: 0px;
+        background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 33%, rgba(0, 0, 0, 0) 100%);
+    }
+}
+
+.shop_ul_4 {
+    margin-top: 30px;
+
+    .shop_li_4 {
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 17px;
+        box-sizing: border-box;
+        text-indent: 16px;
+        position: relative;
+    }
+
+    .shop_li_4:hover {
+        color: #a91b33;
+    }
+
+    .shop_li_4::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #ddd;
+        border-radius: 50%;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        z-index: 11;
+    }
+
+    .shop_li_4:nth-of-type(3n-2) {
+        font-weight: bold;
+    }
+
+    .shop_li_4:hover::after {
+        content: '';
+        display: block;
+        background: #a91b33;
+    }
+
+    .shop_li_4:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.shop_head_10 {
+    height: 29px;
+    position: relative;
+
+    .shop_head_10_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #a91b33;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+
+    .shop_head_10_more {
+        height: 29px;
+        line-height: 29px;
+        color: #999;
+        float: right;
+        font-size: 16px;
+    }
+
+    .shop_head_10_more::after {
+        content: '';
+        display: block;
+        left: 0px;
+        top: 0px;
+        position: absolute;
+        width: 100%;
+        height: 100%;
+        z-index: 11;
+    }
+}
+
+.shop_box_5 {
+    width: 170px;
+    float: left;
+}
+
+.shop_box_6 {
+    width: 265px;
+    float: right;
+}
+
+.shop_img_ul_8 {
+    margin-top: 28px;
+
+    .shop_img_li_8 {
+        width: 170px;
+        height: 110px;
+        margin-bottom: 10px;
+        position: relative;
+    }
+
+
+    .shop_img_li_8_img {
+        width: 170px;
+        height: 110px;
+        display: block;
+    }
+
+    .shop_img_li_8_rgba {
+        width: 170px;
+        height: 28px;
+        line-height: 28px;
+        color: #fff;
+        font-size: 14px;
+        box-sizing: border-box;
+        position: absolute;
+        padding: 0px 10px;
+        left: 0px;
+        bottom: 0px;
+        z-index: 11;
+        background: linear-gradient(0deg, rgba(0, 0, 0, 0.5) 6%, rgba(0, 0, 0, 0) 100%);
+    }
+
+    .shop_img_li_8:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+}
+
+.shop_ul_5 {
+    margin-top: 30px;
+
+    .shop_li_5 {
+        height: 48px;
+        margin-bottom: 11px;
+        width: 265px;
+    }
+
+    .shop_li_5:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+
+    .shop_li_5_in {
+        height: 48px;
+        width: 265px;
+        display: table-cell;
+        vertical-align: middle;
+    }
+
+    .shop_li_5_a {
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        box-sizing: border-box;
+        position: relative;
+        width: 265px;
+        box-sizing: border-box;
+        padding-left: 16px;
+    }
+
+    .shop_li_5_a::after {
+        content: '';
+        display: block;
+        width: 6px;
+        height: 6px;
+        background: #ddd;
+        border-radius: 50%;
+        position: absolute;
+        left: 0px;
+        top: 44%;
+        z-index: 11;
+    }
+
+    .shop_li_5_a:hover::after {
+        content: '';
+        display: block;
+        background: #a91b33;
+    }
+
+    .shop_li_5_a:hover {
+        color: #a91b33;
+    }
+}
+
+.banner_2 {
+    margin-top: 29px;
+    height: 90px;
+    overflow: hidden;
+
+    .banner_2_a {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .banner_2_img {
+        display: block;
+        width: 100%;
+    }
+}
+
+@media screen and (min-width:1200px) {
+    /*pc_1440*/
+    @media screen and (max-width:1440px) {
+        /*1200*/
+    }
+
+    .pc_none {
+        display: none;
+    }
+}
+
+@media screen and (max-width:599px) {}
+
+@media screen and (max-width:320px) {}

+ 0 - 0
assets/css/shop/threeLevelPage.less


+ 362 - 0
components/goods/SubMenu1.vue

@@ -0,0 +1,362 @@
+<template>
+    <!-- 地区选择 -->
+    <div class="shop_name_out">
+        <div class="shop_name_box clearfix">
+            <div class="shop_name">地区选择</div>
+            <div class="shop_name_right">
+                <div class="shop_name_in clearfix" ref="shop_name_parent">
+                    <div class=" clearfix" v-show="shop_name_num == 1">
+                        <NuxtLink :to="`/${targetSegment}/${targetSegment1}/list-1.html?cityid=${item.id}`"
+                            :title="item.name" v-for="item in provinceList1"
+                            :class="['shop_name_a', { 'shop_name_a_only': item.id == cityId }]">
+                            {{ item.abbreviation }}
+                        </NuxtLink>
+                    </div>
+                    <div class=" clearfix" v-show="shop_name_num == 2">
+                        <NuxtLink :class="['shop_name_a', { 'shop_name_a_only': item.id == cityId }]"
+                            :to="`/${targetSegment}/${targetSegment1}/list-1.html?cityid=${item.id}`"
+                            :title="item.name" v-for="item in provinceList2">
+                            {{ item.abbreviation }}
+                        </NuxtLink>
+                    </div>
+                    <div class=" clearfix" v-show="shop_name_num == 3">
+                        <NuxtLink :class="['shop_name_a', { 'shop_name_a_only': item.id == cityId }]"
+                            :to="`/${targetSegment}/${targetSegment1}/list-1.html?cityid=${item.id}`"
+                            :title="item.name" v-for="item in provinceList3">
+                            {{ item.abbreviation }}
+                        </NuxtLink>
+                    </div>
+                </div>
+                <div class="shop_name_btn hand"
+                    @click="shop_name_num >= shop_name_leng ? shop_name_num = 1 : shop_name_num++">
+                </div>
+            </div>
+        </div>
+    </div>
+    <!-- 地区选择 -->
+</template>
+
+<script setup>
+import { ref, onMounted, watch } from 'vue'
+
+//1.获得商城导航 start ---------------------------------------->
+//1.1 获得频道导航的id,并且标记导航
+//获得当前的完整路径
+// const fullPath = route.path;
+// //拆分,取出来中间这一段,然后提取数字部分
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+// const segments = fullPath.split('/');
+// const targetSegment = segments[2];
+
+const navId = ref(0)//当前导航标记哪个
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    navId.value = parseInt(getRouteId.data.category_id)
+} else {
+    console.log("错误位置:通过url路径查询导航池id")
+}
+
+//1.2 获得商城导航
+const shopNav = ref("")
+const shopNavOnePinyin = ref("")//获得商城导航的第一个 作为默认的跳转链接
+let getShowNav = async () => {
+    const responseStatus = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            placeid: 0,
+            pid: navId.value,
+            num: 8,
+            type: 1
+        },
+    });
+    console.log("responseStatus", responseStatus);
+
+    shopNav.value = responseStatus.data
+    shopNavOnePinyin.value = responseStatus.data[0].aLIas_pinyin
+    console.log("shopNavOnePinyin", shopNavOnePinyin.value);
+
+}
+getShowNav();
+
+//1.3 标记当前选择的地区
+const route = useRoute();
+//获得详情id
+const cityId = ref(route.query.cityid)
+
+watch(route, () => {
+    cityId.value = route.query.cityid
+})
+
+
+
+//1.获得商城导航 end ---------------------------------------->
+
+//2.获得省列表 start ---------------------------------------->
+const provinceList1 = ref([]);//省列表1
+const provinceList2 = ref([]);//省列表2
+const provinceList3 = ref([]);//省列表3
+onMounted(async () => {
+    //获得所有的省
+    try {
+        const { $webUrl, $CwebUrl } = useNuxtApp();
+        const response = await fetch($webUrl + '/web/selectWebsiteArea', {
+            headers: {
+                'Content-Type': 'application/json',
+                'Userurl': $CwebUrl,
+                'Origin': $CwebUrl
+            }
+        });
+        const result = await response.json();
+        for (let index in result.data) {
+            if (index < 15) {
+                provinceList1.value.push(result.data[index])
+            } else if (index > 14 && index < 30) {
+                provinceList2.value.push(result.data[index])
+            } else if (index > 29) {
+                provinceList3.value.push(result.data[index])
+            }
+        }
+    } catch (error) {
+        console.error('获取行政区划数据失败:', error);
+    }
+
+
+})
+//2.获得商城导航 start ---------------------------------------->
+
+//3.地区滚动 start ---------------------------------------->
+// 地区选择
+const shop_name_num = ref(1)
+const shop_name_parent = ref(null)
+const shop_name_leng = ref(1)
+onMounted(() => {
+    const shop_name_son = shop_name_parent.value.querySelectorAll("div")
+    shop_name_leng.value = shop_name_son.length
+})
+//3.地区滚动 end ---------------------------------------->
+</script>
+
+<style lang="less" scoped>
+.shop_name_out {
+    margin-top: 20px;
+}
+
+.shop_name_box {
+    border-top: solid 1px #fff;
+
+    .shop_name_box_a {
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        font-size: 20px;
+    }
+
+    .shop_name {
+        float: left;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        position: relative;
+        z-index: 11;
+        text-align: center;
+        font-size: 20px;
+        background: #a91b33;
+        padding: 0px 14px;
+    }
+
+    .shop_name_right {
+        height: 40px;
+        border-bottom: 1px solid #E8E9EC;
+        margin-top: 4px;
+        background: #F8F8F8;
+        position: relative;
+        z-index: 2;
+    }
+
+    .shop_name_right::after {
+        content: '';
+        display: block;
+        position: absolute;
+        top: 0px;
+        right: 0px;
+        height: 100%;
+        width: 16px;
+        background: url(@/public/img/9.png) no-repeat 0px bottom #fff;
+        background-size: 100% auto;
+    }
+
+    .shop_name_btn {
+        width: 24px;
+        height: 24px;
+        float: right;
+        margin: 10px 22px 0px 0px;
+        background: url(@/public/img/8.png) no-repeat center center;
+        border-radius: 50%;
+        background-size: 100% 100%;
+    }
+}
+
+.shop_name_in {
+    float: left;
+    height: 40px;
+    width: 1046px;
+    float: left;
+    box-sizing: border-box;
+
+    .shop_name_a {
+        float: left;
+        height: 27px;
+        line-height: 27px;
+        color: #222;
+        font-size: 20px;
+        position: relative;
+        margin: 7px 14.5px 0;
+        padding: 0px 10px;
+    }
+
+    .shop_name_a::after {
+        content: '/';
+        display: block;
+        position: absolute;
+        top: 0px;
+        right: -18px;
+        height: 100%;
+        line-height: 27px;
+        color: #E9E9E9;
+        font-size: 20px;
+    }
+
+    .shop_name_a:nth-last-of-type(1)::after {
+        content: '';
+        display: none;
+    }
+
+    .shop_name_a_only {
+        background: #a91b33;
+        color: #fff;
+    }
+}
+
+.shop_name_out {
+    margin-top: 20px;
+}
+
+.shop_name_box {
+    border-top: solid 1px #fff;
+
+    .shop_name_box_a {
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        font-size: 20px;
+    }
+
+    .shop_name {
+        float: left;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        position: relative;
+        z-index: 11;
+        text-align: center;
+        font-size: 20px;
+        background: #a91b33;
+        padding: 0px 14px;
+    }
+
+    .shop_name_right {
+        height: 40px;
+        border-bottom: 1px solid #E8E9EC;
+        margin-top: 4px;
+        background: #F8F8F8;
+        position: relative;
+        z-index: 2;
+    }
+
+    .shop_name_right::after {
+        content: '';
+        display: block;
+        position: absolute;
+        top: 0px;
+        right: 0px;
+        height: 100%;
+        width: 16px;
+        background: url(@/public/img/9.png) no-repeat 0px bottom #fff;
+        background-size: 100% auto;
+    }
+
+    .shop_name_btn {
+        width: 24px;
+        height: 24px;
+        float: right;
+        margin: 10px 22px 0px 0px;
+        background: url(@/public/img/8.png) no-repeat center center;
+        border-radius: 50%;
+        background-size: 100% 100%;
+    }
+}
+
+.shop_nav {
+    border: solid 1px #E9E9E9;
+    background: #fafafa;
+    margin-top: 20px;
+
+    .shop_nav_head {
+        float: left;
+        height: 28px;
+        width: 138px;
+        margin: 30px 52px 0px 25px;
+    }
+
+    .shop_nav_head_a {
+        display: block;
+        height: 28px;
+        width: 138px;
+        background: url(@/public/img/7.png) no-repeat left top;
+        background-size: 100% 100%;
+    }
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.shop_nav_in_a {
+    float: left;
+    height: 75px;
+    line-height: 75px;
+    color: #333;
+    font-size: 16px;
+    background: #f8f5f5;
+    width: 118px;
+    border-bottom: solid 5px #a91b33;
+    font-weight: bold;
+    margin: 5px 0;
+    text-align: center;
+}
+
+.shop_nav_in_a:nth-of-type(4) {
+    margin-right: 8px;
+}
+
+.shop_nav_in_a:hover {
+    color: #a91b33;
+}
+
+.shop_nav_in_a_active {
+    color: #a91b33;
+}
+</style>

+ 363 - 0
components/goods/SubMenu2.vue

@@ -0,0 +1,363 @@
+<template>
+    <!-- 地区选择 -->
+    <div class="shop_name_out">
+        <div class="shop_name_box clearfix">
+            <div class="shop_name">地区选择</div>
+            <div class="shop_name_right">
+                <div class="shop_name_in clearfix" ref="shop_name_parent">
+                    <div class=" clearfix" v-show="shop_name_num == 1">
+                        <NuxtLink
+                            :to="`/${targetSegment}/${targetSegment1}/${shopNavOnePinyin}/list-1.html?cityid=${item.id}`"
+                            :title="item.name" v-for="item in provinceList1"
+                            :class="['shop_name_a', { 'shop_name_a_only': item.id == cityId }]">
+                            {{ item.abbreviation }}
+                        </NuxtLink>
+                    </div>
+                    <div class=" clearfix" v-show="shop_name_num == 2">
+                        <NuxtLink :class="['shop_name_a', { 'shop_name_a_only': item.id == cityId }]"
+                            :to="`/${targetSegment}/${targetSegment1}/${shopNavOnePinyin}/list-1.html?cityid=${item.id}`"
+                            :title="item.name" v-for="item in provinceList2">
+                            {{ item.abbreviation }}
+                        </NuxtLink>
+                    </div>
+                    <div class=" clearfix" v-show="shop_name_num == 3">
+                        <NuxtLink :class="['shop_name_a', { 'shop_name_a_only': item.id == cityId }]"
+                            :to="`/${targetSegment}/${targetSegment1}/${shopNavOnePinyin}/list-1.html?cityid=${item.id}`"
+                            :title="item.name" v-for="item in provinceList3">
+                            {{ item.abbreviation }}
+                        </NuxtLink>
+                    </div>
+                </div>
+                <div class="shop_name_btn hand"
+                    @click="shop_name_num >= shop_name_leng ? shop_name_num = 1 : shop_name_num++">
+                </div>
+            </div>
+        </div>
+    </div>
+    <!-- 地区选择 -->
+</template>
+
+<script setup>
+import { ref, onMounted, watch } from 'vue'
+
+//1.获得商城导航 start ---------------------------------------->
+//1.1 获得频道导航的id,并且标记导航
+//获得当前的完整路径
+// const fullPath = route.path;
+// //拆分,取出来中间这一段,然后提取数字部分
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+// const segments = fullPath.split('/');
+// const targetSegment = segments[2];
+
+const navId = ref(0)//当前导航标记哪个
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    navId.value = parseInt(getRouteId.data.category_id)
+} else {
+    console.log("错误位置:通过url路径查询导航池id")
+}
+
+//1.2 获得商城导航
+const shopNav = ref("")
+const shopNavOnePinyin = ref("")//获得商城导航的第一个 作为默认的跳转链接
+let getShowNav = async () => {
+    const responseStatus = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            placeid: 0,
+            pid: navId.value,
+            num: 8,
+            type: 1
+        },
+    });
+    console.log("responseStatus", responseStatus);
+
+    shopNav.value = responseStatus.data
+    shopNavOnePinyin.value = responseStatus.data[0].aLIas_pinyin
+    console.log("shopNavOnePinyin", shopNavOnePinyin.value);
+
+}
+getShowNav();
+
+//1.3 标记当前选择的地区
+const route = useRoute();
+//获得详情id
+const cityId = ref(route.query.cityid)
+
+watch(route, () => {
+    cityId.value = route.query.cityid
+})
+
+
+
+//1.获得商城导航 end ---------------------------------------->
+
+//2.获得省列表 start ---------------------------------------->
+const provinceList1 = ref([]);//省列表1
+const provinceList2 = ref([]);//省列表2
+const provinceList3 = ref([]);//省列表3
+onMounted(async () => {
+    //获得所有的省
+    try {
+        const { $webUrl, $CwebUrl } = useNuxtApp();
+        const response = await fetch($webUrl + '/web/selectWebsiteArea', {
+            headers: {
+                'Content-Type': 'application/json',
+                'Userurl': $CwebUrl,
+                'Origin': $CwebUrl
+            }
+        });
+        const result = await response.json();
+        for (let index in result.data) {
+            if (index < 15) {
+                provinceList1.value.push(result.data[index])
+            } else if (index > 14 && index < 30) {
+                provinceList2.value.push(result.data[index])
+            } else if (index > 29) {
+                provinceList3.value.push(result.data[index])
+            }
+        }
+    } catch (error) {
+        console.error('获取行政区划数据失败:', error);
+    }
+
+
+})
+//2.获得商城导航 start ---------------------------------------->
+
+//3.地区滚动 start ---------------------------------------->
+// 地区选择
+const shop_name_num = ref(1)
+const shop_name_parent = ref(null)
+const shop_name_leng = ref(1)
+onMounted(() => {
+    const shop_name_son = shop_name_parent.value.querySelectorAll("div")
+    shop_name_leng.value = shop_name_son.length
+})
+//3.地区滚动 end ---------------------------------------->
+</script>
+
+<style lang="less" scoped>
+.shop_name_out {
+    margin-top: 20px;
+}
+
+.shop_name_box {
+    border-top: solid 1px #fff;
+
+    .shop_name_box_a {
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        font-size: 20px;
+    }
+
+    .shop_name {
+        float: left;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        position: relative;
+        z-index: 11;
+        text-align: center;
+        font-size: 20px;
+        background: #a91b33;
+        padding: 0px 14px;
+    }
+
+    .shop_name_right {
+        height: 40px;
+        border-bottom: 1px solid #E8E9EC;
+        margin-top: 4px;
+        background: #F8F8F8;
+        position: relative;
+        z-index: 2;
+    }
+
+    .shop_name_right::after {
+        content: '';
+        display: block;
+        position: absolute;
+        top: 0px;
+        right: 0px;
+        height: 100%;
+        width: 16px;
+        background: url(@/public/img/9.png) no-repeat 0px bottom #fff;
+        background-size: 100% auto;
+    }
+
+    .shop_name_btn {
+        width: 24px;
+        height: 24px;
+        float: right;
+        margin: 10px 22px 0px 0px;
+        background: url(@/public/img/8.png) no-repeat center center;
+        border-radius: 50%;
+        background-size: 100% 100%;
+    }
+}
+
+.shop_name_in {
+    float: left;
+    height: 40px;
+    width: 1046px;
+    float: left;
+    box-sizing: border-box;
+
+    .shop_name_a {
+        float: left;
+        height: 27px;
+        line-height: 27px;
+        color: #222;
+        font-size: 20px;
+        position: relative;
+        margin: 7px 14.5px 0;
+        padding: 0px 10px;
+    }
+
+    .shop_name_a::after {
+        content: '/';
+        display: block;
+        position: absolute;
+        top: 0px;
+        right: -18px;
+        height: 100%;
+        line-height: 27px;
+        color: #E9E9E9;
+        font-size: 20px;
+    }
+
+    .shop_name_a:nth-last-of-type(1)::after {
+        content: '';
+        display: none;
+    }
+
+    .shop_name_a_only {
+        background: #a91b33;
+        color: #fff;
+    }
+}
+
+.shop_name_out {
+    margin-top: 20px;
+}
+
+.shop_name_box {
+    border-top: solid 1px #fff;
+
+    .shop_name_box_a {
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        font-size: 20px;
+    }
+
+    .shop_name {
+        float: left;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        position: relative;
+        z-index: 11;
+        text-align: center;
+        font-size: 20px;
+        background: #a91b33;
+        padding: 0px 14px;
+    }
+
+    .shop_name_right {
+        height: 40px;
+        border-bottom: 1px solid #E8E9EC;
+        margin-top: 4px;
+        background: #F8F8F8;
+        position: relative;
+        z-index: 2;
+    }
+
+    .shop_name_right::after {
+        content: '';
+        display: block;
+        position: absolute;
+        top: 0px;
+        right: 0px;
+        height: 100%;
+        width: 16px;
+        background: url(@/public/img/9.png) no-repeat 0px bottom #fff;
+        background-size: 100% auto;
+    }
+
+    .shop_name_btn {
+        width: 24px;
+        height: 24px;
+        float: right;
+        margin: 10px 22px 0px 0px;
+        background: url(@/public/img/8.png) no-repeat center center;
+        border-radius: 50%;
+        background-size: 100% 100%;
+    }
+}
+
+.shop_nav {
+    border: solid 1px #E9E9E9;
+    background: #fafafa;
+    margin-top: 20px;
+
+    .shop_nav_head {
+        float: left;
+        height: 28px;
+        width: 138px;
+        margin: 30px 52px 0px 25px;
+    }
+
+    .shop_nav_head_a {
+        display: block;
+        height: 28px;
+        width: 138px;
+        background: url(@/public/img/7.png) no-repeat left top;
+        background-size: 100% 100%;
+    }
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.shop_nav_in_a {
+    float: left;
+    height: 75px;
+    line-height: 75px;
+    color: #333;
+    font-size: 16px;
+    background: #f8f5f5;
+    width: 118px;
+    border-bottom: solid 5px #a91b33;
+    font-weight: bold;
+    margin: 5px 0;
+    text-align: center;
+}
+
+.shop_nav_in_a:nth-of-type(4) {
+    margin-right: 8px;
+}
+
+.shop_nav_in_a:hover {
+    color: #a91b33;
+}
+
+.shop_nav_in_a_active {
+    color: #a91b33;
+}
+</style>

+ 364 - 0
components/goods/SubMenu3.vue

@@ -0,0 +1,364 @@
+<template>
+    <!-- 地区选择 -->
+    <div class="shop_name_out">
+        <div class="shop_name_box clearfix">
+            <div class="shop_name">地区选择</div>
+            <div class="shop_name_right">
+                <div class="shop_name_in clearfix" ref="shop_name_parent">
+                    <div class=" clearfix" v-show="shop_name_num == 1">
+                        <NuxtLink
+                            :to="`/${targetSegment}/${targetSegment1}/${targetSegment2}/list-1.html?cityid=${item.id}`"
+                            :title="item.name" v-for="item in provinceList1"
+                            :class="['shop_name_a', { 'shop_name_a_only': item.id == cityId }]">
+                            {{ item.abbreviation }}
+                        </NuxtLink>
+                    </div>
+                    <div class=" clearfix" v-show="shop_name_num == 2">
+                        <NuxtLink :class="['shop_name_a', { 'shop_name_a_only': item.id == cityId }]"
+                            :to="`/${targetSegment}/${targetSegment1}/${targetSegment2}/list-1.html?cityid=${item.id}`"
+                            :title="item.name" v-for="item in provinceList2">
+                            {{ item.abbreviation }}
+                        </NuxtLink>
+                    </div>
+                    <div class=" clearfix" v-show="shop_name_num == 3">
+                        <NuxtLink :class="['shop_name_a', { 'shop_name_a_only': item.id == cityId }]"
+                            :to="`/${targetSegment}/${targetSegment1}/${targetSegment2}/list-1.html?cityid=${item.id}`"
+                            :title="item.name" v-for="item in provinceList3">
+                            {{ item.abbreviation }}
+                        </NuxtLink>
+                    </div>
+                </div>
+                <div class="shop_name_btn hand"
+                    @click="shop_name_num >= shop_name_leng ? shop_name_num = 1 : shop_name_num++">
+                </div>
+            </div>
+        </div>
+    </div>
+    <!-- 地区选择 -->
+</template>
+
+<script setup>
+import { ref, onMounted, watch } from 'vue'
+
+//1.获得商城导航 start ---------------------------------------->
+//1.1 获得频道导航的id,并且标记导航
+//获得当前的完整路径
+// const fullPath = route.path;
+// //拆分,取出来中间这一段,然后提取数字部分
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+const targetSegment2 = getRoutePath(3);
+// const segments = fullPath.split('/');
+// const targetSegment = segments[2];
+
+const navId = ref(0)//当前导航标记哪个
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    navId.value = parseInt(getRouteId.data.category_id)
+} else {
+    console.log("错误位置:通过url路径查询导航池id")
+}
+
+//1.2 获得商城导航
+const shopNav = ref("")
+const shopNavOnePinyin = ref("")//获得商城导航的第一个 作为默认的跳转链接
+let getShowNav = async () => {
+    const responseStatus = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            placeid: 0,
+            pid: navId.value,
+            num: 8,
+            type: 1
+        },
+    });
+    console.log("responseStatus", responseStatus);
+
+    shopNav.value = responseStatus.data
+    shopNavOnePinyin.value = responseStatus.data[0].aLIas_pinyin
+    console.log("shopNavOnePinyin", shopNavOnePinyin.value);
+
+}
+getShowNav();
+
+//1.3 标记当前选择的地区
+const route = useRoute();
+//获得详情id
+const cityId = ref(route.query.cityid)
+
+watch(route, () => {
+    cityId.value = route.query.cityid
+})
+
+
+
+//1.获得商城导航 end ---------------------------------------->
+
+//2.获得省列表 start ---------------------------------------->
+const provinceList1 = ref([]);//省列表1
+const provinceList2 = ref([]);//省列表2
+const provinceList3 = ref([]);//省列表3
+onMounted(async () => {
+    //获得所有的省
+    try {
+        const { $webUrl, $CwebUrl } = useNuxtApp();
+        const response = await fetch($webUrl + '/web/selectWebsiteArea', {
+            headers: {
+                'Content-Type': 'application/json',
+                'Userurl': $CwebUrl,
+                'Origin': $CwebUrl
+            }
+        });
+        const result = await response.json();
+        for (let index in result.data) {
+            if (index < 15) {
+                provinceList1.value.push(result.data[index])
+            } else if (index > 14 && index < 30) {
+                provinceList2.value.push(result.data[index])
+            } else if (index > 29) {
+                provinceList3.value.push(result.data[index])
+            }
+        }
+    } catch (error) {
+        console.error('获取行政区划数据失败:', error);
+    }
+
+
+})
+//2.获得商城导航 start ---------------------------------------->
+
+//3.地区滚动 start ---------------------------------------->
+// 地区选择
+const shop_name_num = ref(1)
+const shop_name_parent = ref(null)
+const shop_name_leng = ref(1)
+onMounted(() => {
+    const shop_name_son = shop_name_parent.value.querySelectorAll("div")
+    shop_name_leng.value = shop_name_son.length
+})
+//3.地区滚动 end ---------------------------------------->
+</script>
+
+<style lang="less" scoped>
+.shop_name_out {
+    margin-top: 20px;
+}
+
+.shop_name_box {
+    border-top: solid 1px #fff;
+
+    .shop_name_box_a {
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        font-size: 20px;
+    }
+
+    .shop_name {
+        float: left;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        position: relative;
+        z-index: 11;
+        text-align: center;
+        font-size: 20px;
+        background: #a91b33;
+        padding: 0px 14px;
+    }
+
+    .shop_name_right {
+        height: 40px;
+        border-bottom: 1px solid #E8E9EC;
+        margin-top: 4px;
+        background: #F8F8F8;
+        position: relative;
+        z-index: 2;
+    }
+
+    .shop_name_right::after {
+        content: '';
+        display: block;
+        position: absolute;
+        top: 0px;
+        right: 0px;
+        height: 100%;
+        width: 16px;
+        background: url(@/public/img/9.png) no-repeat 0px bottom #fff;
+        background-size: 100% auto;
+    }
+
+    .shop_name_btn {
+        width: 24px;
+        height: 24px;
+        float: right;
+        margin: 10px 22px 0px 0px;
+        background: url(@/public/img/8.png) no-repeat center center;
+        border-radius: 50%;
+        background-size: 100% 100%;
+    }
+}
+
+.shop_name_in {
+    float: left;
+    height: 40px;
+    width: 1046px;
+    float: left;
+    box-sizing: border-box;
+
+    .shop_name_a {
+        float: left;
+        height: 27px;
+        line-height: 27px;
+        color: #222;
+        font-size: 20px;
+        position: relative;
+        margin: 7px 14.5px 0;
+        padding: 0px 10px;
+    }
+
+    .shop_name_a::after {
+        content: '/';
+        display: block;
+        position: absolute;
+        top: 0px;
+        right: -18px;
+        height: 100%;
+        line-height: 27px;
+        color: #E9E9E9;
+        font-size: 20px;
+    }
+
+    .shop_name_a:nth-last-of-type(1)::after {
+        content: '';
+        display: none;
+    }
+
+    .shop_name_a_only {
+        background: #a91b33;
+        color: #fff;
+    }
+}
+
+.shop_name_out {
+    margin-top: 20px;
+}
+
+.shop_name_box {
+    border-top: solid 1px #fff;
+
+    .shop_name_box_a {
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        font-size: 20px;
+    }
+
+    .shop_name {
+        float: left;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        position: relative;
+        z-index: 11;
+        text-align: center;
+        font-size: 20px;
+        background: #a91b33;
+        padding: 0px 14px;
+    }
+
+    .shop_name_right {
+        height: 40px;
+        border-bottom: 1px solid #E8E9EC;
+        margin-top: 4px;
+        background: #F8F8F8;
+        position: relative;
+        z-index: 2;
+    }
+
+    .shop_name_right::after {
+        content: '';
+        display: block;
+        position: absolute;
+        top: 0px;
+        right: 0px;
+        height: 100%;
+        width: 16px;
+        background: url(@/public/img/9.png) no-repeat 0px bottom #fff;
+        background-size: 100% auto;
+    }
+
+    .shop_name_btn {
+        width: 24px;
+        height: 24px;
+        float: right;
+        margin: 10px 22px 0px 0px;
+        background: url(@/public/img/8.png) no-repeat center center;
+        border-radius: 50%;
+        background-size: 100% 100%;
+    }
+}
+
+.shop_nav {
+    border: solid 1px #E9E9E9;
+    background: #fafafa;
+    margin-top: 20px;
+
+    .shop_nav_head {
+        float: left;
+        height: 28px;
+        width: 138px;
+        margin: 30px 52px 0px 25px;
+    }
+
+    .shop_nav_head_a {
+        display: block;
+        height: 28px;
+        width: 138px;
+        background: url(@/public/img/7.png) no-repeat left top;
+        background-size: 100% 100%;
+    }
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.shop_nav_in_a {
+    float: left;
+    height: 75px;
+    line-height: 75px;
+    color: #333;
+    font-size: 16px;
+    background: #f8f5f5;
+    width: 118px;
+    border-bottom: solid 5px #a91b33;
+    font-weight: bold;
+    margin: 5px 0;
+    text-align: center;
+}
+
+.shop_nav_in_a:nth-of-type(4) {
+    margin-right: 8px;
+}
+
+.shop_nav_in_a:hover {
+    color: #a91b33;
+}
+
+.shop_nav_in_a_active {
+    color: #a91b33;
+}
+</style>

+ 392 - 0
components/goods/class.vue

@@ -0,0 +1,392 @@
+<template>
+    <HomePageHead></HomePageHead>
+    <HomePageNavigation></HomePageNavigation>
+    <!-- 三农市场网-商城 -->
+    <main class="index_main">
+        <HomeAdvertising :imgurl="adImg1"></HomeAdvertising>
+        <!-- 导航 -->
+        <section class="shop_nav">
+            <div class="shop_nav_1 clearfix">
+                <span class="shop_nav_1_a" title="">{{ categoryName }}</span>
+            </div>
+            <div class="shop_nav_2">
+                <a class="shop_nav_2_a" :href=" getLinkPath(item)" title="" v-for="(item, index) in pageData"
+                    :key="index">{{ item.alias }}</a>
+            </div>
+        </section>
+        <!-- 地区选择 -->
+        <GoodsSubMenu></GoodsSubMenu>
+        <section class="shop_3 clearfix">
+            <!-- 农产批发1 -->
+            <div class="shop_3_in clearfix">
+                <div class="shop_head_2 clearfix">
+                    <div class="shop_head_2_name">{{ goodsData[0].alias }}</div>
+                    <a class="shop_head_2_more" :href="getLinkPath(goodsData[0])" :title="goodsData[0].title">栏目简介</a>
+                </div>
+                <div class="shop_img_ul_1 clearfix">
+                    <div class="shop_img_li_1 clearfix" v-for="(item, index) in goodsData[0].data" :key="index">
+                        <a class="shop_img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <div class="shop_img_li_1_img_box clearfix">
+                                <img class="shop_img_li_1_img" :src="item.imgurl" :title="item.title" alt="">
+                            </div>
+                            <div class="shop_img_li_1_right clearfix">
+                                <h4 class="shop_img_li_1_h4 dot2">{{ item.name }}</h4>
+                                <div class="shop_img_li_1_tag">
+                                    {{ item.type_id == 1 ? '求购' : '供应' }}
+                                </div>
+                                <div class="shop_img_li_1_btn">查看详情</div>
+                            </div>
+                        </a>
+                    </div>
+                </div>
+            </div>
+            <!-- 农产批发2 -->
+            <!-- 集贸市场1 -->
+            <div class="shop_3_in clearfix">
+                <div class="shop_head_3 clearfix">
+                    <div class="shop_head_3_name">{{ goodsData[1].alias }}</div>
+                    <a class="shop_head_3_more" :href="getLinkPath(goodsData[1])" :title="goodsData[1].title">栏目简介</a>
+                </div>
+                <div class="shop_ul_1 clearfix" v-if="goodsData.length > 1">
+                    <div class="shop_li_1 clearfix" v-for="(item, index) in goodsData[1].data" :key="index">
+                        <a class="shop_li_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <div class="shop_li_1_left">
+                                <h4 class="shop_li_1_h4 dot1">
+                                    {{ item.name }}
+                                </h4>
+                                <div class="shop_li_1_text dot1">
+                                    {{ item.description }}
+                                </div>
+                            </div>
+                            <div class="shop_li_1_btn">查看详情</div>
+                        </a>
+                    </div>
+                </div>
+            </div>
+            <!-- 集贸市场2 -->
+        </section>
+        <section class="shop_4 clearfix">
+            <!-- 名品之窗1 -->
+            <div class="shop_3_in clearfix" v-if="goodsData.length > 2">
+                <div class="shop_head_4 clearfix">
+                    <div class="shop_head_4_name">{{ goodsData[2].alias }}</div>
+                    <a class="shop_head_4_more" :href="getLinkPath(goodsData[2])" :title="goodsData[2].title">栏目简介</a>
+                </div>
+                <div class="shop_img_ul_2 clearfix">
+                    <div class="shop_img_li_2 clearfix" v-for="(item, index) in goodsData[2].data" :key="index">
+                        <a class="shop_img_li_2_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <div class="shop_img_li_2_img_box clearfix">
+                                <img class="shop_img_li_2_img" :src="item.imgurl" title="" alt="">
+                            </div>
+                            <div class="shop_img_li_2_right clearfix">
+                                <h4 class="shop_img_li_2_h4 dot2">{{ item.name }}</h4>
+                                <div class="shop_img_li_2_tag">
+                                    {{ item.type_id == 1 ? '求购' : '供应' }}
+                                </div>
+                                <div class="shop_img_li_2_btn">查看详情</div>
+                            </div>
+                        </a>
+                    </div>
+                </div>
+            </div>
+            <!-- 名品之窗2 -->
+            <!-- 供求信息1 -->
+            <div class="shop_3_in clearfix" v-if="goodsData.length > 3">
+                <div class="shop_head_5 clearfix">
+                    <div class="shop_head_5_name">{{ goodsData[3].alias }}</div>
+                    <a class="shop_head_5_more" :href="getLinkPath(goodsData[3])" :title="goodsData[3].title">栏目简介</a>
+                </div>
+                <div class="shop_img_ul_3 clearfix">
+                    <div class="shop_img_li_3 clearfix" v-for="(item, index) in goodsData[3].data" :key="index">
+                        <a class="shop_img_li_3_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <div class="shop_img_li_3_img_box clearfix">
+                                <img class="shop_img_li_3_img" :src="item.imgurl" :title="item.title" alt="">
+                            </div>
+                            <div class="shop_img_li_3_right clearfix">
+                                <h4 class="shop_img_li_3_h4 dot2">{{ item.name }}</h4>
+                                <div class="shop_img_li_3_tag">
+                                    {{ item.type_id == 1 ? '求购' : '供应' }}
+                                </div>
+                                <div class="shop_img_li_3_btn">查看详情</div>
+                            </div>
+                        </a>
+                    </div>
+                </div>
+            </div>
+            <!-- 供求信息2 -->
+        </section>
+        <section class="shop_5 clearfix">
+            <!-- 名品之窗1 -->
+            <div class="shop_3_in clearfix"  v-if="goodsData.length > 4">
+                <div class="shop_head_4 clearfix">
+                    <div class="shop_head_4_name">{{ goodsData[4].alias }}</div>
+                    <a class="shop_head_4_more" :href="getLinkPath(goodsData[4])" :title="goodsData[4].title">栏目简介</a>
+                </div>
+                <div class="shop_img_ul_2 clearfix" >
+                    <div class="shop_img_li_2 clearfix" v-for="(item, index) in goodsData[4].data" :key="index">
+                        <a class="shop_img_li_2_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <div class="shop_img_li_2_img_box clearfix">
+                                <img class="shop_img_li_2_img" :src="item.imgurl" :title="item.title" alt="">
+                            </div>
+                            <div class="shop_img_li_2_right clearfix">
+                                <h4 class="shop_img_li_2_h4 dot2">{{ item.name }}</h4>
+                                <div class="shop_img_li_2_tag">
+                                    {{ item.type_id == 1 ? '求购' : '供应' }}
+                                </div>
+                                <div class="shop_img_li_2_btn">查看详情</div>
+                            </div>
+                        </a>
+                    </div>
+                </div>
+            </div>
+            <!-- 名品之窗2 -->
+            <!-- 供求信息1 -->
+            <div class="shop_3_in clearfix"  v-if="goodsData.length > 5">
+                <div class="shop_head_5 clearfix">
+                    <div class="shop_head_5_name">{{ goodsData[5].alias }}</div>
+                    <a class="shop_head_5_more" :href="getLinkPath(goodsData[5])" :title="goodsData[5].title">栏目简介</a>
+                </div>
+                <div class="shop_img_ul_3 clearfix">
+                    <div class="shop_img_li_3 clearfix" v-for="(item, index) in goodsData[5].data" :key="index">
+                        <a class="shop_img_li_3_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <div class="shop_img_li_3_img_box clearfix">
+                                <img class="shop_img_li_3_img" :src="item.imgurl" :title="item.title" alt="">
+                            </div>
+                            <div class="shop_img_li_3_right clearfix">
+                                <h4 class="shop_img_li_3_h4 dot2">{{ item.name }}</h4>
+                                <div class="shop_img_li_3_tag">
+                                    {{ item.type_id == 1 ? '求购' : '供应' }}
+                                </div>
+                                <div class="shop_img_li_3_btn">查看详情</div>
+                            </div>
+                        </a>
+                    </div>
+                </div>
+            </div>
+            <!-- 供求信息2 -->
+        </section>
+        <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
+    </main>
+    <HomeFoot1></HomeFoot1>
+</template>
+<script setup>
+import { ref } from 'vue'
+import { ElRadio, ElRadioGroup, ElMessage } from 'element-plus'
+//1.获得路由id start ---------------------------------------->
+const targetSegment = getRoutePath(1);
+//1.1 获得当前的路由id
+let routeId;
+let categoryName;
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+if (getRouteId.code == 200) {
+    routeId = getRouteId.data.category_id
+    categoryName = getRouteId.data.alias
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.获得路由id end ---------------------------------------->
+
+//3.广告 start ---------------------------------------->
+let adImg1 = ref({})
+let adImg2 = ref({})
+onMounted(async () => { 
+    //从客户端获取行政职能部门 加快打开速度
+    const { $webUrl, $CwebUrl } = useNuxtApp();
+    //广告1
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_category_0001`
+    const responseAd1 = await fetch(url, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd1 = await responseAd1.json();
+    adImg1.value = resultAd1.data[0];
+
+    //广告2
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_category_0002`
+    const responseAd2 = await fetch(url2, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd2 = await responseAd2.json();
+    adImg2.value = resultAd2.data[0];
+
+})
+//3.广告 end ---------------------------------------->
+
+//4.页面数据 start ---------------------------------------->
+const pageData = ref([
+    //示例:
+    // {
+    //     id: 1, 
+    //     title: "", //该导航的标题
+    //     data: [], //数据1
+    //     data1: [], //数据2
+    //     data2: [], //数据3
+    //     data3: [], //数据4
+    //     data4: [], //数据5
+    //     category_id1: "",  //子导航id1
+    //     category_id2: "", 
+    //     category_id3: "",
+    //     category_id4: "",
+    //     title1: "", //子导航标题1
+    //     title2: "",
+    //     title3: "",
+    //     title4: "",
+    //     cid: "" //该导航的id
+    // },
+])
+const goodsData = ref([])
+const newsData = ref([])
+
+
+//4.1 获取所有导航
+try {
+    const navigateData = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            'placeid': 1,
+            'pid': routeId,
+            'num': 20,
+            'type': 1
+        },
+    });
+    console.log("导航池11111", navigateData);
+
+    if (navigateData.code == 200) {
+        // 遍历可用的导航池放到页面中
+        for (let index in navigateData.data) {
+            let data = {
+                title: navigateData.data[index].name,
+                cid: navigateData.data[index].category_id,
+                children_count: navigateData.data[index].children_count,
+                alias: navigateData.data[index].alias,
+                aLIas_pinyin: targetSegment + "/" + navigateData.data[index].aLIas_pinyin,
+                children: navigateData.data[index].children,
+                type: navigateData.data[index].type,
+                data: [],
+                data1: [],
+                data2: [],
+                data3: [],
+                data4: [],
+                category_id1: "",
+                category_id2: "",
+                category_id3: "",
+                category_id4: "",
+                title1: "",
+                title2: "",
+                title3: "",
+                title4: ""
+            };
+            if (navigateData.data[index].is_url == 1) {
+                // 处理 URL 的逻辑
+            } else {
+                if (navigateData.data[index].type == 2) {
+                    goodsData.value.push(data);
+                } else if (navigateData.data[index].type == 1) {
+                    newsData.value.push(data);
+                }
+                //每个页面最多8个模块
+                pageData.value.push(data);
+            }
+        }
+        console.log("导航池111111pageData", pageData.value);
+        console.log("导航池111111goodsData", goodsData.value);
+        console.log("导航池111111newsData", newsData.value);
+
+        //导航池加载完毕,开始申请模块数据
+        let goodsJson = [
+            // { "catid": goodsData.value[0].cid + ",0,12" },//模块1
+            // { "catid": goodsData.value[1].cid + ",0,4" },//模块2
+            // { "catid": goodsData.value[2].cid + ",0,4" },//模块3
+        ]
+        for (let i = 0; i < goodsData.value.length; i++) {
+            if (i == 0) {
+                goodsJson.push({ "catid": goodsData.value[0].cid + ",0,3" });
+            } else if (i == 1) {
+                goodsJson.push({ "catid": goodsData.value[1].cid + ",0,6" });
+            } else if (i == 2) {
+                goodsJson.push({ "catid": goodsData.value[2].cid + ",0,3" });
+            } else if (i == 3) {
+                goodsJson.push({ "catid": goodsData.value[3].cid + ",0,3" });
+            } else if (i == 4) {
+                goodsJson.push({ "catid": goodsData.value[4].cid + ",0,3" });
+            } else if (i == 5) {
+                goodsJson.push({ "catid": goodsData.value[5].cid + ",0,3" });
+            }
+        }
+        let goodsJsonString = JSON.stringify(goodsJson);
+        getPageGoodsAllData(goodsJsonString);
+
+    } else {
+        console.log("错误:渲染8个模块环节出错,请检查是否存在没有数据的模块!")
+    }
+} catch (error) {
+    console.log("错误:导航池渲染执行接口出错!请检查频道页渲染的模块数据是否完整!")
+}
+// 获取商品数据 start--------------------------------------->
+async function getPageGoodsAllData(goodsJsonString) {
+    const mkdata = await requestDataPromise('/web/getWebsiteCatidshop', {
+        method: 'GET',
+        query: {
+            'catid': goodsJsonString
+        },
+    });
+    console.log("获取商品数据", mkdata);
+
+    if (mkdata.code == 200) {
+        goodsData.value[0].data = mkdata.data[0];//模块1
+        goodsData.value[1].data = mkdata.data[1];//模块2
+        goodsData.value[2].data = mkdata.data[2];//模块3
+        goodsData.value[3].data = mkdata.data[3];//模块4
+        goodsData.value[4].data = mkdata.data[4];//模块5
+        goodsData.value[5].data = mkdata.data[5];//模块6
+    }
+}
+// 获取商品数据 end----------------------------------------->
+
+//4.页面数据 end ---------------------------------------->
+
+//5.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': routeId
+    },
+});
+
+if (setData.code == 200) {
+    let seoTitle = setData.data.seo_title;
+    let seoDescription = setData.data.seo_description;
+    let seoKeywords = setData.data.seo_keywords;
+    let seoSuffix = setData.data.suffix;
+    let seoName = setData.data.website_name;
+
+    useSeoMeta({
+        title: seoTitle + "_" + seoSuffix,
+        meta: [
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("设置频道页SEO出错!", setData.message)
+}
+//5.设置seo信息 end---------------------------------------->
+
+
+</script>
+<style lang="less" scoped>
+@import url("@/assets/css/shop/shopClass.less");
+</style>

+ 576 - 0
components/goods/detail.vue

@@ -0,0 +1,576 @@
+<template>
+    <!-- goods -->
+    <div class="goods">
+        <HomePageHead></HomePageHead>
+        <HomePageNavigation></HomePageNavigation>
+        <HomeAdvertising :imgurl="adImg1"></HomeAdvertising>
+        <main class="index_main" v-if="shopType == 1">
+            <section class="index_1 clearfix">
+                <div class="breadcrumb">
+                    <div class="inner">
+                        <span class="location">当前位置 :</span>
+                        <el-breadcrumb :separator-icon="ArrowRight">
+                            <el-breadcrumb-item>
+                                <NuxtLink to="/">首页</NuxtLink>
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item v-if="p_parent_name != ''">
+                                <NuxtLink :to="`/${targetSegment}/index.html`"> {{ p_parent_name }}</NuxtLink>
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item v-if="parent_name != ''">
+                                <NuxtLink :to="`/${targetSegment}/${targetSegment1}/index.html`"> {{ parent_name }}
+                                </NuxtLink>
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item>
+                                {{ routeNewsTtitle }}
+                            </el-breadcrumb-item>
+                        </el-breadcrumb>
+                    </div>
+                </div>
+            </section>
+            <section class="index_2 clearfix">
+                <img class="index_2_img" :src="shopImg" :title="newsDetail.name" alt="">
+                <div class="index_2_left">
+                    <h4 class="index_2_h4 dot1">{{ newsDetail.name }}</h4>
+                    <div class="index_2_title_box clearfix">
+                        <time class="index_2_title"> 更新日期:{{ newsDetail.updated_at }}</time>
+                        <span class="index_2_title">浏览次数:{{ newsDetail.hits }}</span>
+                    </div>
+                    <div class="index_2_ul clearfix">
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">公 司 名</label>
+                            <span class="index_2_li_text "> {{ newsDetail.com }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">所 在 地</label>
+                            <span class="index_2_li_text ">{{ newsDetail.address }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">联 系 人</label>
+                            <span class="index_2_li_text ">{{ newsDetail.contact }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">产品单价</label>
+
+                            <span class="index_2_li_text">
+                                {{ newsDetail.price }}
+                                元/
+                                {{ newsDetail.unit }}
+                            </span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">最小定量</label>
+                            <span class="index_2_li_text ">{{ newsDetail.min }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">供货总量</label>
+                            <span class="index_2_li_text ">{{ newsDetail.max }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">有 效 期</label>
+                            <span class="index_2_li_text ">{{ getTime(newsDetail.validity, 'year', 1) }}</span>
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 选项卡1 -->
+            <section class="index_3 clearfix">
+                <div class="shop_head_1 clearfix">
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: supply_num == 1 }"
+                        @mouseover="supply_num = 1">详情信息</div>
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: supply_num == 2 }"
+                        @mouseover="supply_num = 2">联系方式</div>
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: supply_num == 3 }"
+                        @mouseover="supply_num = 3">图片展示</div>
+                </div>
+                <div class="card_out clearfix">
+                    <div class="card_1_box clearfix card_1_box_only" v-if="supply_num == 1" v-html="newsDetail.detail">
+                    </div>
+                    <div class="card_1_box clearfix card_1_box_only" v-if="supply_num == 2">
+                        <p class="supply_art_box_p">公司名称:{{ newsDetail.com }}</p>
+                        <p class="supply_art_box_p">电子邮箱:{{ newsDetail.email }}</p>
+                        <p class="supply_art_box_p">邮政编码:{{ newsDetail.postal }}</p>
+                        <p class="supply_art_box_p">联系地址:{{ newsDetail.address }}</p>
+                    </div>
+                    <div class="card_1_box clearfix card_1_box_only" v-if="supply_num == 3">
+                        <div class="supply_art_box_img">
+                            <img :src="item" v-for="item in newsDetail.imgurl">
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 选项卡2 -->
+            <section class="index_4 clearfix">
+                <div class="box_1 clearfix">
+                    <div class="box_1_head">
+                        <div class="box_1_head_name">点击排行</div>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in pageData1" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.title" alt="">
+                                </div>
+                                <div class="img_li_1_dot2">{{ item.name }}
+                                </div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="box_1 clearfix">
+                    <div class="box_1_head">
+                        <div class="box_1_head_name">最新商机</div>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in pageData2" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.title" alt="">
+                                </div>
+                                <div class="img_li_1_dot2">{{ item.name }}
+                                </div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </section>
+        </main>
+
+        <main class="index_main" v-if="shopType == 2">
+            <section class=" clearfix">
+                <div class="index_out_1_left clearfix">
+                    <section class="index_1 clearfix">
+                        <div class="breadcrumb">
+                            <div class="inner">
+                                <span class="location">当前位置 :</span>
+                                <el-breadcrumb :separator-icon="ArrowRight">
+                                    <el-breadcrumb-item>
+                                        <NuxtLink to="/">首页</NuxtLink>
+                                    </el-breadcrumb-item>
+                                    <el-breadcrumb-item v-if="p_parent_name != ''">
+                                        <NuxtLink :to="`/${targetSegment}/index.html`"> {{ p_parent_name }}</NuxtLink>
+                                    </el-breadcrumb-item>
+                                    <el-breadcrumb-item v-if="parent_name != ''">
+                                        <NuxtLink :to="`/${targetSegment}/${targetSegment1}/index.html`">
+                                            {{ parent_name }}
+                                        </NuxtLink>
+                                    </el-breadcrumb-item>
+                                    <el-breadcrumb-item>
+                                        {{ routeNewsTtitle }}
+                                    </el-breadcrumb-item>
+                                </el-breadcrumb>
+                            </div>
+                        </div>
+                    </section>
+                    <section class="index_2 clearfix">
+                        <img class="index_2_img" :src="shopImg" :title="newsDetail.name" alt="">
+                        <div class="index_2_right">
+                            <h4 class="index_2_h4 dot1">求购:{{ newsDetail.name }}</h4>
+                            <div class="index_2_ul clearfix">
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">发布日期</label>
+                                    <span class="index_2_li_text">{{ getTime(newsDetail.updated_at, 'year', 1) }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">截止日期</label>
+                                    <span class="index_2_li_text">{{ getTime(newsDetail.validity, 'year', 1) }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">浏览次数</label>
+                                    <span class="index_2_li_text">{{ newsDetail.hits }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">联 系 人</label>
+                                    <span class="index_2_li_text">{{ newsDetail.contact }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">发布地区</label>
+                                    <span class="index_2_li_text">{{ newsDetail.address }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">座 机</label>
+                                    <span class="index_2_li_text">{{ newsDetail.landline }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">联系电话</label>
+                                    <span class="index_2_li_text">{{ newsDetail.phone }}</span>
+                                </div>
+                            </div>
+                        </div>
+                    </section>
+                </div>
+                <div class="shop_3_right clearfix">
+                    <div class="choice_1_box clearfix">
+                        <div class="choice_1_btn_box clearfix">
+                            <div class="choice_1_btn" :class="{ choice_1_btn_only: supply_buy == 1 }"
+                                @mouseover="supply_buy = 1">
+                                <span class="choice_1_btn_a" title="供应商品">供应商品</span>
+                            </div>
+                            <div class="choice_1_btn " :class="{ choice_1_btn_only: supply_buy == 2 }"
+                                @mouseover="supply_buy = 2">
+                                <a class="choice_1_btn_a" title="求购商品">求购商品</a>
+                            </div>
+                        </div>
+                        <div class="choice_1_card_box">
+                            <!-- 供应商品 -->
+                            <div class="shop_ul_img_2 choice_1_card clearfix" v-show="supply_buy == 1">
+                                <div class="shop_li_img_2" v-for="(item, index) in pageData3" :key="index">
+                                    <NuxtLink class="shop_li_img_2_a" :href="getLinkPathDetail(item)"
+                                        :title="item.name">
+                                        <div class="shop_li_img_2_num"> {{ index + 1 }} </div>
+                                        <div class="shop_li_img_2_right clearfix">
+                                            <img class="shop_li_img_2_img" :src="item.imgurl" :title="item.name" alt="">
+                                            <div class="shop_li_img_2_text">
+                                                {{ item.name }}
+                                            </div>
+                                        </div>
+                                    </NuxtLink>
+                                </div>
+                            </div>
+                            <!-- 供应商品 -->
+                            <!-- 求购商品 -->
+                            <div class="shop_ul_img_2 choice_1_card clearfix" v-show="supply_buy == 2">
+                                <div class="shop_li_img_2" v-for="(item, index) in pageData4" :key="index">
+                                    <NuxtLink class="shop_li_img_2_a" :href="getLinkPathDetail(item)"
+                                        :title="item.name">
+                                        <div class="shop_li_img_2_num"> {{ index + 1 }} </div>
+                                        <div class="shop_li_img_2_right clearfix">
+                                            <img class="shop_li_img_2_img" :src="item.imgurl" :title="item.name" alt="">
+                                            <div class="shop_li_img_2_text">
+                                                {{ item.name }}
+                                            </div>
+                                        </div>
+                                    </NuxtLink>
+                                </div>
+                            </div>
+                            <!-- 求购商品 -->
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 选项卡1 -->
+            <section class="index_3 clearfix">
+                <div class="shop_head_1 clearfix">
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: buy_num == 1 }"
+                        @mouseover="buy_num = 1">详情信息</div>
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: buy_num == 2 }"
+                        @mouseover="buy_num = 2">发布人信息</div>
+                </div>
+                <div class="card_out clearfix">
+                    <div class="card_1_box clearfix card_1_box_only" v-show="buy_num == 1" v-html="newsDetail.detail">
+                    </div>
+                    <div class="card_1_box clearfix card_1_box_only" v-show="buy_num == 2">
+                        <P>公司名称:{{ newsDetail.com }}</P>
+                        <P>电子邮箱:{{ newsDetail.email }}</P>
+                        <P>邮政编码:{{ newsDetail.postal }}</P>
+                        <P>联系地址:{{ newsDetail.address }}</P>
+                    </div>
+                </div>
+            </section>
+            <!-- 选项卡2 -->
+            <section class="index_4 clearfix">
+                <div class="box_1 clearfix">
+                    <div class="box_1_head">
+                        <div class="box_1_head_name">点击排行</div>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in pageData1" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.title" alt="">
+                                </div>
+                                <div class="img_li_1_dot2">{{ item.name }}
+                                </div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="box_1 clearfix">
+                    <div class="box_1_head">
+                        <div class="box_1_head_name">最新商机</div>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in pageData2" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.title" alt="">
+                                </div>
+                                <div class="img_li_1_dot2">{{ item.name }}
+                                </div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </section>
+        </main>
+        <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
+        <HomeFoot1></HomeFoot1>
+    </div>
+</template>
+
+<script setup>
+//0.页面依赖 start ---------------------------------------->
+import { onMounted, ref } from 'vue'
+import { ElBreadcrumb, ElBreadcrumbItem, ElRadio, ElRadioGroup, ElCheckbox, ElCheckboxGroup, ElMessage, ElInput } from 'element-plus'
+import { ArrowRight } from '@element-plus/icons-vue'
+//0.页面依赖 end ---------------------------------------->
+
+//1.获得路由id start ---------------------------------------->
+const route = useRoute();
+const articleId = parseInt(route.params.id);
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+const targetSegment2 = getRoutePath(3);
+const supply_num = ref(1)
+const buy_num = ref(1)
+const supply_buy = ref(1)
+
+//1.1 获得当前的路由id
+let routeId;
+let routeType;
+let navTitle = ref('')//二级导航标题
+let navCid = ref('')//二级导航id
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment2,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    navTitle.value = getRouteId.data.alias
+    navCid.value = getRouteId.data.category_id
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.2 获取二级栏目
+let parent_name = ref('');//父级名称
+let parent_id = ref('');//父级id
+let parent_pinyin = ref('');//父级拼音
+const getRoutePName = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+console.log("getRoutePName", getRoutePName);
+
+if (getRoutePName.code == 200) {
+    routeId = getRoutePName.data.category_id
+    parent_id.value = getRoutePName.data.category_id
+    parent_name.value = getRoutePName.data.alias
+    routeType = getRoutePName.data.type
+} else {
+    console.log("获得路由id出错!", getRoutePName.message)
+}
+//1.3 获取一级栏目
+let p_parent_name = ref('');//父级名称
+let p_parent_id = ref('');//父级id
+let p_parent_pinyin = ref('');//父级拼音
+const getRoutePName_parent = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRoutePName_parent", getRoutePName_parent);
+
+if (getRoutePName_parent.code == 200) {
+    p_parent_id.value = getRoutePName_parent.data.category_id
+    p_parent_name.value = getRoutePName_parent.data.alias
+    // p_parent_pinyin.value = getRoutePName_parent.data.aLIas_pinyin
+} else {
+    console.log("获得路由id出错!", getRoutePName_parent.message)
+}
+//1.4 获取某个栏目
+const getParentId = await requestDataPromise('/web/getOneWebsiteCategory', {
+    method: 'GET',
+    query: {
+        'catid': parent_id.value,
+    },
+});
+console.log("getParentId", getParentId);
+
+if (getParentId.code == 200) {
+    parent_pinyin.value = getParentId.data.aLIas_pinyin
+} else {
+    console.log("获得路由id出错!", getParentId.message)
+}
+//1.获得路由id end ---------------------------------------->
+
+//2.获得模块数据 start ---------------------------------------->
+const pageData1 = ref([])//点击排行
+const pageData2 = ref([])//最新商机
+const pageData3 = ref([])//供应商品
+const pageData4 = ref([])//求购商品
+
+//创建请求数据json
+let getJson = [
+    { "level": "3,0,8" },//点击排行
+    { "level": "4,0,8" },//最新商机
+    { "level": "5,0,6" },//供应商品
+    { "level": "6,0,6" },//求购商品
+]
+let jsonString = JSON.stringify(getJson)
+
+//获取所有数据
+async function getPageAllData() {
+    const mkdata = await requestDataPromise('/web/getWebsiteshop', {
+        method: 'GET',
+        query: {
+            'id': jsonString,
+            'catid': 713,
+        },
+    });
+    if (mkdata.code == 200) {
+        //点击排行
+        pageData1.value = mkdata.data.goods[0];
+        //最新商机
+        pageData2.value = mkdata.data.goods[1];
+        //供应商品
+        pageData3.value = mkdata.data.goods[2];
+        //求购商品
+        pageData4.value = mkdata.data.goods[3];
+    } else {
+        ElMessage.error(mkdata.message)
+    }
+}
+getPageAllData();
+
+//2.获得模块数据 end ---------------------------------------->
+
+
+//4.新闻详情 start ---------------------------------------->
+//4.1 资讯详情
+const newsDetail = ref({})
+const routeNewsTtitle = ref("");
+//4.2 发布日期
+const time = ref("");
+//4.3 路径
+const routLevelTitle = ref("");
+const routLevelId = ref("");
+//4.4 是否展示投票
+const articleChoice = ref(false);
+//4.5 获取详情
+let shopImg = ref('')
+let shopType = ref(1)
+async function getPageData() {
+    const mkdata = await requestDataPromise('/web/getWebsiteshopInfo', {
+        method: 'GET',
+        query: {
+            'id': articleId
+        },
+    });
+    if (mkdata.code == 200) {
+        //判断是否显示投票
+        if (mkdata.data.is_survey == 1) {
+            console.log("本篇文章含有投票!")
+            articleChoice.value = true;
+        }
+        //获取内容
+        newsDetail.value = mkdata.data;
+        shopType.value = mkdata.data.type_id
+        //获取路径
+        routLevelTitle.value = newsDetail.value.cat_name;
+        routLevelId.value = newsDetail.value.category_id;
+        shopImg.value = mkdata.data.imgurl[0]
+        //获取发布时间
+        time.value = newsDetail.value.updated_at.split(' ')[0];
+        //修正标题长度
+        if (newsDetail.value.name.length >= 20) {
+            routeNewsTtitle.value = newsDetail.value.name.substr(0, 20) + "...";
+        } else {
+            routeNewsTtitle.value = newsDetail.value.name
+        }
+    } else {
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+        console.log("错误位置:获取详情内容")
+        console.log("后端错误反馈:", mkdata.message)
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    }
+}
+getPageData();
+//4.新闻详情 end ---------------------------------------->
+
+//5.广告 start ---------------------------------------->
+let adImg1 = ref([]);
+let adImg2 = ref([]);
+
+onMounted(async () => {
+    const { $webUrl, $CwebUrl } = useNuxtApp();
+    //广告1
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0001`
+    const responseAd1 = await fetch(url, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd1 = await responseAd1.json();
+    adImg1.value = resultAd1.data[0];
+
+    //广告2
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0002`
+    const responseAd2 = await fetch(url2, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd2 = await responseAd2.json();
+    adImg2.value = resultAd2.data[0];
+})
+//5.广告 end ---------------------------------------->
+
+
+//6.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': routeId
+    },
+});
+
+if (setData.code == 200) {
+    let seoTitle = setData.data.seo_title;
+    let seoDescription = setData.data.seo_description;
+    let seoKeywords = setData.data.seo_keywords;
+    let seoSuffix = setData.data.suffix;
+    let seoName = setData.data.website_name;
+
+    useSeoMeta({
+        title: seoTitle + "_" + seoSuffix,
+        meta: [
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("设置频道页SEO出错!", setData.message)
+}
+//6.设置seo信息 end---------------------------------------->
+
+//8.页面图片放大 start---------------------------------------->
+const previewVisible = ref(false)
+const selectedImage = ref(' ')
+
+const openPreview = (event) => {
+    if (event.target.tagName === 'IMG') {
+        selectedImage.value = event.target.src;
+        previewVisible.value = true;
+    }
+}
+const closePreview = () => {
+    previewVisible.value = false;
+}
+//8.页面图片放大 end---------------------------------------->
+</script>
+
+
+<style lang="less" scoped>
+@import url('@/assets/css/shop/goodsDetail.less');
+@import url('@/assets/css/shop/goodsDetail1.less');
+</style>

+ 582 - 0
components/goods/detail3.vue

@@ -0,0 +1,582 @@
+<template>
+    <!-- goods -->
+    <div class="goods">
+        <HomePageHead></HomePageHead>
+        <HomePageNavigation></HomePageNavigation>
+        <HomeAdvertising :imgurl="adImg1"></HomeAdvertising>
+        <main class="index_main" v-if="shopType == 1">
+            <section class="index_1 clearfix">
+                <div class="breadcrumb">
+                    <div class="inner">
+                        <span class="location">当前位置 :</span>
+                        <el-breadcrumb :separator-icon="ArrowRight">
+                            <el-breadcrumb-item>
+                                <NuxtLink to="/">首页</NuxtLink>
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item v-if="p_parent_name != ''">
+                                <!-- <NuxtLink :to="`/${targetSegment}/index.html`"> {{ p_parent_name }}</NuxtLink> -->
+                                {{ p_parent_name }}
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item v-if="parent_name != ''">
+                                <NuxtLink :to="`/${targetSegment}/${targetSegment1}/index.html`"> {{ parent_name }}
+                                </NuxtLink>
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item v-if="parent_name != ''">
+                                <NuxtLink :to="`/${targetSegment}/${targetSegment1}/${targetSegment2}/list-1.html`">
+                                    {{ navTitle }}
+                                </NuxtLink>
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item>
+                                {{ routeNewsTtitle }}
+                            </el-breadcrumb-item>
+                        </el-breadcrumb>
+                    </div>
+                </div>
+            </section>
+            <section class="index_2 clearfix">
+                <img class="index_2_img" :src="shopImg" :title="newsDetail.name" alt="">
+                <div class="index_2_left">
+                    <h4 class="index_2_h4 dot1">{{ newsDetail.name }}</h4>
+                    <div class="index_2_title_box clearfix">
+                        <time class="index_2_title"> 更新日期:{{ newsDetail.updated_at }}</time>
+                        <span class="index_2_title">浏览次数:{{ newsDetail.hits }}</span>
+                    </div>
+                    <div class="index_2_ul clearfix">
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">公 司 名</label>
+                            <span class="index_2_li_text "> {{ newsDetail.com }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">所 在 地</label>
+                            <span class="index_2_li_text ">{{ newsDetail.address }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">联 系 人</label>
+                            <span class="index_2_li_text ">{{ newsDetail.contact }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">产品单价</label>
+
+                            <span class="index_2_li_text">
+                                {{ newsDetail.price }}
+                                元/
+                                {{ newsDetail.unit }}
+                            </span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">最小定量</label>
+                            <span class="index_2_li_text ">{{ newsDetail.min }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">供货总量</label>
+                            <span class="index_2_li_text ">{{ newsDetail.max }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">有 效 期</label>
+                            <span class="index_2_li_text ">{{ getTime(newsDetail.validity, 'year', 1) }}</span>
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 选项卡1 -->
+            <section class="index_3 clearfix">
+                <div class="shop_head_1 clearfix">
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: supply_num == 1 }"
+                        @mouseover="supply_num = 1">详情信息</div>
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: supply_num == 2 }"
+                        @mouseover="supply_num = 2">联系方式</div>
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: supply_num == 3 }"
+                        @mouseover="supply_num = 3">图片展示</div>
+                </div>
+                <div class="card_out clearfix">
+                    <div class="card_1_box clearfix card_1_box_only" v-if="supply_num == 1" v-html="newsDetail.detail">
+                    </div>
+                    <div class="card_1_box clearfix card_1_box_only" v-if="supply_num == 2">
+                        <p class="supply_art_box_p">公司名称:{{ newsDetail.com }}</p>
+                        <p class="supply_art_box_p">电子邮箱:{{ newsDetail.email }}</p>
+                        <p class="supply_art_box_p">邮政编码:{{ newsDetail.postal }}</p>
+                        <p class="supply_art_box_p">联系地址:{{ newsDetail.address }}</p>
+                    </div>
+                    <div class="card_1_box clearfix card_1_box_only" v-if="supply_num == 3">
+                        <div class="supply_art_box_img">
+                            <img :src="item" v-for="item in newsDetail.imgurl">
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 选项卡2 -->
+            <section class="index_4 clearfix">
+                <div class="box_1 clearfix">
+                    <div class="box_1_head">
+                        <div class="box_1_head_name">点击排行</div>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in pageData1" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.title" alt="">
+                                </div>
+                                <div class="img_li_1_dot2">{{ item.name }}
+                                </div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="box_1 clearfix">
+                    <div class="box_1_head">
+                        <div class="box_1_head_name">最新商机</div>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in pageData2" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.title" alt="">
+                                </div>
+                                <div class="img_li_1_dot2">{{ item.name }}
+                                </div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </section>
+        </main>
+
+        <main class="index_main" v-if="shopType == 2">
+            <section class=" clearfix">
+                <div class="index_out_1_left clearfix">
+                    <section class="index_1 clearfix">
+                        <div class="breadcrumb">
+                            <div class="inner">
+                                <span class="location">当前位置 :</span>
+                                <el-breadcrumb :separator-icon="ArrowRight">
+                                    <el-breadcrumb-item>
+                                        <NuxtLink to="/">首页</NuxtLink>
+                                    </el-breadcrumb-item>
+                                    <el-breadcrumb-item v-if="p_parent_name != ''">
+                                        <NuxtLink :to="`/${targetSegment}/index.html`"> {{ p_parent_name }}</NuxtLink>
+                                    </el-breadcrumb-item>
+                                    <el-breadcrumb-item v-if="parent_name != ''">
+                                        <NuxtLink :to="`/${targetSegment}/${targetSegment1}/list-1.html`">
+                                            {{ parent_name }}
+                                        </NuxtLink>
+                                    </el-breadcrumb-item>
+                                    <el-breadcrumb-item>
+                                        {{ routeNewsTtitle }}
+                                    </el-breadcrumb-item>
+                                </el-breadcrumb>
+                            </div>
+                        </div>
+                    </section>
+                    <section class="index_2 clearfix">
+                        <img class="index_2_img" :src="shopImg" :title="newsDetail.name" alt="">
+                        <div class="index_2_right">
+                            <h4 class="index_2_h4 dot1">求购:{{ newsDetail.name }}</h4>
+                            <div class="index_2_ul clearfix">
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">发布日期</label>
+                                    <span class="index_2_li_text">{{ getTime(newsDetail.updated_at, 'year', 1) }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">截止日期</label>
+                                    <span class="index_2_li_text">{{ getTime(newsDetail.validity, 'year', 1) }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">浏览次数</label>
+                                    <span class="index_2_li_text">{{ newsDetail.hits }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">联 系 人</label>
+                                    <span class="index_2_li_text">{{ newsDetail.contact }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">发布地区</label>
+                                    <span class="index_2_li_text">{{ newsDetail.address }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">座 机</label>
+                                    <span class="index_2_li_text">{{ newsDetail.landline }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">联系电话</label>
+                                    <span class="index_2_li_text">{{ newsDetail.phone }}</span>
+                                </div>
+                            </div>
+                        </div>
+                    </section>
+                </div>
+                <div class="shop_3_right clearfix">
+                    <div class="choice_1_box clearfix">
+                        <div class="choice_1_btn_box clearfix">
+                            <div class="choice_1_btn" :class="{ choice_1_btn_only: supply_buy == 1 }"
+                                @mouseover="supply_buy = 1">
+                                <span class="choice_1_btn_a" title="供应商品">供应商品</span>
+                            </div>
+                            <div class="choice_1_btn " :class="{ choice_1_btn_only: supply_buy == 2 }"
+                                @mouseover="supply_buy = 2">
+                                <a class="choice_1_btn_a" title="求购商品">求购商品</a>
+                            </div>
+                        </div>
+                        <div class="choice_1_card_box">
+                            <!-- 供应商品 -->
+                            <div class="shop_ul_img_2 choice_1_card clearfix" v-show="supply_buy == 1">
+                                <div class="shop_li_img_2" v-for="(item, index) in pageData3" :key="index">
+                                    <NuxtLink class="shop_li_img_2_a" :href="getLinkPathDetail(item)"
+                                        :title="item.name">
+                                        <div class="shop_li_img_2_num"> {{ index + 1 }} </div>
+                                        <div class="shop_li_img_2_right clearfix">
+                                            <img class="shop_li_img_2_img" :src="item.imgurl" :title="item.name" alt="">
+                                            <div class="shop_li_img_2_text">
+                                                {{ item.name }}
+                                            </div>
+                                        </div>
+                                    </NuxtLink>
+                                </div>
+                            </div>
+                            <!-- 供应商品 -->
+                            <!-- 求购商品 -->
+                            <div class="shop_ul_img_2 choice_1_card clearfix" v-show="supply_buy == 2">
+                                <div class="shop_li_img_2" v-for="(item, index) in pageData4" :key="index">
+                                    <NuxtLink class="shop_li_img_2_a" :href="getLinkPathDetail(item)"
+                                        :title="item.name">
+                                        <div class="shop_li_img_2_num"> {{ index + 1 }} </div>
+                                        <div class="shop_li_img_2_right clearfix">
+                                            <img class="shop_li_img_2_img" :src="item.imgurl" :title="item.name" alt="">
+                                            <div class="shop_li_img_2_text">
+                                                {{ item.name }}
+                                            </div>
+                                        </div>
+                                    </NuxtLink>
+                                </div>
+                            </div>
+                            <!-- 求购商品 -->
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 选项卡1 -->
+            <section class="index_3 clearfix">
+                <div class="shop_head_1 clearfix">
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: buy_num == 1 }"
+                        @mouseover="buy_num = 1">详情信息</div>
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: buy_num == 2 }"
+                        @mouseover="buy_num = 2">发布人信息</div>
+                </div>
+                <div class="card_out clearfix">
+                    <div class="card_1_box clearfix card_1_box_only" v-show="buy_num == 1" v-html="newsDetail.detail">
+                    </div>
+                    <div class="card_1_box clearfix card_1_box_only" v-show="buy_num == 2">
+                        <P>公司名称:{{ newsDetail.com }}</P>
+                        <P>电子邮箱:{{ newsDetail.email }}</P>
+                        <P>邮政编码:{{ newsDetail.postal }}</P>
+                        <P>联系地址:{{ newsDetail.address }}</P>
+                    </div>
+                </div>
+            </section>
+            <!-- 选项卡2 -->
+            <section class="index_4 clearfix">
+                <div class="box_1 clearfix">
+                    <div class="box_1_head">
+                        <div class="box_1_head_name">点击排行</div>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in pageData1" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.title" alt="">
+                                </div>
+                                <div class="img_li_1_dot2">{{ item.name }}
+                                </div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="box_1 clearfix">
+                    <div class="box_1_head">
+                        <div class="box_1_head_name">最新商机</div>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in pageData2" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.title" alt="">
+                                </div>
+                                <div class="img_li_1_dot2">{{ item.name }}
+                                </div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </section>
+        </main>
+        <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
+        <HomeFoot1></HomeFoot1>
+    </div>
+</template>
+
+<script setup>
+//0.页面依赖 start ---------------------------------------->
+import { onMounted, ref } from 'vue'
+import { ElBreadcrumb, ElBreadcrumbItem, ElRadio, ElRadioGroup, ElCheckbox, ElCheckboxGroup, ElMessage, ElInput } from 'element-plus'
+import { ArrowRight } from '@element-plus/icons-vue'
+//0.页面依赖 end ---------------------------------------->
+
+//1.获得路由id start ---------------------------------------->
+const route = useRoute();
+const articleId = parseInt(route.params.id);
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+const targetSegment2 = getRoutePath(3);
+const supply_num = ref(1)
+const buy_num = ref(1)
+const supply_buy = ref(1)
+
+//1.1 获得当前的路由id
+let routeId;
+let routeType;
+let navTitle = ref('')//二级导航标题
+let navCid = ref('')//二级导航id
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment2,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    navTitle.value = getRouteId.data.alias
+    navCid.value = getRouteId.data.category_id
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.2 获取二级栏目
+let parent_name = ref('');//父级名称
+let parent_id = ref('');//父级id
+let parent_pinyin = ref('');//父级拼音
+const getRoutePName = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+console.log("getRoutePName", getRoutePName);
+
+if (getRoutePName.code == 200) {
+    routeId = getRoutePName.data.category_id
+    parent_id.value = getRoutePName.data.category_id
+    parent_name.value = getRoutePName.data.alias
+    routeType = getRoutePName.data.type
+} else {
+    console.log("获得路由id出错!", getRoutePName.message)
+}
+//1.3 获取一级栏目
+let p_parent_name = ref('');//父级名称
+let p_parent_id = ref('');//父级id
+let p_parent_pinyin = ref('');//父级拼音
+const getRoutePName_parent = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRoutePName_parent", getRoutePName_parent);
+
+if (getRoutePName_parent.code == 200) {
+    p_parent_id.value = getRoutePName_parent.data.category_id
+    p_parent_name.value = getRoutePName_parent.data.alias
+    // p_parent_pinyin.value = getRoutePName_parent.data.aLIas_pinyin
+} else {
+    console.log("获得路由id出错!", getRoutePName_parent.message)
+}
+//1.4 获取某个栏目
+const getParentId = await requestDataPromise('/web/getOneWebsiteCategory', {
+    method: 'GET',
+    query: {
+        'catid': parent_id.value,
+    },
+});
+console.log("getParentId", getParentId);
+
+if (getParentId.code == 200) {
+    parent_pinyin.value = getParentId.data.aLIas_pinyin
+} else {
+    console.log("获得路由id出错!", getParentId.message)
+}
+//1.获得路由id end ---------------------------------------->
+
+//2.获得模块数据 start ---------------------------------------->
+const pageData1 = ref([])//点击排行
+const pageData2 = ref([])//最新商机
+const pageData3 = ref([])//供应商品
+const pageData4 = ref([])//求购商品
+
+//创建请求数据json
+let getJson = [
+    { "level": "3,0,8" },//点击排行
+    { "level": "4,0,8" },//最新商机
+    { "level": "5,0,6" },//供应商品
+    { "level": "6,0,6" },//求购商品
+]
+let jsonString = JSON.stringify(getJson)
+
+//获取所有数据
+async function getPageAllData() {
+    const mkdata = await requestDataPromise('/web/getWebsiteshop', {
+        method: 'GET',
+        query: {
+            'id': jsonString,
+            'catid': 713,
+        },
+    });
+    if (mkdata.code == 200) {
+        //点击排行
+        pageData1.value = mkdata.data.goods[0];
+        //最新商机
+        pageData2.value = mkdata.data.goods[1];
+        //供应商品
+        pageData3.value = mkdata.data.goods[2];
+        //求购商品
+        pageData4.value = mkdata.data.goods[3];
+    } else {
+        ElMessage.error(mkdata.message)
+    }
+}
+getPageAllData();
+
+//2.获得模块数据 end ---------------------------------------->
+
+
+//4.新闻详情 start ---------------------------------------->
+//4.1 资讯详情
+const newsDetail = ref({})
+const routeNewsTtitle = ref("");
+//4.2 发布日期
+const time = ref("");
+//4.3 路径
+const routLevelTitle = ref("");
+const routLevelId = ref("");
+//4.4 是否展示投票
+const articleChoice = ref(false);
+//4.5 获取详情
+let shopImg = ref('')
+let shopType = ref(1)
+async function getPageData() {
+    const mkdata = await requestDataPromise('/web/getWebsiteshopInfo', {
+        method: 'GET',
+        query: {
+            'id': articleId
+        },
+    });
+    if (mkdata.code == 200) {
+        //判断是否显示投票
+        if (mkdata.data.is_survey == 1) {
+            console.log("本篇文章含有投票!")
+            articleChoice.value = true;
+        }
+        //获取内容
+        newsDetail.value = mkdata.data;
+        shopType.value = mkdata.data.type_id
+        //获取路径
+        routLevelTitle.value = newsDetail.value.cat_name;
+        routLevelId.value = newsDetail.value.category_id;
+        shopImg.value = mkdata.data.imgurl[0]
+        //获取发布时间
+        time.value = newsDetail.value.updated_at.split(' ')[0];
+        //修正标题长度
+        if (newsDetail.value.name.length >= 20) {
+            routeNewsTtitle.value = newsDetail.value.name.substr(0, 20) + "...";
+        } else {
+            routeNewsTtitle.value = newsDetail.value.name
+        }
+    } else {
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+        console.log("错误位置:获取详情内容")
+        console.log("后端错误反馈:", mkdata.message)
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    }
+}
+getPageData();
+//4.新闻详情 end ---------------------------------------->
+
+//5.广告 start ---------------------------------------->
+let adImg1 = ref([]);
+let adImg2 = ref([]);
+
+onMounted(async () => {
+    const { $webUrl, $CwebUrl } = useNuxtApp();
+    //广告1
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0001`
+    const responseAd1 = await fetch(url, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd1 = await responseAd1.json();
+    adImg1.value = resultAd1.data[0];
+
+    //广告2
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0002`
+    const responseAd2 = await fetch(url2, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd2 = await responseAd2.json();
+    adImg2.value = resultAd2.data[0];
+})
+//5.广告 end ---------------------------------------->
+
+
+//6.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': routeId
+    },
+});
+
+if (setData.code == 200) {
+    let seoTitle = setData.data.seo_title;
+    let seoDescription = setData.data.seo_description;
+    let seoKeywords = setData.data.seo_keywords;
+    let seoSuffix = setData.data.suffix;
+    let seoName = setData.data.website_name;
+
+    useSeoMeta({
+        title: seoTitle + "_" + seoSuffix,
+        meta: [
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("设置频道页SEO出错!", setData.message)
+}
+//6.设置seo信息 end---------------------------------------->
+
+//8.页面图片放大 start---------------------------------------->
+const previewVisible = ref(false)
+const selectedImage = ref(' ')
+
+const openPreview = (event) => {
+    if (event.target.tagName === 'IMG') {
+        selectedImage.value = event.target.src;
+        previewVisible.value = true;
+    }
+}
+const closePreview = () => {
+    previewVisible.value = false;
+}
+//8.页面图片放大 end---------------------------------------->
+</script>
+
+
+<style lang="less" scoped>
+@import url('@/assets/css/shop/goodsDetail.less');
+@import url('@/assets/css/shop/goodsDetail1.less');
+</style>

+ 576 - 0
components/goods/detail_sec.vue

@@ -0,0 +1,576 @@
+<template>
+    <!-- goods -->
+    <div class="goods">
+        <HomePageHead></HomePageHead>
+        <HomePageNavigation></HomePageNavigation>
+        <HomeAdvertising :imgurl="adImg1"></HomeAdvertising>
+        <main class="index_main" v-if="shopType == 1">
+            <section class="index_1 clearfix">
+                <div class="breadcrumb">
+                    <div class="inner">
+                        <span class="location">当前位置 :</span>
+                        <el-breadcrumb :separator-icon="ArrowRight">
+                            <el-breadcrumb-item>
+                                <NuxtLink to="/">首页</NuxtLink>
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item v-if="p_parent_name != ''">
+                                <NuxtLink :to="`/${targetSegment}/index.html`"> {{ p_parent_name }}</NuxtLink>
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item v-if="parent_name != ''">
+                                <NuxtLink :to="`/${targetSegment}/${targetSegment1}/list-1.html`"> {{ parent_name }}
+                                </NuxtLink>
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item>
+                                {{ routeNewsTtitle }}
+                            </el-breadcrumb-item>
+                        </el-breadcrumb>
+                    </div>
+                </div>
+            </section>
+            <section class="index_2 clearfix">
+                <img class="index_2_img" :src="shopImg" :title="newsDetail.name" alt="">
+                <div class="index_2_left">
+                    <h4 class="index_2_h4 dot1">{{ newsDetail.name }}</h4>
+                    <div class="index_2_title_box clearfix">
+                        <time class="index_2_title"> 更新日期:{{ newsDetail.updated_at }}</time>
+                        <span class="index_2_title">浏览次数:{{ newsDetail.hits }}</span>
+                    </div>
+                    <div class="index_2_ul clearfix">
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">公 司 名</label>
+                            <span class="index_2_li_text "> {{ newsDetail.com }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">所 在 地</label>
+                            <span class="index_2_li_text ">{{ newsDetail.address }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">联 系 人</label>
+                            <span class="index_2_li_text ">{{ newsDetail.contact }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">产品单价</label>
+
+                            <span class="index_2_li_text">
+                                {{ newsDetail.price }}
+                                元/
+                                {{ newsDetail.unit }}
+                            </span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">最小定量</label>
+                            <span class="index_2_li_text ">{{ newsDetail.min }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">供货总量</label>
+                            <span class="index_2_li_text ">{{ newsDetail.max }}</span>
+                        </div>
+                        <div class="index_2_li clearfix">
+                            <label class="index_2_li_label">有 效 期</label>
+                            <span class="index_2_li_text ">{{ getTime(newsDetail.validity, 'year', 1) }}</span>
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 选项卡1 -->
+            <section class="index_3 clearfix">
+                <div class="shop_head_1 clearfix">
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: supply_num == 1 }"
+                        @mouseover="supply_num = 1">详情信息</div>
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: supply_num == 2 }"
+                        @mouseover="supply_num = 2">联系方式</div>
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: supply_num == 3 }"
+                        @mouseover="supply_num = 3">图片展示</div>
+                </div>
+                <div class="card_out clearfix">
+                    <div class="card_1_box clearfix card_1_box_only" v-if="supply_num == 1" v-html="newsDetail.detail">
+                    </div>
+                    <div class="card_1_box clearfix card_1_box_only" v-if="supply_num == 2">
+                        <p class="supply_art_box_p">公司名称:{{ newsDetail.com }}</p>
+                        <p class="supply_art_box_p">电子邮箱:{{ newsDetail.email }}</p>
+                        <p class="supply_art_box_p">邮政编码:{{ newsDetail.postal }}</p>
+                        <p class="supply_art_box_p">联系地址:{{ newsDetail.address }}</p>
+                    </div>
+                    <div class="card_1_box clearfix card_1_box_only" v-if="supply_num == 3">
+                        <div class="supply_art_box_img">
+                            <img :src="item" v-for="item in newsDetail.imgurl">
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 选项卡2 -->
+            <section class="index_4 clearfix">
+                <div class="box_1 clearfix">
+                    <div class="box_1_head">
+                        <div class="box_1_head_name">点击排行</div>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in pageData1" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.title" alt="">
+                                </div>
+                                <div class="img_li_1_dot2">{{ item.name }}
+                                </div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="box_1 clearfix">
+                    <div class="box_1_head">
+                        <div class="box_1_head_name">最新商机</div>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in pageData2" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.title" alt="">
+                                </div>
+                                <div class="img_li_1_dot2">{{ item.name }}
+                                </div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </section>
+        </main>
+
+        <main class="index_main" v-if="shopType == 2">
+            <section class=" clearfix">
+                <div class="index_out_1_left clearfix">
+                    <section class="index_1 clearfix">
+                        <div class="breadcrumb">
+                            <div class="inner">
+                                <span class="location">当前位置 :</span>
+                                <el-breadcrumb :separator-icon="ArrowRight">
+                                    <el-breadcrumb-item>
+                                        <NuxtLink to="/">首页</NuxtLink>
+                                    </el-breadcrumb-item>
+                                    <el-breadcrumb-item v-if="p_parent_name != ''">
+                                        <NuxtLink :to="`/${targetSegment}/index.html`"> {{ p_parent_name }}</NuxtLink>
+                                    </el-breadcrumb-item>
+                                    <el-breadcrumb-item v-if="parent_name != ''">
+                                        <NuxtLink :to="`/${targetSegment}/${targetSegment1}/list-1.html`">
+                                            {{ parent_name }}
+                                        </NuxtLink>
+                                    </el-breadcrumb-item>
+                                    <el-breadcrumb-item>
+                                        {{ routeNewsTtitle }}
+                                    </el-breadcrumb-item>
+                                </el-breadcrumb>
+                            </div>
+                        </div>
+                    </section>
+                    <section class="index_2 clearfix">
+                        <img class="index_2_img" :src="shopImg" :title="newsDetail.name" alt="">
+                        <div class="index_2_right">
+                            <h4 class="index_2_h4 dot1">求购:{{ newsDetail.name }}</h4>
+                            <div class="index_2_ul clearfix">
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">发布日期</label>
+                                    <span class="index_2_li_text">{{ getTime(newsDetail.updated_at, 'year', 1) }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">截止日期</label>
+                                    <span class="index_2_li_text">{{ getTime(newsDetail.validity, 'year', 1) }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">浏览次数</label>
+                                    <span class="index_2_li_text">{{ newsDetail.hits }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">联 系 人</label>
+                                    <span class="index_2_li_text">{{ newsDetail.contact }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">发布地区</label>
+                                    <span class="index_2_li_text">{{ newsDetail.address }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">座 机</label>
+                                    <span class="index_2_li_text">{{ newsDetail.landline }}</span>
+                                </div>
+                                <div class="index_2_li clearfix">
+                                    <label class="index_2_li_label">联系电话</label>
+                                    <span class="index_2_li_text">{{ newsDetail.phone }}</span>
+                                </div>
+                            </div>
+                        </div>
+                    </section>
+                </div>
+                <div class="shop_3_right clearfix">
+                    <div class="choice_1_box clearfix">
+                        <div class="choice_1_btn_box clearfix">
+                            <div class="choice_1_btn" :class="{ choice_1_btn_only: supply_buy == 1 }"
+                                @mouseover="supply_buy = 1">
+                                <span class="choice_1_btn_a" title="供应商品">供应商品</span>
+                            </div>
+                            <div class="choice_1_btn " :class="{ choice_1_btn_only: supply_buy == 2 }"
+                                @mouseover="supply_buy = 2">
+                                <a class="choice_1_btn_a" title="求购商品">求购商品</a>
+                            </div>
+                        </div>
+                        <div class="choice_1_card_box">
+                            <!-- 供应商品 -->
+                            <div class="shop_ul_img_2 choice_1_card clearfix" v-show="supply_buy == 1">
+                                <div class="shop_li_img_2" v-for="(item, index) in pageData3" :key="index">
+                                    <NuxtLink class="shop_li_img_2_a" :href="getLinkPathDetail(item)"
+                                        :title="item.name">
+                                        <div class="shop_li_img_2_num"> {{ index + 1 }} </div>
+                                        <div class="shop_li_img_2_right clearfix">
+                                            <img class="shop_li_img_2_img" :src="item.imgurl" :title="item.name" alt="">
+                                            <div class="shop_li_img_2_text">
+                                                {{ item.name }}
+                                            </div>
+                                        </div>
+                                    </NuxtLink>
+                                </div>
+                            </div>
+                            <!-- 供应商品 -->
+                            <!-- 求购商品 -->
+                            <div class="shop_ul_img_2 choice_1_card clearfix" v-show="supply_buy == 2">
+                                <div class="shop_li_img_2" v-for="(item, index) in pageData4" :key="index">
+                                    <NuxtLink class="shop_li_img_2_a" :href="getLinkPathDetail(item)"
+                                        :title="item.name">
+                                        <div class="shop_li_img_2_num"> {{ index + 1 }} </div>
+                                        <div class="shop_li_img_2_right clearfix">
+                                            <img class="shop_li_img_2_img" :src="item.imgurl" :title="item.name" alt="">
+                                            <div class="shop_li_img_2_text">
+                                                {{ item.name }}
+                                            </div>
+                                        </div>
+                                    </NuxtLink>
+                                </div>
+                            </div>
+                            <!-- 求购商品 -->
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 选项卡1 -->
+            <section class="index_3 clearfix">
+                <div class="shop_head_1 clearfix">
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: buy_num == 1 }"
+                        @mouseover="buy_num = 1">详情信息</div>
+                    <div class="shop_head_1_name" :class="{ shop_head_1_name_only: buy_num == 2 }"
+                        @mouseover="buy_num = 2">发布人信息</div>
+                </div>
+                <div class="card_out clearfix">
+                    <div class="card_1_box clearfix card_1_box_only" v-show="buy_num == 1" v-html="newsDetail.detail">
+                    </div>
+                    <div class="card_1_box clearfix card_1_box_only" v-show="buy_num == 2">
+                        <P>公司名称:{{ newsDetail.com }}</P>
+                        <P>电子邮箱:{{ newsDetail.email }}</P>
+                        <P>邮政编码:{{ newsDetail.postal }}</P>
+                        <P>联系地址:{{ newsDetail.address }}</P>
+                    </div>
+                </div>
+            </section>
+            <!-- 选项卡2 -->
+            <section class="index_4 clearfix">
+                <div class="box_1 clearfix">
+                    <div class="box_1_head">
+                        <div class="box_1_head_name">点击排行</div>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in pageData1" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.title" alt="">
+                                </div>
+                                <div class="img_li_1_dot2">{{ item.name }}
+                                </div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="box_1 clearfix">
+                    <div class="box_1_head">
+                        <div class="box_1_head_name">最新商机</div>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in pageData2" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.title" alt="">
+                                </div>
+                                <div class="img_li_1_dot2">{{ item.name }}
+                                </div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </section>
+        </main>
+        <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
+        <HomeFoot1></HomeFoot1>
+    </div>
+</template>
+
+<script setup>
+//0.页面依赖 start ---------------------------------------->
+import { onMounted, ref } from 'vue'
+import { ElBreadcrumb, ElBreadcrumbItem, ElRadio, ElRadioGroup, ElCheckbox, ElCheckboxGroup, ElMessage, ElInput } from 'element-plus'
+import { ArrowRight } from '@element-plus/icons-vue'
+//0.页面依赖 end ---------------------------------------->
+
+//1.获得路由id start ---------------------------------------->
+const route = useRoute();
+const articleId = parseInt(route.params.id);
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+const targetSegment2 = getRoutePath(3);
+const supply_num = ref(1)
+const buy_num = ref(1)
+const supply_buy = ref(1)
+
+//1.1 获得当前的路由id
+let routeId;
+let routeType;
+let navTitle = ref('')//二级导航标题
+let navCid = ref('')//二级导航id
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment2,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    navTitle.value = getRouteId.data.alias
+    navCid.value = getRouteId.data.category_id
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.2 获取二级栏目
+let parent_name = ref('');//父级名称
+let parent_id = ref('');//父级id
+let parent_pinyin = ref('');//父级拼音
+const getRoutePName = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+console.log("getRoutePName", getRoutePName);
+
+if (getRoutePName.code == 200) {
+    routeId = getRoutePName.data.category_id
+    parent_id.value = getRoutePName.data.category_id
+    parent_name.value = getRoutePName.data.alias
+    routeType = getRoutePName.data.type
+} else {
+    console.log("获得路由id出错!", getRoutePName.message)
+}
+//1.3 获取一级栏目
+let p_parent_name = ref('');//父级名称
+let p_parent_id = ref('');//父级id
+let p_parent_pinyin = ref('');//父级拼音
+const getRoutePName_parent = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRoutePName_parent", getRoutePName_parent);
+
+if (getRoutePName_parent.code == 200) {
+    p_parent_id.value = getRoutePName_parent.data.category_id
+    p_parent_name.value = getRoutePName_parent.data.alias
+    // p_parent_pinyin.value = getRoutePName_parent.data.aLIas_pinyin
+} else {
+    console.log("获得路由id出错!", getRoutePName_parent.message)
+}
+//1.4 获取某个栏目
+const getParentId = await requestDataPromise('/web/getOneWebsiteCategory', {
+    method: 'GET',
+    query: {
+        'catid': parent_id.value,
+    },
+});
+console.log("getParentId", getParentId);
+
+if (getParentId.code == 200) {
+    parent_pinyin.value = getParentId.data.aLIas_pinyin
+} else {
+    console.log("获得路由id出错!", getParentId.message)
+}
+//1.获得路由id end ---------------------------------------->
+
+//2.获得模块数据 start ---------------------------------------->
+const pageData1 = ref([])//点击排行
+const pageData2 = ref([])//最新商机
+const pageData3 = ref([])//供应商品
+const pageData4 = ref([])//求购商品
+
+//创建请求数据json
+let getJson = [
+    { "level": "3,0,8" },//点击排行
+    { "level": "4,0,8" },//最新商机
+    { "level": "5,0,6" },//供应商品
+    { "level": "6,0,6" },//求购商品
+]
+let jsonString = JSON.stringify(getJson)
+
+//获取所有数据
+async function getPageAllData() {
+    const mkdata = await requestDataPromise('/web/getWebsiteshop', {
+        method: 'GET',
+        query: {
+            'id': jsonString,
+            'catid': 713,
+        },
+    });
+    if (mkdata.code == 200) {
+        //点击排行
+        pageData1.value = mkdata.data.goods[0];
+        //最新商机
+        pageData2.value = mkdata.data.goods[1];
+        //供应商品
+        pageData3.value = mkdata.data.goods[2];
+        //求购商品
+        pageData4.value = mkdata.data.goods[3];
+    } else {
+        ElMessage.error(mkdata.message)
+    }
+}
+getPageAllData();
+
+//2.获得模块数据 end ---------------------------------------->
+
+
+//4.新闻详情 start ---------------------------------------->
+//4.1 资讯详情
+const newsDetail = ref({})
+const routeNewsTtitle = ref("");
+//4.2 发布日期
+const time = ref("");
+//4.3 路径
+const routLevelTitle = ref("");
+const routLevelId = ref("");
+//4.4 是否展示投票
+const articleChoice = ref(false);
+//4.5 获取详情
+let shopImg = ref('')
+let shopType = ref(1)
+async function getPageData() {
+    const mkdata = await requestDataPromise('/web/getWebsiteshopInfo', {
+        method: 'GET',
+        query: {
+            'id': articleId
+        },
+    });
+    if (mkdata.code == 200) {
+        //判断是否显示投票
+        if (mkdata.data.is_survey == 1) {
+            console.log("本篇文章含有投票!")
+            articleChoice.value = true;
+        }
+        //获取内容
+        newsDetail.value = mkdata.data;
+        shopType.value = mkdata.data.type_id
+        //获取路径
+        routLevelTitle.value = newsDetail.value.cat_name;
+        routLevelId.value = newsDetail.value.category_id;
+        shopImg.value = mkdata.data.imgurl[0]
+        //获取发布时间
+        time.value = newsDetail.value.updated_at.split(' ')[0];
+        //修正标题长度
+        if (newsDetail.value.name.length >= 20) {
+            routeNewsTtitle.value = newsDetail.value.name.substr(0, 20) + "...";
+        } else {
+            routeNewsTtitle.value = newsDetail.value.name
+        }
+    } else {
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+        console.log("错误位置:获取详情内容")
+        console.log("后端错误反馈:", mkdata.message)
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    }
+}
+getPageData();
+//4.新闻详情 end ---------------------------------------->
+
+//5.广告 start ---------------------------------------->
+let adImg1 = ref([]);
+let adImg2 = ref([]);
+
+onMounted(async () => {
+    const { $webUrl, $CwebUrl } = useNuxtApp();
+    //广告1
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0001`
+    const responseAd1 = await fetch(url, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd1 = await responseAd1.json();
+    adImg1.value = resultAd1.data[0];
+
+    //广告2
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0002`
+    const responseAd2 = await fetch(url2, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd2 = await responseAd2.json();
+    adImg2.value = resultAd2.data[0];
+})
+//5.广告 end ---------------------------------------->
+
+
+//6.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': routeId
+    },
+});
+
+if (setData.code == 200) {
+    let seoTitle = setData.data.seo_title;
+    let seoDescription = setData.data.seo_description;
+    let seoKeywords = setData.data.seo_keywords;
+    let seoSuffix = setData.data.suffix;
+    let seoName = setData.data.website_name;
+
+    useSeoMeta({
+        title: seoTitle + "_" + seoSuffix,
+        meta: [
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("设置频道页SEO出错!", setData.message)
+}
+//6.设置seo信息 end---------------------------------------->
+
+//8.页面图片放大 start---------------------------------------->
+const previewVisible = ref(false)
+const selectedImage = ref(' ')
+
+const openPreview = (event) => {
+    if (event.target.tagName === 'IMG') {
+        selectedImage.value = event.target.src;
+        previewVisible.value = true;
+    }
+}
+const closePreview = () => {
+    previewVisible.value = false;
+}
+//8.页面图片放大 end---------------------------------------->
+</script>
+
+
+<style lang="less" scoped>
+@import url('@/assets/css/shop/goodsDetail.less');
+@import url('@/assets/css/shop/goodsDetail1.less');
+</style>

+ 244 - 0
components/goods/list_one.vue

@@ -0,0 +1,244 @@
+<template>
+    <HomePageHead></HomePageHead>
+    <HomePageNavigation></HomePageNavigation>
+    <HomeAdvertising :imgurl="adImg1"></HomeAdvertising>
+    <!-- 商品列表 goods-->
+    <main class="index_main">
+        <section class="index_1 clearfix">
+            <div class="shop_head_1 clearfix">
+                <div class="shop_head_1_name">
+                    <NuxtLink :to="`/${targetSegment}/index.html`"> {{ navTitle }}</NuxtLink>
+                </div>
+            </div>
+            <div class="shop_nav_2">
+                <a class="shop_nav_2_a" :href="`/${targetSegment}/${item.aLIas_pinyin}/list-1.html`" title=""
+                    v-for="(item, index) in secondNav" :key="index">{{ item.alias }}</a>
+            </div>
+        </section>
+        <!-- 地区选择 -->
+        <GoodsSubMenu></GoodsSubMenu>
+
+        <!-- 三农市场网-商城-商品列表 1-->
+        <section class="">
+            <div class="breadcrumb">
+                <div class="inner">
+                    <span class="location">当前位置 :</span>
+                    <el-breadcrumb :separator-icon="ArrowRight">
+                        <el-breadcrumb-item>
+                            <NuxtLink to="/">首页</NuxtLink>
+                        </el-breadcrumb-item>
+                        <el-breadcrumb-item>{{ navTitle }}</el-breadcrumb-item>
+                    </el-breadcrumb>
+                </div>
+            </div>
+            <div class="categ_table clearfix">
+                <div class="categ_table_head_box">
+                    <div class="categ_table_td_1">产品图片</div>
+                    <div class="categ_table_td_2">供求信息/公司</div>
+                    <div class="categ_table_td_3">发布时间</div>
+                    <div class="categ_table_td_4">地区</div>
+                </div>
+                <div class="categ_table_li" v-for="(item, index) in goodsList" :key="index">
+                    <a class="categ_table_li_a" :href="`/${item.pinyin}/${item.id}.html`" title="">
+                        <div class="categ_table_td_1">
+                            <img class="categ_table_td_1_img" :src="item.imgurl" title="" alt="">
+                        </div>
+                        <div class="categ_table_td_2 ">
+                            <div class="categ_table_td_2_in">
+                                <div class="categ_table_td_2_dot1 dot1">
+                                    {{ item.name }}
+                                </div>
+                                <div class="categ_table_td_2_dot2 dot2">
+                                    {{ item.description }}
+                                </div>
+                            </div>
+                        </div>
+                        <div class="categ_table_td_3">{{ getTime(item.updated_at, 'year', 1) }}</div>
+                        <div class="categ_table_td_4 dot1">{{ item.city_name }}</div>
+                    </a>
+                </div>
+                <div class="empty" v-if="goodsList == false">
+                    <img src="@/public/topic/empty.png" alt="" class="empty_img">
+                    <span class="empty_text">当前暂无数据</span>
+                </div>
+            </div>
+            <div class="pagination1" v-if="goodstotal > 0">
+                <el-pagination background layout="prev, pager, next" :total="goodstotal" :page-size="pageSize_goods"
+                    prev-text="上一页" next-text="下一页" />
+            </div>
+        </section>
+        <!-- 三农市场网-商城-商品列表 2-->
+    </main>
+    <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
+    <HomeFoot></HomeFoot>
+</template>
+
+<script setup>
+//0.加载页面依赖 start ---------------------------------------->
+import { ref, onMounted } from 'vue';
+import { ElMessage, ElBreadcrumb, ElBreadcrumbItem, ElPagination } from 'element-plus';
+import { ArrowRight } from '@element-plus/icons-vue'
+import { NuxtLink } from '#components';
+//0.加载页面依赖 end ---------------------------------------->
+
+//1.获得路由id start ---------------------------------------->
+const targetSegment = getRoutePath(1);
+// const targetSegment1 = getRoutePath(2);
+//1.1 获得当前的路由id
+let routeId;
+let navTitle = ref('')//二级导航标题
+let navCid = ref('')//二级导航id
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    navTitle.value = getRouteId.data.alias
+    navCid.value = getRouteId.data.category_id
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.获得路由id end ---------------------------------------->
+
+
+//2.页面数据 start ---------------------------------------->
+const secondNav = ref([]);
+let getSecondNav = async () => {
+    const listData = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            'placeid': 1,
+            'pid': navCid.value,
+            'num': 20,
+            'type': 1
+        },
+    });
+    console.log('listData', listData);
+
+    if (listData.code == 200) {
+        secondNav.value = listData.data;
+    } else {
+        console.log("错误位置:获取二级栏目列表")
+    }
+}
+getSecondNav()
+
+// 获取商品数据列表 start--------------------------------------->
+const goodsList = ref()
+const page_goods = ref(1)
+const pageSize_goods = ref(20)
+const goodstotal = ref()
+const getGoodsList = await requestDataPromise('/web/getWebsiteshopList', {
+    method: 'GET',
+    query: {
+        'catid': navCid.value,
+        'page': page_goods.value,
+        'pageSize': pageSize_goods.value,
+        'ismix': 1
+    },
+});
+console.log("获取数据列表goods", getGoodsList);
+
+if (getGoodsList.code == 200) {
+    goodsList.value = getGoodsList.data.goods
+    goodstotal.value = getGoodsList.data.count
+}
+// 获取商品数据 end----------------------------------------->
+
+//2.页面数据 end ---------------------------------------->
+
+
+//4.广告 start ---------------------------------------->
+let adImg1 = ref({})
+let adImg2 = ref({})
+onMounted(async () => {
+    //从客户端获取行政职能部门 加快打开速度
+    const { $webUrl, $CwebUrl } = useNuxtApp();
+    //广告1
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_list_0001`
+    const responseAd1 = await fetch(url, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd1 = await responseAd1.json();
+    adImg1.value = resultAd1.data[0];
+
+    //广告2
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_list_0002`
+    const responseAd2 = await fetch(url2, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd2 = await responseAd2.json();
+    adImg2.value = resultAd2.data[0];
+})
+//4.广告 end ---------------------------------------->
+
+//5.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': routeId
+    },
+});
+
+if (setData.code == 200) {
+    let seoTitle = setData.data.seo_title;
+    let seoDescription = setData.data.seo_description;
+    let seoKeywords = setData.data.seo_keywords;
+    let seoSuffix = setData.data.suffix;
+    let seoName = setData.data.website_name;
+
+    useSeoMeta({
+        title: seoTitle + "_" + seoSuffix,
+        meta: [
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("设置频道页SEO出错!", setData.message)
+}
+//5.设置seo信息 end---------------------------------------->
+</script>
+<style lang="less" scoped>
+@import url("@/assets/css/shop/goodsList.less");
+
+.empty {
+    width: 100%;
+    height: 300px;
+    line-height: 300px;
+    text-align: center;
+}
+
+.empty_img {
+    vertical-align: -30px;
+    margin-right: 20px;
+}
+
+.empty_text {
+    font-size: 26px;
+    color: #999;
+}
+
+.pagination {
+    height: 100px;
+    margin-top: 20px;
+}
+
+.pagination1 {
+    height: 100px;
+    margin-top: 20px;
+}
+</style>

+ 341 - 0
components/goods/list_sec.vue

@@ -0,0 +1,341 @@
+<template>
+    <HomePageHead></HomePageHead>
+    <HomePageNavigation></HomePageNavigation>
+    <HomeAdvertising :imgurl="adImg1"></HomeAdvertising>
+    <!-- 商品列表 goods-->
+    <main class="index_main">
+        <section class="index_1 clearfix">
+            <div class="shop_head_1 clearfix">
+                <div class="shop_head_1_name">
+                    <NuxtLink :to="`/${targetSegment}/index.html`"> {{ parent_name }}</NuxtLink>
+                </div>
+            </div>
+            <div class="shop_nav_2">
+                <a class="shop_nav_2_a" :href="`/${targetSegment}/${item.aLIas_pinyin}/list-1.html`" title=""
+                    v-for="(item, index) in secondNav" :key="index">{{ item.alias }}</a>
+            </div>
+        </section>
+        <!-- 地区选择 -->
+        <GoodsSubMenu1></GoodsSubMenu1>
+        <!-- 三农市场网-商城-商品列表 1-->
+        <section class="">
+            <div class="breadcrumb">
+                <div class="inner">
+                    <span class="location">当前位置 :</span>
+                    <el-breadcrumb :separator-icon="ArrowRight">
+                        <el-breadcrumb-item>
+                            <NuxtLink to="/">首页</NuxtLink>
+                        </el-breadcrumb-item>
+                        <el-breadcrumb-item v-if="parent_name != ''">
+                            <NuxtLink :to="`/${targetSegment}/index.html`"> {{ parent_name }}</NuxtLink>
+                        </el-breadcrumb-item>
+                        <el-breadcrumb-item>{{ navTitle }}</el-breadcrumb-item>
+                    </el-breadcrumb>
+                </div>
+            </div>
+            <!-- 商品列表 -->
+            <div class="categ_table clearfix">
+                <div class="categ_table_head_box">
+                    <div class="categ_table_td_1">产品图片</div>
+                    <div class="categ_table_td_2">供求信息/公司</div>
+                    <div class="categ_table_td_3">发布时间</div>
+                    <div class="categ_table_td_4">地区</div>
+                </div>
+                <div class="categ_table_li" v-for="(item, index) in goodsList" :key="index">
+                    <a class="categ_table_li_a" :href="`/${item.pinyin}/${item.id}.html`" title="">
+                        <div class="categ_table_td_1">
+                            <img class="categ_table_td_1_img" :src="item.imgurl" title="" alt="">
+                        </div>
+                        <div class="categ_table_td_2 ">
+                            <div class="categ_table_td_2_in">
+                                <div class="categ_table_td_2_dot1 dot1">
+                                    {{ item.name }}
+                                </div>
+                                <div class="categ_table_td_2_dot2 dot2">
+                                    {{ item.description }}
+                                </div>
+                            </div>
+                        </div>
+                        <div class="categ_table_td_3">{{ getTime(item.updated_at, 'year', 1) }}</div>
+                        <div class="categ_table_td_4 dot1">{{ item.city_name }}</div>
+                    </a>
+                </div>
+                <div class="empty" v-if="goodsList == false">
+                    <img src="@/public/topic/empty.png" alt="" class="empty_img">
+                    <span class="empty_text">当前暂无数据</span>
+                </div>
+            </div>
+            <div class="pagination1" v-if="goodstotal > 0">
+                <el-pagination background layout="prev, pager, next" :total="goodstotal" :page-size="pageSize_goods"
+                    prev-text="上一页" next-text="下一页" />
+            </div>
+        </section>
+        <!-- 三农市场网-商城-商品列表 2-->
+    </main>
+    <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
+    <HomeFoot></HomeFoot>
+</template>
+
+<script setup>
+//0.加载页面依赖 start ---------------------------------------->
+import { ref, onMounted } from 'vue';
+import { ElMessage, ElBreadcrumb, ElBreadcrumbItem, ElPagination } from 'element-plus';
+import { ArrowRight } from '@element-plus/icons-vue'
+import { NuxtLink } from '#components';
+//0.加载页面依赖 end ---------------------------------------->
+
+//1.获得路由id start ---------------------------------------->
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+const route = useRoute();
+let cityid = route.query.cityid;
+let cityId = ref(0)
+cityId.value = parseFloat(cityid)
+
+//1.1 获得当前的路由id
+let routeId;
+let routeType;
+let navTitle = ref('')//二级导航标题
+let navCid = ref('')//二级导航id
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    navTitle.value = getRouteId.data.alias
+    navCid.value = getRouteId.data.category_id
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.2 获取父级栏目
+let parent_name = ref('');//父级名称
+let parent_id = ref('');//父级id
+let parent_pinyin = ref('');//父级拼音
+const getRoutePName = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRoutePName", getRoutePName);
+
+if (getRoutePName.code == 200) {
+    routeId = getRoutePName.data.category_id
+    parent_id.value = getRoutePName.data.category_id
+    parent_name.value = getRoutePName.data.alias
+    routeType = getRoutePName.data.type
+} else {
+    console.log("获得路由id出错!", getRoutePName.message)
+}
+//1.3 获取某个栏目
+const getParentId = await requestDataPromise('/web/getOneWebsiteCategory', {
+    method: 'GET',
+    query: {
+        'catid': parent_id.value,
+    },
+});
+console.log("getParentId", getParentId);
+
+if (getParentId.code == 200) {
+    parent_pinyin.value = getParentId.data.aLIas_pinyin
+} else {
+    console.log("获得路由id出错!", getParentId.message)
+}
+//1.获得路由id end ---------------------------------------->
+
+//2.选项卡 start ---------------------------------------->
+let showTabs = ref(1)
+let qhtabs = function (number) {
+    console.log(number)
+    showTabs.value = number
+}
+//2.选项卡 end ---------------------------------------->
+
+//3.广告 start ---------------------------------------->
+let adImg1 = ref({})
+let adImg2 = ref({})
+onMounted(async () => {
+    //从客户端获取行政职能部门 加快打开速度
+    const { $webUrl, $CwebUrl } = useNuxtApp();
+    //广告1
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_list_0001`
+    const responseAd1 = await fetch(url, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd1 = await responseAd1.json();
+    adImg1.value = resultAd1.data[0];
+
+    //广告2
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_list_0002`
+    const responseAd2 = await fetch(url2, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd2 = await responseAd2.json();
+    adImg2.value = resultAd2.data[0];
+})
+//3.广告 end ---------------------------------------->
+
+//4.页面数据 start ---------------------------------------->
+const secondNav = ref([]);
+let getSecondNav = async () => {
+    const listData = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            'placeid': 1,
+            'pid': parent_id.value,
+            'num': 20,
+            'type': 1
+        },
+    });
+    console.log('listData', listData);
+
+    if (listData.code == 200) {
+        secondNav.value = listData.data;
+    } else {
+        console.log("错误位置:获取二级栏目列表")
+    }
+}
+getSecondNav()
+
+// 获取商品数据列表 start--------------------------------------->
+const goodsList = ref()
+const page_goods = ref(1)
+const pageSize_goods = ref(20)
+const goodstotal = ref()
+
+let getshop = async () => {
+    let params = {
+        'catid': navCid.value,
+        'city_id': cityId.value,
+        'page': page_goods.value,
+        'pageSize': pageSize_goods.value,
+        'ismix': 1
+    }
+    if (cityId.value == undefined || cityId.value == '' || cityId.value == 'NaN') {
+        //删除变量params中的city_id参数
+        delete params.city_id
+    } else {
+        params.city_id = parseFloat(cityId.value)
+    }
+
+    const getGoodsList = await requestDataPromise('/web/getWebsiteshopList', {
+        method: 'GET',
+        query: params
+    });
+    console.log("获取数据列表goods", getGoodsList);
+
+    if (getGoodsList.code == 200) {
+        goodsList.value = getGoodsList.data.goods
+        goodstotal.value = getGoodsList.data.count
+    }
+}
+
+let getshop1 = async () => {
+    let params = {
+        'catid': navCid.value,
+        'page': page_goods.value,
+        'pageSize': pageSize_goods.value,
+        'ismix': 1
+    }
+
+    const getGoodsList = await requestDataPromise('/web/getWebsiteshopList', {
+        method: 'GET',
+        query: params
+    });
+    // console.log("获取数据列表goods", getGoodsList);
+
+    if (getGoodsList.code == 200) {
+        goodsList.value = getGoodsList.data.goods
+        goodstotal.value = getGoodsList.data.count
+    }
+
+}
+// getshop1()
+//4.4.1 监听cityid
+watch(() => route.query.cityid, (newVal, oldVal) => {
+    if (newVal != undefined) {
+        cityId.value = parseFloat(newVal)
+        getshop()
+    } else {
+        getshop1()
+    }
+}, {
+    deep: true,
+    immediate: true
+})
+
+
+// 获取商品数据 end----------------------------------------->
+
+//4.页面数据 end ---------------------------------------->
+
+//5.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': routeId
+    },
+});
+
+if (setData.code == 200) {
+    let seoTitle = setData.data.seo_title;
+    let seoDescription = setData.data.seo_description;
+    let seoKeywords = setData.data.seo_keywords;
+    let seoSuffix = setData.data.suffix;
+    let seoName = setData.data.website_name;
+
+    useSeoMeta({
+        title: seoTitle + "_" + seoSuffix,
+        meta: [
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("设置频道页SEO出错!", setData.message)
+}
+//5.设置seo信息 end---------------------------------------->
+</script>
+<style lang="less" scoped>
+@import url("@/assets/css/shop/goodsList.less");
+
+.empty {
+    width: 100%;
+    height: 300px;
+    line-height: 300px;
+    text-align: center;
+}
+
+.empty_img {
+    vertical-align: -30px;
+    margin-right: 20px;
+}
+
+.empty_text {
+    font-size: 26px;
+    color: #999;
+}
+
+.pagination {
+    height: 100px;
+    margin-top: 20px;
+}
+
+.pagination1 {
+    height: 100px;
+    margin-top: 20px;
+}
+</style>

+ 361 - 0
components/goods/subMenu.vue

@@ -0,0 +1,361 @@
+<template>
+    <!-- 地区选择 -->
+    <div class="shop_name_out">
+        <div class="shop_name_box clearfix">
+            <div class="shop_name">地区选择</div>
+            <div class="shop_name_right">
+                <div class="shop_name_in clearfix" ref="shop_name_parent">
+                    <div class=" clearfix" v-show="shop_name_num == 1">
+                        <NuxtLink :to="`/${targetSegment}/${shopNavOnePinyin}/list-1.html?cityid=${item.id}`"
+                            :title="item.name" v-for="item in provinceList1"
+                            :class="['shop_name_a', { 'shop_name_a_only': item.id == cityId }]">
+                            {{ item.abbreviation }}
+                        </NuxtLink>
+                    </div>
+                    <div class=" clearfix" v-show="shop_name_num == 2">
+                        <NuxtLink :class="['shop_name_a', { 'shop_name_a_only': item.id == cityId }]"
+                            :to="`/${targetSegment}/${shopNavOnePinyin}/list-1.html?cityid=${item.id}`"
+                            :title="item.name" v-for="item in provinceList2">
+                            {{ item.abbreviation }}
+                        </NuxtLink>
+                    </div>
+                    <div class=" clearfix" v-show="shop_name_num == 3">
+                        <NuxtLink :class="['shop_name_a', { 'shop_name_a_only': item.id == cityId }]"
+                            :to="`/${targetSegment}/${shopNavOnePinyin}/list-1.html?cityid=${item.id}`"
+                            :title="item.name" v-for="item in provinceList3">
+                            {{ item.abbreviation }}
+                        </NuxtLink>
+                    </div>
+                </div>
+                <div class="shop_name_btn hand"
+                    @click="shop_name_num >= shop_name_leng ? shop_name_num = 1 : shop_name_num++">
+                </div>
+            </div>
+        </div>
+    </div>
+    <!-- 地区选择 -->
+</template>
+
+<script setup>
+import { ref, onMounted, watch } from 'vue'
+
+//1.获得商城导航 start ---------------------------------------->
+//1.1 获得频道导航的id,并且标记导航
+//获得当前的完整路径
+// const fullPath = route.path;
+// //拆分,取出来中间这一段,然后提取数字部分
+const targetSegment = getRoutePath(1);
+// const segments = fullPath.split('/');
+// const targetSegment = segments[2];
+
+const navId = ref(0)//当前导航标记哪个
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    navId.value = parseInt(getRouteId.data.category_id)
+} else {
+    console.log("错误位置:通过url路径查询导航池id")
+}
+
+//1.2 获得商城导航
+const shopNav = ref("")
+const shopNavOnePinyin = ref("")//获得商城导航的第一个 作为默认的跳转链接
+let getShowNav = async () => {
+    const responseStatus = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            placeid: 0,
+            pid: navId.value,
+            num: 8,
+            type: 1
+        },
+    });
+    console.log("responseStatus", responseStatus);
+
+    shopNav.value = responseStatus.data
+    shopNavOnePinyin.value = responseStatus.data[0].aLIas_pinyin
+    console.log("shopNavOnePinyin", shopNavOnePinyin.value);
+
+}
+getShowNav();
+
+//1.3 标记当前选择的地区
+const route = useRoute();
+//获得详情id
+const cityId = ref(route.query.cityid)
+
+watch(route, () => {
+    cityId.value = route.query.cityid
+})
+
+
+
+//1.获得商城导航 end ---------------------------------------->
+
+//2.获得省列表 start ---------------------------------------->
+const provinceList1 = ref([]);//省列表1
+const provinceList2 = ref([]);//省列表2
+const provinceList3 = ref([]);//省列表3
+onMounted(async () => {
+    //获得所有的省
+    try {
+        const { $webUrl, $CwebUrl } = useNuxtApp();
+        const response = await fetch($webUrl + '/web/selectWebsiteArea', {
+            headers: {
+                'Content-Type': 'application/json',
+                'Userurl': $CwebUrl,
+                'Origin': $CwebUrl
+            }
+        });
+        const result = await response.json();
+        for (let index in result.data) {
+            if (index < 15) {
+                provinceList1.value.push(result.data[index])
+            } else if (index > 14 && index < 30) {
+                provinceList2.value.push(result.data[index])
+            } else if (index > 29) {
+                provinceList3.value.push(result.data[index])
+            }
+        }
+    } catch (error) {
+        console.error('获取行政区划数据失败:', error);
+    }
+
+
+})
+//2.获得商城导航 start ---------------------------------------->
+
+//3.地区滚动 start ---------------------------------------->
+// 地区选择
+const shop_name_num = ref(1)
+const shop_name_parent = ref(null)
+const shop_name_leng = ref(1)
+onMounted(() => {
+    const shop_name_son = shop_name_parent.value.querySelectorAll("div")
+    shop_name_leng.value = shop_name_son.length
+})
+//3.地区滚动 end ---------------------------------------->
+</script>
+
+<style lang="less" scoped>
+.shop_name_out {
+    margin-top: 20px;
+}
+
+.shop_name_box {
+    border-top: solid 1px #fff;
+
+    .shop_name_box_a {
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        font-size: 20px;
+    }
+
+    .shop_name {
+        float: left;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        position: relative;
+        z-index: 11;
+        text-align: center;
+        font-size: 20px;
+        background: #a91b33;
+        padding: 0px 14px;
+    }
+
+    .shop_name_right {
+        height: 40px;
+        border-bottom: 1px solid #E8E9EC;
+        margin-top: 4px;
+        background: #F8F8F8;
+        position: relative;
+        z-index: 2;
+    }
+
+    .shop_name_right::after {
+        content: '';
+        display: block;
+        position: absolute;
+        top: 0px;
+        right: 0px;
+        height: 100%;
+        width: 16px;
+        background: url(@/public/img/9.png) no-repeat 0px bottom #fff;
+        background-size: 100% auto;
+    }
+
+    .shop_name_btn {
+        width: 24px;
+        height: 24px;
+        float: right;
+        margin: 10px 22px 0px 0px;
+        background: url(@/public/img/8.png) no-repeat center center;
+        border-radius: 50%;
+        background-size: 100% 100%;
+    }
+}
+
+.shop_name_in {
+    float: left;
+    height: 40px;
+    width: 1046px;
+    float: left;
+    box-sizing: border-box;
+
+    .shop_name_a {
+        float: left;
+        height: 27px;
+        line-height: 27px;
+        color: #222;
+        font-size: 20px;
+        position: relative;
+        margin: 7px 14.5px 0;
+        padding: 0px 10px;
+    }
+
+    .shop_name_a::after {
+        content: '/';
+        display: block;
+        position: absolute;
+        top: 0px;
+        right: -18px;
+        height: 100%;
+        line-height: 27px;
+        color: #E9E9E9;
+        font-size: 20px;
+    }
+
+    .shop_name_a:nth-last-of-type(1)::after {
+        content: '';
+        display: none;
+    }
+
+    .shop_name_a_only {
+        background: #a91b33;
+        color: #fff;
+    }
+}
+
+.shop_name_out {
+    margin-top: 20px;
+}
+
+.shop_name_box {
+    border-top: solid 1px #fff;
+
+    .shop_name_box_a {
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        font-size: 20px;
+    }
+
+    .shop_name {
+        float: left;
+        height: 44px;
+        line-height: 44px;
+        color: #fff;
+        font-weight: bold;
+        position: relative;
+        z-index: 11;
+        text-align: center;
+        font-size: 20px;
+        background: #a91b33;
+        padding: 0px 14px;
+    }
+
+    .shop_name_right {
+        height: 40px;
+        border-bottom: 1px solid #E8E9EC;
+        margin-top: 4px;
+        background: #F8F8F8;
+        position: relative;
+        z-index: 2;
+    }
+
+    .shop_name_right::after {
+        content: '';
+        display: block;
+        position: absolute;
+        top: 0px;
+        right: 0px;
+        height: 100%;
+        width: 16px;
+        background: url(@/public/img/9.png) no-repeat 0px bottom #fff;
+        background-size: 100% auto;
+    }
+
+    .shop_name_btn {
+        width: 24px;
+        height: 24px;
+        float: right;
+        margin: 10px 22px 0px 0px;
+        background: url(@/public/img/8.png) no-repeat center center;
+        border-radius: 50%;
+        background-size: 100% 100%;
+    }
+}
+
+.shop_nav {
+    border: solid 1px #E9E9E9;
+    background: #fafafa;
+    margin-top: 20px;
+
+    .shop_nav_head {
+        float: left;
+        height: 28px;
+        width: 138px;
+        margin: 30px 52px 0px 25px;
+    }
+
+    .shop_nav_head_a {
+        display: block;
+        height: 28px;
+        width: 138px;
+        background: url(@/public/img/7.png) no-repeat left top;
+        background-size: 100% 100%;
+    }
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.shop_nav_in_a {
+    float: left;
+    height: 75px;
+    line-height: 75px;
+    color: #333;
+    font-size: 16px;
+    background: #f8f5f5;
+    width: 118px;
+    border-bottom: solid 5px #a91b33;
+    font-weight: bold;
+    margin: 5px 0;
+    text-align: center;
+}
+
+.shop_nav_in_a:nth-of-type(4) {
+    margin-right: 8px;
+}
+
+.shop_nav_in_a:hover {
+    color: #a91b33;
+}
+
+.shop_nav_in_a_active {
+    color: #a91b33;
+}
+</style>

+ 48 - 20
components/home/pageNavigation.vue

@@ -13,10 +13,17 @@
                     </div>
                 </div>
                 <ul class="navigationOne">
-                    <li v-for="item in navigation1">
-                        <NuxtLink 
-                            :href="getLinkPath(item)" 
-                            :title="item.alias"
+                    <li v-for="item in navigation1"
+                        @mousemove="item.alias == '供求信息' ? showTwo = true : showTwo = false">
+                        <NuxtLink :href="getLinkPath(item)" :title="item.alias"
+                            :target="item.is_url == 1 ? '_blank' : '_self'">
+                            {{ item.alias }}
+                        </NuxtLink>
+                    </li>
+                </ul>
+                <ul class="navigationTwo" v-if="showTwo" @mouseleave="showTwo = false">
+                    <li v-for="(item, index) in secNav" :key="index">
+                        <NuxtLink :href="`/gongqiuxinxi/${item.aLIas_pinyin}/index.html`" :title="item.alias"
                             :target="item.is_url == 1 ? '_blank' : '_self'">
                             {{ item.alias }}
                         </NuxtLink>
@@ -30,9 +37,7 @@
                 <ul class="part2_left">
                     <li>农资商城</li>
                     <li class="part2_navList" v-for="item in navigation2">
-                        <NuxtLink 
-                            :href="getLinkPath(item)" 
-                            :title="item.alias"
+                        <NuxtLink :href="getLinkPath(item)" :title="item.alias"
                             :target="item.is_url == 1 ? '_blank' : '_self'">
                             {{ item.alias }}
                         </NuxtLink>
@@ -40,9 +45,7 @@
                 </ul>
                 <ul class="part2_right">
                     <li class="part2_right_navList" v-for="(item, index) in navigation3">
-                        <NuxtLink 
-                            :href="getLinkPath(item)" 
-                            :title="item.alias"
+                        <NuxtLink :href="getLinkPath(item)" :title="item.alias"
                             :target="item.is_url == 1 ? '_blank' : '_self'">
                             {{ item.alias }}
                         </NuxtLink>
@@ -56,16 +59,16 @@
             <div class="inner">
                 <div class="deepServer_left">
                     <div class="serverTitle">
-                        <NuxtLink href="/" >
+                        <NuxtLink href="/">
                             网站首页
                         </NuxtLink>
                     </div>
                     <el-checkbox-group v-model="checkList">
                         <el-checkbox label="产品" value="1" disabled />
-                        <el-checkbox label="企业" value="2" disabled/>
-                        <el-checkbox label="人才" value="3" disabled/>
-                        <el-checkbox label="展会" value="4" disabled/>
-                        <el-checkbox label="资讯" value="5" checked disabled/>
+                        <el-checkbox label="企业" value="2" disabled />
+                        <el-checkbox label="人才" value="3" disabled />
+                        <el-checkbox label="展会" value="4" disabled />
+                        <el-checkbox label="资讯" value="5" checked disabled />
                     </el-checkbox-group>
                     <!-- <div class="serverTitle1">
                         <a href="">
@@ -89,7 +92,8 @@
 
 <script setup>
 //1.获取导航菜单 start ---------------------------------------->
-import { ElCheckbox, ElCheckboxGroup,ElMessage  } from 'element-plus'
+import { ElCheckbox, ElCheckboxGroup, ElMessage } from 'element-plus'
+let showTwo = ref(false);
 
 //第一行导航菜单 10个
 const navigation1 = ref([]);
@@ -117,7 +121,7 @@ async function getNavigation2() {
         query: {
             'pid': 0,
             'num': 10,
-            'placeid': 28
+            'placeid': 29
         },
     });
     navigation2.value = mkdata.data;
@@ -136,6 +140,30 @@ async function getNavigation3() {
     navigation3.value = mkdata.data;
 }
 getNavigation3();
+
+// 1.4 获取供求信息二级导航
+//引入导航
+const { $pageNav } = useNuxtApp();
+const pid = $pageNav[14];
+console.log('供求信息二级栏目', pid);
+
+
+const secNav = ref([]);
+async function getNavigation4() {
+    const mkdata = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            'pid': pid,
+            'num': 2,
+            'placeid': 1,
+            'type': 1
+        },
+    });
+    console.log("供求信息二级栏目", mkdata.data);
+
+    secNav.value = mkdata.data;
+}
+getNavigation4();
 //1.获取导航菜单 end ---------------------------------------->
 
 //2.搜索 start ---------------------------------------->
@@ -145,9 +173,9 @@ const checkList = ref([]);// 多选框
 const inputValue = ref("") //关键词搜索
 //2.1跳转到搜索页面
 let goToPrimary = async () => {
-    if (inputValue.value=="") {
+    if (inputValue.value == "") {
         ElMessage.error('搜索项不能为空!')
-    }else{
+    } else {
         const route = `/search/search?keyword=${inputValue.value}`;
         window.location.href = route;
     }
@@ -155,7 +183,7 @@ let goToPrimary = async () => {
 
 
 onMounted(async () => {
-        
+
 })
 //2.搜索 end ---------------------------------------->
 

+ 595 - 0
components/news/class.vue

@@ -0,0 +1,595 @@
+<template>
+    <div>
+        <HomePageHead></HomePageHead>
+        <HomePageNavigation></HomePageNavigation>
+        <HomeSecondaryHeading :titleData="pageData" :pinyinid="routeId"></HomeSecondaryHeading>
+        <!-- 频道页 -->
+        <main class="index_main">
+            <section class="channel_1 clearfix">
+                <div class="channel_1_box clearfix">
+                    <div class="roll_1_box clearfix">
+                        <HomeSwiperNzgx :imgData="pageData[0].data"></HomeSwiperNzgx>
+                    </div>
+                </div>
+                <div class="channel_2_box clearfix">
+                    <div class="channel_ul_1 clearfix">
+                        <NuxtLink class="channel_ul_1_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="item in pageData[0].data2" :key="item.id"
+                            :target="item.islink == 1 ? '_blank' : '_self'">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                </div>
+            </section>
+            <!-- 广告 1-->
+            <HomeAdvertising :imgurl="adImg1"></HomeAdvertising>
+            <section class="channel_2 clearfix">
+                <div class="channel_1_box" v-if="pageData.length > 1">
+                    <div class="channel_head_box clearfix">
+                        <div class="channel_head_box_left">
+                            <div class="channel_head_left_a_btn">
+                                <NuxtLink class="channel_head_left_a channel_head_left_a_only"
+                                    :href="getLinkPath(pageData[1])" v-if="pageData[1]" :title="pageData[1].alias">
+                                    {{ pageData[1].alias }}
+                                </NuxtLink>
+                            </div>
+                        </div>
+                    </div>
+                    <div class=" clearfix">
+                        <div class="channel_3_box clearfix">
+                            <div class="channel_ul_2 clearfix" v-if="pageData[1]">
+                                <NuxtLink class="channel_ul_2_a dot1" :href="getLinkPathDetail(item)"
+                                    :title="item.title" v-for="item in pageData[1].data3" :key="item.id"
+                                    :target="item.islink == 1 ? '_blank' : '_self'">
+                                    {{ item.title }}
+                                </NuxtLink>
+                            </div>
+                        </div>
+                        <div class="channel_4_box clearfix">
+                            <div class="channel_img_ul_1">
+                                <div class="channel_img_ul_1_li" v-if="pageData[1]">
+                                    <NuxtLink class="channel_img_ul_1_li_a" :href="getLinkPathDetail(item)"
+                                        :title="item.title" v-for="item in pageData[1].data" :key="item.id"
+                                        :target="item.islink == 1 ? '_blank' : '_self'">
+                                        <img class="channel_img_ul_1_li_img" :src="item.imgurl" alt="item.imgurl">
+                                        <div class="channel_img_ul_1_li_dot2 dot2">
+                                            {{ item.title }}
+                                        </div>
+                                    </NuxtLink>
+                                </div>
+                            </div>
+                            <div class="channel_img_ul_even_1 clearfix" v-if="pageData[1]">
+                                <div class="channel_img_ul_even_1_li" v-for="item in pageData[1].data2">
+                                    <NuxtLink class="channel_img_ul_even_1_li_a" :href="getLinkPathDetail(item)"
+                                        :title="item.title" :key="item.id"
+                                        :target="item.islink == 1 ? '_blank' : '_self'">
+                                        <img class="channel_img_ul_even_1_li_img" :src="item.imgurl" alt="item.imgurl">
+                                        <div class="channel_img_ul_even_1_li_dot2 dot2">
+                                            {{ item.title }}
+                                        </div>
+                                    </NuxtLink>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="channel_2_box" v-if="pageData.length > 2">
+                    <div class="channel_head_box clearfix">
+                        <div class="channel_head_box_left">
+                            <div class="channel_head_left_a_btn">
+                                <NuxtLink class="channel_head_left_a channel_head_left_a_only"
+                                    :href="getLinkPath(pageData[2])" v-if="pageData[2]" :title="pageData[2].alias">
+                                    {{ pageData[2].alias }}
+                                </NuxtLink>
+                            </div>
+                        </div>
+                        <div class="channel_head_box_right">
+                            <NuxtLink class="channel_head_box_right_1_a" :href="getLinkPath(pageData[2])"
+                                v-if="pageData[2]" :title="pageData[2].alias">
+                                栏目简介
+                            </NuxtLink>
+                        </div>
+                    </div>
+                    <div class=" clearfix">
+                        <div class="channel_even_img_ul_2 clearfix" v-if="pageData[2]">
+                            <div class="channel_even_img_ul_2_li" v-for="item in pageData[2].data">
+                                <NuxtLink class="channel_even_img_ul_2_a" :href="getLinkPathDetail(item)"
+                                    :title="item.title" :key="item.id" :target="item.islink == 1 ? '_blank' : '_self'">
+                                    <img class="channel_even_img_ul_2_li_img" :src="item.imgurl" alt="item.title">
+                                    <div class="channel_even_img_ul_2_dot1 dot1">{{ item.title }}</div>
+                                </NuxtLink>
+                            </div>
+                        </div>
+                        <div class="channel_ul_3 clearfix" v-if="pageData[2]">
+                            <NuxtLink class="channel_ul_3_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                                v-for="item in pageData[2].data2" :key="item.id"
+                                :target="item.islink == 1 ? '_blank' : '_self'">
+                                {{ item.title }}
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <section class="channel_3 clearfix">
+                <div class="channel_1_box" v-if="pageData.length > 3">
+                    <div class="channel_head_box clearfix">
+                        <div class="channel_head_box_left">
+                            <div class="channel_head_left_a_btn">
+                                <NuxtLink class="channel_head_left_a channel_head_left_a_only"
+                                    :href="getLinkPath(pageData[3])" v-if="pageData[3]" :title="pageData[3].alias">
+                                    {{ pageData[3].alias }}
+                                </NuxtLink>
+                            </div>
+                        </div>
+                        <div class="channel_head_box_right">
+                            <NuxtLink class="channel_head_box_right_1_a" :href="getLinkPath(pageData[3])"
+                                v-if="pageData[3]" :title="pageData[3].alias">
+                                栏目简介
+                            </NuxtLink>
+                        </div>
+                    </div>
+                    <div class=" clearfix">
+                        <div class="channel_ul_4 clearfix" v-if="pageData[3]">
+                            <NuxtLink class="channel_ul_4_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                                v-for="item in pageData[3].data2" :key="item.id"
+                                :target="item.islink == 1 ? '_blank' : '_self'">
+                                {{ item.title }}
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="channel_2_box" v-if="pageData.length > 4">
+                    <div class="channel_head_box clearfix">
+                        <div class="channel_head_box_left">
+                            <div class="channel_head_left_a_btn">
+                                <NuxtLink class="channel_head_left_a channel_head_left_a_only"
+                                    :href="getLinkPath(pageData[4])" v-if="pageData[4]" :title="pageData[4].alias">
+                                    {{ pageData[4].alias }}
+                                </NuxtLink>
+                            </div>
+                        </div>
+                        <div class="channel_head_box_right">
+                            <NuxtLink class="channel_head_box_right_1_a" :href="getLinkPath(pageData[4])"
+                                v-if="pageData[4]" :title="pageData[4].alias">
+                                栏目简介
+                            </NuxtLink>
+                        </div>
+                    </div>
+                    <div class="channel_img_ul_2">
+                        <div class="channel_img_ul_2_li" v-if="pageData[4]">
+                            <NuxtLink class="channel_img_ul_2_li_a" :href="getLinkPathDetail(item)" :title="item.title"
+                                v-for="item in pageData[4].data" :key="item.id"
+                                :target="item.islink == 1 ? '_blank' : '_self'">
+                                <img class="channel_img_ul_2_li_img" :src="item.imgurl" alt="item.imgurl">
+                                <div class="channel_img_ul_2_li_dot2 dot2">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 广告 2-->
+            <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
+            <section class="channel_4 clearfix">
+                <div class="channel_1_box">
+                    <div class="channel_head_box clearfix" v-if="pageData.length > 5">
+                        <div class="channel_head_box_left">
+                            <div class="channel_head_left_a_btn">
+                                <NuxtLink class="channel_head_left_a channel_head_left_a_only"
+                                    :href="getLinkPath(pageData[5])" v-if="pageData[5]" :title="pageData[5].alias">
+                                    {{ pageData[5].alias }}
+                                </NuxtLink>
+                            </div>
+                        </div>
+                        <div class="channel_head_box_right">
+                            <NuxtLink class="channel_head_box_right_1_a" :href="getLinkPath(pageData[5])"
+                                v-if="pageData[5]" :title="pageData[5].alias">
+                                栏目简介
+                            </NuxtLink>
+                        </div>
+                    </div>
+                    <div class=" clearfix" v-if="pageData.length > 5">
+                        <div class="channel_3_box clearfix">
+                            <div class="channel_img_ul_3_ul boxheight2">
+                                <div class="channel_img_ul_3_li" v-if="pageData[5]">
+                                    <NuxtLink class="channel_img_ul_3_li_a" :href="getLinkPathDetail(item)"
+                                        :title="item.title" v-for="item in pageData[5].data" :key="item.id"
+                                        :target="item.islink == 1 ? '_blank' : '_self'">
+                                        <img class="channel_img_ul_3_li_img" :src="item.imgurl" alt="item.title">
+                                        <div class="channel_img_ul_3_li_dot1 dot1">
+                                            {{ item.title }}
+                                        </div>
+                                    </NuxtLink>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="channel_4_box clearfix">
+                            <div class="channel_ul_5 clearfix" v-if="pageData[5]">
+                                <NuxtLink class="channel_ul_5_a dot1" :href="getLinkPathDetail(item)"
+                                    :title="item.title" v-for="item in pageData[5].data2" :key="item.id"
+                                    :target="item.islink == 1 ? '_blank' : '_self'">
+                                    {{ item.title }}
+                                </NuxtLink>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="channel_head_box clearfix channel_head_box_2" v-if="pageData.length > 6">
+                        <div class="channel_head_box_left">
+                            <div class="channel_head_left_a_btn">
+                                <NuxtLink class="channel_head_left_a channel_head_left_a_only"
+                                    :href="getLinkPath(pageData[6])" v-if="pageData[6]" :title="pageData[6].alias">
+                                    {{ pageData[6].alias }}
+                                </NuxtLink>
+                            </div>
+                        </div>
+                        <div class="channel_head_box_right">
+                            <NuxtLink class="channel_head_box_right_1_a" :href="getLinkPath(pageData[6])"
+                                v-if="pageData[6]" :title="pageData[6].alias">
+                                栏目简介
+                            </NuxtLink>
+                        </div>
+                    </div>
+                    <div class=" clearfix" v-if="pageData.length > 6">
+                        <div class="channel_3_box clearfix">
+                            <div class="channel_img_ul_4_ul">
+                                <div class="channel_img_ul_4_li" v-if="pageData[6]">
+                                    <NuxtLink class="channel_img_ul_4_li_a" :href="getLinkPathDetail(item)"
+                                        :title="item.title" v-for="item in pageData[6].data" :key="item.id"
+                                        :target="item.islink == 1 ? '_blank' : '_self'">
+                                        <img class="channel_img_ul_4_li_img" :src="item.imgurl" alt="item.title">
+                                        <div class="channel_img_ul_4_li_dot1 dot1">
+                                            {{ item.title }}
+                                        </div>
+                                    </NuxtLink>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="channel_4_box clearfix">
+                            <div class="channel_ul_6 clearfix" v-if="pageData[6]">
+                                <NuxtLink class="channel_ul_6_a dot1" :href="getLinkPathDetail(item)"
+                                    :title="item.title" v-for="item in pageData[6].data2" :key="item.id"
+                                    :target="item.islink == 1 ? '_blank' : '_self'">
+                                    {{ item.title }}
+                                </NuxtLink>
+                            </div>
+                        </div>
+                    </div>
+                </div>
+                <div class="channel_2_box" v-if="pageData.length > 7">
+                    <div class="channel_head_box clearfix">
+                        <div class="channel_head_box_left">
+                            <div class="channel_head_left_a_btn">
+                                <NuxtLink class="channel_head_left_a channel_head_left_a_only"
+                                    :href="getLinkPath(pageData[7])" v-if="pageData[7]" :title="pageData[7].alias">
+                                    {{ pageData[7].alias }}
+                                </NuxtLink>
+                            </div>
+                        </div>
+                        <div class="channel_head_box_right">
+                            <NuxtLink class="channel_head_box_right_1_a" :href="getLinkPath(pageData[7])"
+                                v-if="pageData[7]" :title="pageData[7].alias">
+                                栏目简介
+                            </NuxtLink>
+                        </div>
+                    </div>
+                    <div class="boxheight1 clearfix">
+                        <div class="channel_img_ul_5_ul">
+                            <div class="channel_img_ul_5_li" v-if="pageData[7]">
+                                <NuxtLink class="channel_img_ul_5_li_a" :href="getLinkPathDetail(item)"
+                                    :title="item.title" v-for="item in pageData[7].data" :key="item.id"
+                                    :target="item.islink == 1 ? '_blank' : '_self'">
+                                    <img class="channel_img_ul_5_li_img" :src="item.imgurl" alt="item.title">
+                                    <div class="channel_img_ul_5_li_dot1 dot1">{{ item.title }}</div>
+                                </NuxtLink>
+                            </div>
+                        </div>
+                        <div class="index_ul_7 clearfix" v-if="pageData[7]">
+                            <NuxtLink class="index_ul_7_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                                v-for="item in pageData[7].data2" :key="item.id"
+                                :target="item.islink == 1 ? '_blank' : '_self'">
+                                {{ item.title }}
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </section>
+        </main>
+        <!-- 页脚部分 -->
+        <HomeFoot1></HomeFoot1>
+    </div>
+</template>
+
+<script setup>
+//0.加载页面依赖 start ---------------------------------------->
+import { ref, onMounted } from 'vue';
+import { ElMessage } from 'element-plus';
+//0.加载页面依赖 end ---------------------------------------->
+
+//1.获得路由id start ---------------------------------------->
+const targetSegment = getRoutePath(1);
+//1.1 获得当前的路由id
+let routeId;
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log('mkdataRouteId', getRouteId);
+
+if (getRouteId.code == 200) {
+    routeId = getRouteId.data.category_id
+    console.log('mkdataRouteId1111', routeId);
+
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.获得路由id end ---------------------------------------->
+
+//2.选项卡 start ---------------------------------------->
+let showTabs = ref(1)
+let qhtabs = function (number) {
+    console.log(number)
+    showTabs.value = number
+}
+//2.选项卡 end ---------------------------------------->
+
+//3.广告 start ---------------------------------------->
+let adImg1 = ref({})
+let adImg2 = ref({})
+let adImg3 = ref({})
+let adImg4 = ref({})
+onMounted(async () => {
+    //从客户端获取行政职能部门 加快打开速度
+    const { $webUrl, $CwebUrl } = useNuxtApp();
+    //广告1
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_category_0001`
+    const responseAd1 = await fetch(url, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd1 = await responseAd1.json();
+    adImg1.value = resultAd1.data[0];
+
+    //广告2
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_category_0002`
+    const responseAd2 = await fetch(url2, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd2 = await responseAd2.json();
+    adImg2.value = resultAd2.data[0];
+
+    //广告3
+    let url3 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_category_0003`
+    const responseAd3 = await fetch(url3, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd3 = await responseAd3.json();
+    adImg3.value = resultAd3.data[0];
+
+    //广告4
+    let url4 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_category_0004`
+    const responseAd4 = await fetch(url4, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd4 = await responseAd4.json();
+    adImg4.value = resultAd4.data[0];
+})
+//3.广告 end ---------------------------------------->
+
+//4.页面数据 start ---------------------------------------->
+const pageData = ref([
+    //示例:
+    // {
+    //     id: 1, 
+    //     title: "", //该导航的标题
+    //     data: [], //数据1
+    //     data1: [], //数据2
+    //     data2: [], //数据3
+    //     data3: [], //数据4
+    //     data4: [], //数据5
+    //     category_id1: "",  //子导航id1
+    //     category_id2: "", 
+    //     category_id3: "",
+    //     category_id4: "",
+    //     title1: "", //子导航标题1
+    //     title2: "",
+    //     title3: "",
+    //     title4: "",
+    //     cid: "" //该导航的id
+    // },
+])
+
+//4.1 获取所有导航
+try {
+    const navigateData = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            'placeid': 1,
+            'pid': routeId,
+            'num': 20
+        },
+    });
+    if (navigateData.code == 200) {
+        // 遍历可用的导航池放到页面中
+        for (let index in navigateData.data) {
+            let data = {
+                title: navigateData.data[index].name,
+                cid: navigateData.data[index].category_id,
+                children_count: navigateData.data[index].children_count,
+                alias: navigateData.data[index].alias,
+                aLIas_pinyin: targetSegment + "/" + navigateData.data[index].aLIas_pinyin,
+                data: [],
+                data1: [],
+                data2: [],
+                data3: [],
+                data4: [],
+                category_id1: "",
+                category_id2: "",
+                category_id3: "",
+                category_id4: "",
+                title1: "",
+                title2: "",
+                title3: "",
+                title4: ""
+            };
+            if (navigateData.data[index].is_url == 1) {
+                // 处理 URL 的逻辑
+            } else {
+                //每个页面最多8个模块
+                pageData.value.push(data);
+            }
+
+        }
+        console.log("mkdata导航池加载完毕", pageData.value);
+
+        //导航池加载完毕,开始申请模块数据
+        let getJson = [
+            // { "parent": routeId + ",0,0", "child": pageData.value[0].cid + ",4,9" },//模块1 顶部没有标题的那个
+            // { "parent": routeId + ",0,0", "child": pageData.value[1].cid + ",3,11" },//模块2
+            // { "parent": routeId + ",0,0", "child": pageData.value[2].cid + ",2,7" },//模块3
+            // { "parent": routeId + ",0,0", "child": pageData.value[3].cid + ",0,8" },//模块4
+            // { "parent": routeId + ",0,0", "child": pageData.value[4].cid + ",1,0" },//模块5
+            // { "parent": routeId + ",0,0", "child": pageData.value[5].cid + ",1,6" },//模块6
+            // { "parent": routeId + ",0,0", "child": pageData.value[6].cid + ",1,6" },//模块7
+            // { "parent": routeId + ",0,0", "child": pageData.value[7].cid + ",1,7" },//模块8
+        ]
+        for (let i = 0; i < pageData.value.length; i++) {
+            if (i == 0) {
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",4,9" });//模块1 
+            } else if (i == 1) {
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",3,11" });//模块2 
+            } else if (i == 2) {
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",2,7" });//模块3 
+            } else if (i == 3) {
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",0,8" });//模块4 
+            } else if (i == 4) {
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",1,0" });//模块5
+            } else if (i == 5) {
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",1,6" });//模块6
+            } else if (i == 6) {
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",1,6" });//模块7
+            } else if (i == 7) {
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",1,7" });//模块8 
+            }
+        }
+        let jsonString = JSON.stringify(getJson);
+        console.log('mkdatajsonString', jsonString);
+
+        getPageAllData(jsonString);
+
+    } else {
+        console.log("错误:渲染8个模块环节出错,请检查是否存在没有数据的模块!")
+    }
+} catch (error) {
+    console.log("错误:导航池渲染执行接口出错!请检查频道页渲染的模块数据是否完整!")
+}
+
+
+async function getPageAllData(jsonString) {
+    const mkdata = await requestDataPromise('/web/getWebsiteAllArticle', {
+        method: 'GET',
+        query: {
+            'id': jsonString
+        },
+    });
+    console.log('mkdata', mkdata.data);
+    if (mkdata.code == 200) {
+        if (mkdata.data.length > 0) {
+            //模块1 顶部大图和列表
+            pageData.value[0].data = mkdata.data[0].child.imgnum;
+            pageData.value[0].data2 = mkdata.data[0].child.textnum;
+        }
+        if (mkdata.data.length > 1) {
+            //模块2
+            pageData.value[1].data3 = mkdata.data[1].child.textnum;
+            for (let index in mkdata.data[1].child.imgnum) {
+                if (index < 1) {
+                    pageData.value[1].data.push(mkdata.data[1].child.imgnum[index]);
+                } else {
+                    pageData.value[1].data2.push(mkdata.data[1].child.imgnum[index]);
+                }
+            }
+        }
+        if (mkdata.data.length > 2) {
+            //模块3
+            pageData.value[2].data = mkdata.data[2].child.imgnum;
+            pageData.value[2].data2 = mkdata.data[2].child.textnum;
+        }
+        if (mkdata.data.length > 3) {
+            //模块4
+            pageData.value[3].data = mkdata.data[3].child.imgnum;
+            pageData.value[3].data2 = mkdata.data[3].child.textnum;
+        }
+        if (mkdata.data.length > 4) {
+            //模块5
+            pageData.value[4].data = mkdata.data[4].child.imgnum;
+        }
+        if (mkdata.data.length > 5) {
+            //模块6
+            pageData.value[5].data = mkdata.data[5].child.imgnum;
+            pageData.value[5].data2 = mkdata.data[5].child.textnum;
+        }
+        if (mkdata.data.length > 6) {
+            //模块7
+            pageData.value[6].data = mkdata.data[6].child.imgnum;
+            pageData.value[6].data2 = mkdata.data[6].child.textnum;
+        }
+        if (mkdata.data.length > 7) {
+            //模块8
+            pageData.value[7].data = mkdata.data[7].child.imgnum;
+            pageData.value[7].data2 = mkdata.data[7].child.textnum;
+        }
+
+    } else {
+        ElMessage.error(mkdata.message)
+    }
+}
+//4.页面数据 end ---------------------------------------->
+
+//5.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': routeId
+    },
+});
+
+if (setData.code == 200) {
+    let seoTitle = setData.data.seo_title;
+    let seoDescription = setData.data.seo_description;
+    let seoKeywords = setData.data.seo_keywords;
+    let seoSuffix = setData.data.suffix;
+    let seoName = setData.data.website_name;
+
+    useSeoMeta({
+        title: seoTitle + "_" + seoSuffix,
+        meta: [
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("设置频道页SEO出错!", setData.message)
+}
+//5.设置seo信息 end---------------------------------------->
+</script>
+
+<style lang="less" scoped>
+@import '@/assets/css/class.less';
+</style>

+ 250 - 0
components/news/detail.vue

@@ -0,0 +1,250 @@
+<template>
+    <!-- 页面头部 -->
+    <HomePageHead></HomePageHead>
+    <!-- 导航栏 -->
+    <HomePageNavigation></HomePageNavigation>
+    <!-- 列表页广告一 -->
+    <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
+
+    <!-- 资讯列表 -->
+    <div class="newsDetail">
+        <div class="inner">
+            <div class="innerLeft">
+                <!-- 面包屑导航 -->
+                <div class="breadcrumb">
+                    <div class="inner">
+                        <span class="location">当前位置:</span>
+                        <el-breadcrumb :separator-icon="ArrowRight">
+                            <el-breadcrumb-item>
+                                <NuxtLink to="/">首页</NuxtLink>
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item v-if="parent_name != ''">
+                                <NuxtLink :to="`/${parent_pinyin}/index.html`"> {{ parent_name }}</NuxtLink>
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item>{{ getTitleLength(routeNewsTtitle, 20) }}</el-breadcrumb-item>
+                        </el-breadcrumb>
+                    </div>
+                </div>
+                <div class="LeftTop">
+                    <h1>{{ newsDetail.title }}</h1>
+                    <p>
+                        来源: <span>{{ newsDetail.copyfrom }}</span>
+                        作者: <span>{{ newsDetail.author }}</span>
+                        发布时间: <span>{{ time }}</span>
+                    </p>
+                </div>
+                <div class="leftBottom" v-html="newsDetail.content" v-if="newsDetail.content" @click="openPreview">
+                </div>
+                <div v-if="previewVisible" class="preview-modal" @click="closePreview">
+                    <img :src="selectedImage" alt="Preview">
+                </div>
+                <!-- 免责声明: -->
+                <div class="disclaimer" v-if="newsDetail.copyfrom != '本网'">
+                    <p>原文链接:{{ newsDetail.fromurl }}</p>
+                    <p>[免责声明]本文来源于网络转载,仅供学习交流使用,不构成商业目的。 版权归原作者所有,如涉及作品内容,版权和其他问题,请在30日与本网联系,我们将第一时间处理。</p>
+                </div>
+                <div v-if="articleChoice">
+                    <HomeSurveyvote></HomeSurveyvote>
+                </div>
+            </div>
+            <div class="innerRight">
+                <!-- 热点资讯1 -->
+                <div class="hotList1">
+                    <DetailHotNews></DetailHotNews>
+                </div>
+                <!-- 热点资讯2 -->
+                <div class="hotList2">
+                    <DetailHotNews2></DetailHotNews2>
+                </div>
+            </div>
+        </div>
+    </div>
+
+    <!-- 列表页广告二 -->
+    <HomeTopTen :imgurl="adImg2" v-if="adImg2"></HomeTopTen>
+    <!-- 页面底部 -->
+    <HomeFoot1></HomeFoot1>
+</template>
+
+<script setup>
+//1.页面依赖 start ---------------------------------------->
+import { onMounted } from 'vue'
+import { ElBreadcrumb, ElBreadcrumbItem } from 'element-plus'
+import { ArrowRight } from '@element-plus/icons-vue'
+//1.页面依赖 end ---------------------------------------->
+
+//2.页面路径 start ---------------------------------------->
+const targetSegment = getRoutePath(1);
+let routeId;
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+if (getRouteId.code == 200) {
+    routeId = getRouteId.data.category_id
+} else {
+    console.log("错误位置:获得页面路径")
+}
+//2.页面路径 start ---------------------------------------->
+
+//3.面包屑 start ---------------------------------------->
+const route = useRoute();
+const articleId = parseInt(route.params.id); //获得该页面的id
+
+//3.1 获得父级栏目的名称、id
+const parent_name = ref([]);
+const parent_id = ref([]);
+const parent_pinyin = ref("");
+const parent_children_count = ref(0)
+let getParentNav = async () => {
+    const listData = await requestDataPromise('/web/getOneWebsiteCategory', {
+        method: 'GET',
+        query: {
+            'catid': routeId
+        },
+    });
+    if (listData.code == 200) {
+
+        console.log(778899)
+        console.log(listData.data)
+        parent_name.value = listData.data.alias;
+        parent_id.value = listData.data.parent_id;
+        parent_pinyin.value = listData.data.aLIas_pinyin;
+        parent_children_count.value = listData.data.children_count;
+    } else {
+        console.log("错误位置:获取面包屑导航")
+    }
+}
+getParentNav();
+//3.页面依赖 end ---------------------------------------->
+
+//4.页面数据 start ---------------------------------------->
+//4.1 资讯详情
+const newsDetail = ref({})
+const routeNewsTtitle = ref("");
+//4.2 发布日期
+const time = ref("");
+//4.3 路径
+const routLevelTitle = ref("");
+const routLevelId = ref("");
+//4.4 是否展示投票
+const articleChoice = ref(false);
+//4.5 获取详情
+async function getPageData() {
+    const mkdata = await requestDataPromise('/web/selectWebsiteArticleInfo', {
+        method: 'GET',
+        query: {
+            'articleid': articleId
+        },
+    });
+    if (mkdata.code == 200) {
+        //判断是否显示投票
+        if (mkdata.data.is_survey == 1) {
+            console.log("本篇文章含有投票!")
+            articleChoice.value = true;
+
+        }
+        //获取内容
+        newsDetail.value = mkdata.data;
+        //获取路径
+        routLevelTitle.value = newsDetail.value.cat_name;
+        routLevelId.value = newsDetail.value.category_id;
+        //获取发布时间
+        time.value = newsDetail.value.updated_at.split(' ')[0];
+        //修正标题长度
+        if (newsDetail.value.title.length >= 30) {
+            routeNewsTtitle.value = newsDetail.value.title.substr(0, 30) + "...";
+        } else {
+            routeNewsTtitle.value = newsDetail.value.title
+        }
+    } else {
+        console.log("错误位置:获取详情内容")
+    }
+}
+getPageData();
+//4.页面数据 end ---------------------------------------->
+
+//5.广告 start ---------------------------------------->
+let adImg1 = ref([]);
+let adImg2 = ref([]);
+onMounted(async () => {
+    const { $webUrl, $CwebUrl } = useNuxtApp();
+    //广告1
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0001`
+    const responseAd1 = await fetch(url, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd1 = await responseAd1.json();
+    adImg1.value = resultAd1.data[0];
+
+    //广告2
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0002`
+    const responseAd2 = await fetch(url2, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd2 = await responseAd2.json();
+    adImg2.value = resultAd2.data[0];
+})
+//5.广告 end ---------------------------------------->
+
+//6.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/selectWebsiteArticleInfo', {
+    method: 'GET',
+    query: {
+        'articleid': articleId
+    },
+});
+if (setData.code == 200) {
+    let seoTitle = setData.data.title;
+    let seoDescription = setData.data.introduce;
+    let seoKeywords = setData.data.keyword;
+    let seoSuffix = setData.data.suffix;
+    let seoName = setData.data.website_name;
+
+    useSeoMeta({
+        title: seoTitle + "_" + seoName + "_" + seoSuffix,
+        meta: [
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    console.log("错误位置:设置详情页面SEO数据")
+    console.log("后端错误反馈:", setData.message)
+    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+}
+//6.设置seo信息 end---------------------------------------->
+
+
+
+//8.页面图片放大 start---------------------------------------->
+const previewVisible = ref(false)
+const selectedImage = ref(' ')
+
+const openPreview = (event) => {
+    if (event.target.tagName === 'IMG') {
+        selectedImage.value = event.target.src;
+        previewVisible.value = true;
+    }
+}
+const closePreview = () => {
+    previewVisible.value = false;
+}
+//8.页面图片放大 end---------------------------------------->
+</script>
+
+<style lang="less" scoped>
+@import url('@/assets/css/detail.less');
+</style>

+ 253 - 0
components/news/detail_sec.vue

@@ -0,0 +1,253 @@
+<template>
+    <!-- 页面头部 -->
+    <HomePageHead></HomePageHead>
+    <!-- 导航栏 -->
+    <HomePageNavigation></HomePageNavigation>
+    <!-- 列表页广告一 -->
+    <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
+    <!-- 资讯列表 -->
+    <div class="newsDetail">
+        <div class="inner">
+            <div class="innerLeft">
+                <!-- 面包屑导航 -->
+                <div class="breadcrumb">
+                    <div class="inner">
+                        <span class="location">当前位置:</span>
+                        <el-breadcrumb :separator-icon="ArrowRight">
+                            <el-breadcrumb-item>
+                                <NuxtLink to="/">首页</NuxtLink>
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item v-if="parent_name != ''">
+                                <NuxtLink :to="`/${parent_pinyin}/index.html`"> {{ parent_name }}</NuxtLink>
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item>
+                                <NuxtLink :to="`list-1.html`"> {{ routLevelTitle }}</NuxtLink>
+                            </el-breadcrumb-item>
+                            <el-breadcrumb-item>{{ getTitleLength(routeNewsTtitle, 20) }}</el-breadcrumb-item>
+                        </el-breadcrumb>
+                    </div>
+                </div>
+                <div class="LeftTop">
+                    <h1>{{ newsDetail.title }}</h1>
+                    <p>
+                        来源: <span>{{ newsDetail.copyfrom }}</span>
+                        作者: <span>{{ newsDetail.author }}</span>
+                        发布时间: <span>{{ time }}</span>
+                    </p>
+                </div>
+                <div class="leftBottom" v-html="newsDetail.content" v-if="newsDetail.content" @click="openPreview">
+                </div>
+                <div v-if="previewVisible" class="preview-modal" @click="closePreview">
+                    <img :src="selectedImage" alt="Preview">
+                </div>
+                <!-- 免责声明: -->
+                <div class="disclaimer" v-if="newsDetail.copyfrom != '本网'">
+                    <p>原文链接:{{ newsDetail.fromurl }}</p>
+                    <p>[免责声明]本文来源于网络转载,仅供学习交流使用,不构成商业目的。 版权归原作者所有,如涉及作品内容,版权和其他问题,请在30日与本网联系,我们将第一时间处理。</p>
+                </div>
+                <div v-if="articleChoice">
+                    <HomeSurveyvote></HomeSurveyvote>
+                </div>
+            </div>
+            <div class="innerRight">
+                <!-- 热点资讯1 -->
+                <div class="hotList1">
+                    <DetailHotNews></DetailHotNews>
+                </div>
+                <!-- 热点资讯2 -->
+                <div class="hotList2">
+                    <DetailHotNews2></DetailHotNews2>
+                </div>
+            </div>
+        </div>
+    </div>
+    <!-- 列表页广告二 -->
+    <HomeTopTen :imgurl="adImg2" v-if="adImg2"></HomeTopTen>
+    <!-- 页面底部 -->
+    <HomeFoot1></HomeFoot1>
+</template>
+
+<script setup>
+//1.页面依赖 start ---------------------------------------->
+import { onMounted } from 'vue'
+import { ElBreadcrumb, ElBreadcrumbItem, ElRadio, ElRadioGroup, ElCheckbox, ElCheckboxGroup, ElMessage, ElInput } from 'element-plus'
+import { ArrowRight } from '@element-plus/icons-vue'
+//1.页面依赖 end ---------------------------------------->
+
+//2.页面路径 start ---------------------------------------->
+const route = useRoute();
+const articleId = parseInt(route.params.id);
+const targetSegment = getRoutePath(1);
+
+let routeId;
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+if (getRouteId.code == 200) {
+    routeId = getRouteId.data.category_id
+} else {
+    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    console.log("错误位置:通过url路径查询导航池id")
+    console.log("后端错误反馈:", getRouteId.message)
+    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+}
+//2.页面路径 end ---------------------------------------->
+
+//3.面包屑 start ---------------------------------------->
+const parent_name = ref("");
+const parent_id = ref("");
+const parent_pinyin = ref("");
+
+let getParentNav = async () => {
+    const listData = await requestDataPromise('/web/getOneWebsiteCategory', {
+        method: 'GET',
+        query: {
+            'catid': routeId
+        },
+    });
+
+    if (listData.code == 200) {
+        parent_name.value = listData.data.alias;
+        parent_id.value = listData.data.parent_id;
+        parent_pinyin.value = listData.data.aLIas_pinyin;
+
+    } else {
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+        console.log("错误位置:获取面包屑导航")
+        console.log("后端错误反馈:", listData.message)
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    }
+}
+//获得父级栏目详情
+getParentNav();
+//3.面包屑 end ---------------------------------------->
+
+//4.新闻详情 start ---------------------------------------->
+//4.1 资讯详情
+const newsDetail = ref({})
+const routeNewsTtitle = ref("");
+//4.2 发布日期
+const time = ref("");
+//4.3 路径
+const routLevelTitle = ref("");
+const routLevelId = ref("");
+//4.4 是否展示投票
+const articleChoice = ref(false);
+//4.5 获取详情
+async function getPageData() {
+    const mkdata = await requestDataPromise('/web/selectWebsiteArticleInfo', {
+        method: 'GET',
+        query: {
+            'articleid': articleId
+        },
+    });
+    if (mkdata.code == 200) {
+        //判断是否显示投票
+        if (mkdata.data.is_survey == 1) {
+            console.log("本篇文章含有投票!")
+            articleChoice.value = true;
+        }
+        //获取内容
+        newsDetail.value = mkdata.data;
+        //获取路径
+        routLevelTitle.value = newsDetail.value.cat_name;
+        routLevelId.value = newsDetail.value.category_id;
+        //获取发布时间
+        time.value = newsDetail.value.updated_at.split(' ')[0];
+        //修正标题长度
+        if (newsDetail.value.title.length >= 30) {
+            routeNewsTtitle.value = newsDetail.value.title.substr(0, 30) + "...";
+        } else {
+            routeNewsTtitle.value = newsDetail.value.title
+        }
+    } else {
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+        console.log("错误位置:获取详情内容")
+        console.log("后端错误反馈:", mkdata.message)
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    }
+}
+getPageData();
+//4.新闻详情 end ---------------------------------------->
+
+
+//5.广告 start ---------------------------------------->
+let adImg1 = ref([]);
+let adImg2 = ref([]);
+onMounted(async () => {
+    const { $webUrl, $CwebUrl } = useNuxtApp();
+    //广告1
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0001`
+    const responseAd1 = await fetch(url, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd1 = await responseAd1.json();
+    adImg1.value = resultAd1.data[0];
+
+    //广告2
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0002`
+    const responseAd2 = await fetch(url2, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd2 = await responseAd2.json();
+    adImg2.value = resultAd2.data[0];
+})
+//5.广告 end ---------------------------------------->
+
+//6.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/selectWebsiteArticleInfo', {
+    method: 'GET',
+    query: {
+        'articleid': articleId
+    },
+});
+if (setData.code == 200) {
+    let seoTitle = setData.data.title;
+    let seoDescription = setData.data.introduce;
+    let seoKeywords = setData.data.keyword;
+    let seoSuffix = setData.data.suffix;
+    let seoName = setData.data.website_name;
+
+    useSeoMeta({
+        title: seoTitle + "_" + seoName + "_" + seoSuffix,
+        meta: [
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("获取广告数据失败!", setData.message)
+}
+//6.设置seo信息 end---------------------------------------->
+
+//8.页面图片放大 start---------------------------------------->
+const previewVisible = ref(false)
+const selectedImage = ref(' ')
+
+const openPreview = (event) => {
+    if (event.target.tagName === 'IMG') {
+        selectedImage.value = event.target.src;
+        previewVisible.value = true;
+    }
+}
+const closePreview = () => {
+    previewVisible.value = false;
+}
+//8.页面图片放大 end---------------------------------------->
+</script>
+
+<style lang="less" scoped>
+@import url('@/assets/css/detail.less');
+</style>

+ 255 - 0
components/news/list.vue

@@ -0,0 +1,255 @@
+<template>
+    <div id="newsList">
+        <!-- 页面头部 -->
+        <HomePageHead></HomePageHead>
+        <!-- 导航栏 -->
+        <HomePageNavigation></HomePageNavigation>
+        <!-- 列表页广告一 -->
+        <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
+        <!-- 资讯列表 -->
+        <div class="newsList">
+            <div class="inner">
+                <div class="innerLeft">
+                    <!-- 面包屑导航 -->
+                    <div class="breadcrumb">
+                        <div class="inner">
+                            <span class="location">当前位置:</span>
+                            <el-breadcrumb :separator-icon="ArrowRight">
+                                <el-breadcrumb-item>
+                                    <NuxtLink to="/">首页</NuxtLink>
+                                </el-breadcrumb-item>
+                                <el-breadcrumb-item v-if="parent_name !=''">
+                                    <NuxtLink :to="`/${parent_pinyin}/index.html`"> {{ parent_name }}</NuxtLink>
+                                </el-breadcrumb-item>
+                                <el-breadcrumb-item class="nameBox">{{ name }}</el-breadcrumb-item>
+                            </el-breadcrumb>
+                        </div>
+                    </div>
+                    <ul class="list">
+                        <li v-for="(item, index) in newsList" :key="index">
+                            <NuxtLink :href="getLinkPathDetail(item)" :title="item.alias">
+                                <span class="listTitle">{{ item.title }}</span>
+                                <span class="time">{{ getTime(item.updated_at, 'month', 1) }}</span>
+                            </NuxtLink>
+                        </li>
+                    </ul>
+                    <!-- 分页器 -->
+                    <div class="pagination" v-if="total > 0">
+                        <el-pagination 
+                            size="small" 
+                            background 
+                            layout="prev, pager, next" 
+                            :total="total" 
+                            class="mt-4"
+                            :page-size="pageSize" 
+                            :current-page="pageNum"
+                            prev-text="上一页" 
+                            next-text="下一页" 
+                            @current-change="changePage" 
+                        />
+                    </div>
+                </div>
+                <div class="innerRight">
+                    <DetailHotNews></DetailHotNews>
+                    <DetailHotNews2></DetailHotNews2>
+                </div>
+            </div>
+        </div>
+        <!-- 列表页广告二 -->
+        <HomeTopTen :imgurl="adImg2" v-if="adImg2"></HomeTopTen>
+        <!-- 页面底部 -->
+        <HomeFoot1></HomeFoot1>
+    </div>
+</template>
+
+<script setup>
+//1.页面必备依赖 start ---------------------------------------->
+import { ElBreadcrumb, ElBreadcrumbItem, ElPagination } from 'element-plus';
+import { ArrowRight } from '@element-plus/icons-vue';
+import { ref, onMounted } from 'vue';
+//1.页面必备依赖 end ---------------------------------------->
+
+//2.页面路径 start ---------------------------------------->
+const route = useRoute();
+let articleId = 0; //获取哪个导航下的列表
+//2.1 获得当前的完整路径
+const targetSegment = getRoutePath(1);
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+if(getRouteId.code == 200){
+    articleId = getRouteId.data.category_id
+}else{
+    console.log("错误位置:获得页面路径")
+}
+//2.页面路径 end ---------------------------------------->
+
+//3.页面数据 start ---------------------------------------->
+let pageNum = ref(2); //当前页码
+pageNum.value = parseInt(route.params.id);//路由中传递的分页页码
+let total = ref(1); //总条数
+let pageSize = ref(20); //每页条数
+
+//3.1 新闻列表
+const newsList = ref([]);
+let newslists = async () => {
+    const listData = await requestDataPromise('/web/getWebsiteArticleList', {
+        method: 'GET',
+        query: {
+            'page': pageNum.value,
+            'pageSize': pageSize.value,
+            'catid': articleId
+        },
+    });
+    if (listData.code == 200) {
+        newsList.value = listData.data.rows;
+        total.value = listData.data.count;
+
+    } else {
+        console.log("错误位置:获取新闻列表")
+    }
+}
+//获得列表
+newslists();
+
+//3.2 分页事件
+let changePage = (value) => {
+    console.log("当前页码", value);
+    navigateTo(`/${targetSegment}/list-${value}.html`)
+}
+//3.页面数据 end ---------------------------------------->
+
+//4.面包屑 start ---------------------------------------->
+const name = ref('')
+//4.1 当前频道名称
+let getPageName = async () => {
+    const pageName = await requestDataPromise('/web/getOneWebsiteCategory', {
+        method: 'GET',
+        query: {
+            'catid': articleId
+        },
+    });
+    if (pageName.code == 200) {
+        name.value = pageName.data.alias
+    } else {
+        console.log("错误位置:获取当前频道名称", pageName.message)
+    }
+}
+getPageName();
+
+//4.2 查询是否含有父级导航
+const parent_name = ref([]);
+const parent_id = ref([]);
+const parent_pinyin = ref("");
+let getParentNav = async () => {
+    const listData = await requestDataPromise('/web/getOneWebsiteCategory', {
+        method: 'GET',
+        query: {
+            'catid': articleId
+        },
+    });
+    if (listData.code == 200) {
+        parent_name.value = listData.data.parent_name;
+        parent_id.value = listData.data.parent_id;
+        parent_pinyin.value = listData.data.parent_pinyin;
+    } else {
+        console.log("错误位置:查询父级导航信息")
+    }
+    getSecondNav();
+}
+getParentNav();
+
+//4.3 获取二级栏目列表
+const secondNav = ref([]);
+let getSecondNav = async () => {
+    const listData = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            'placeid': 1,
+            'pid': parent_id.value,
+            'num': 8,
+        },
+    });
+    console.log('listData', listData);
+
+    if (listData.code == 200) {
+        secondNav.value = listData.data
+    } else {
+        console.log("错误位置:获得二级栏目列表")
+    }
+}
+//4.面包屑 end ---------------------------------------->
+
+//5.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': articleId
+    },
+});
+
+if (setData.code == 200) {
+    let seoTitle = setData.data.seo_title;
+    let seoDescription = setData.data.seo_description;
+    let seoKeywords = setData.data.seo_keywords;
+    let seoSuffix = setData.data.suffix;
+    let seoName = setData.data.website_name;
+
+    useSeoMeta({
+        title: seoTitle + "_" + seoName + "_" + seoSuffix,
+        meta: [
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix , tagPriority: 10 },
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix , tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    console.log("错误位置:设置列表页面SEO数据")
+    console.log("后端错误反馈:", setData.message)
+    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+}
+//5.设置seo信息 end---------------------------------------->
+
+//6.广告 start---------------------------------------->
+let adImg1 = ref({});
+let adImg2 = ref({});
+
+onMounted(async ()  => {
+
+    //从客户端获取行政职能部门 加快打开速度
+    const { $webUrl, $CwebUrl } = useNuxtApp();
+    //广告1
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_list_0001`
+    const responseAd1 = await fetch(url, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd1 = await responseAd1.json();
+    adImg1.value = resultAd1.data[0];
+    
+    //广告2
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_list_0002`
+    const responseAd2 = await fetch(url2, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd2 = await responseAd2.json();
+    adImg2.value = resultAd2.data[0];
+
+})
+//6.广告 end---------------------------------------->
+</script>
+
+<style lang="less" scoped>
+@import url('@/assets/css/list.less');
+</style>

+ 259 - 0
components/news/list_sec.vue

@@ -0,0 +1,259 @@
+<template>
+    <div id="newsList">
+        <!-- 页面头部 -->
+        <HomePageHead></HomePageHead>
+        <!-- 导航栏 -->
+        <HomePageNavigation></HomePageNavigation>
+        <!-- 列表页广告一 -->
+        <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
+        <!-- 二级标题-->
+        <HomeListSecondaryHeading v-if="parent_name != ''" :name="parent_name" :pinyin="parent_pinyin" :nav="secondNav"></HomeListSecondaryHeading>
+        <!-- 资讯列表 -->
+        <div class="newsList">
+            <div class="inner">
+                <div class="innerLeft">
+                    <!-- 面包屑导航 -->
+                    <div class="breadcrumb">
+                        <div class="inner">
+                            <span class="location">当前位置:</span>
+                            <el-breadcrumb :separator-icon="ArrowRight">
+                                <el-breadcrumb-item>
+                                    <NuxtLink to="/">首页</NuxtLink>
+                                </el-breadcrumb-item>
+                                <el-breadcrumb-item v-if="parent_name !=''">
+                                    <NuxtLink :to="`/${parent_pinyin}/index.html`"> {{ parent_name }}</NuxtLink>
+                                </el-breadcrumb-item>
+                                <el-breadcrumb-item>{{ name }}</el-breadcrumb-item>
+                            </el-breadcrumb>
+                        </div>
+                    </div>
+                    <ul class="list">
+                        <li v-for="(item, index) in newsList" :key="index">
+                            <NuxtLink :href="getLinkPathDetail(item)" :title="item.alias">
+                                <span class="listTitle">{{ item.title }}</span>
+                                <span class="time">{{ getTime(item.updated_at, 'month', 1) }}</span>
+                            </NuxtLink>
+                        </li>
+                    </ul>
+                    <!-- 分页器 -->
+                    <div class="pagination" v-if="total > 0">
+                        <el-pagination 
+                            size="small" 
+                            background 
+                            layout="prev, pager, next" 
+                            :total="total" 
+                            class="mt-4"
+                            :page-size="pageSize" 
+                            :current-page="pageNum"
+                            prev-text="上一页" 
+                            next-text="下一页" 
+                            @current-change="changePage" 
+                        />
+                    </div>
+                </div>
+                <div class="innerRight">
+                    <DetailHotNews></DetailHotNews>
+                    <DetailHotNews2></DetailHotNews2>
+                </div>
+            </div>
+        </div>
+        <!-- 列表页广告二 -->
+        <HomeTopTen :imgurl="adImg2" v-if="adImg2"></HomeTopTen>
+        <!-- 页面底部 -->
+        <HomeFoot1></HomeFoot1>
+    </div>
+</template>
+
+<script setup>
+//1.页面必备依赖 start ---------------------------------------->
+import { ElBreadcrumb, ElBreadcrumbItem, ElPagination } from 'element-plus'
+import { ArrowRight } from '@element-plus/icons-vue'
+import { ref, onMounted } from 'vue';
+//1.页面必备依赖 end ---------------------------------------->
+
+//2.路径 start---------------------------------------->
+//当前列表名称
+const route = useRoute();
+let articleId = 0;//列表需要使用的导航id 
+const targetSegment = getRoutePath(2);//根据路由反向查询导航id
+let pageNum = ref(1);//获得路由里面的分页数据
+
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+if(getRouteId.code == 200){
+    articleId = getRouteId.data.category_id
+}else{
+    console.log("后端错误反馈:",getRouteId.message)
+}
+pageNum.value = parseInt(route.params.id);
+//2.路径 end---------------------------------------->
+
+//3.列表 start ---------------------------------------->
+let total = ref(1);
+let pageSize = ref(20);
+
+const newsList = ref([]);
+let newslists = async () => {
+    const listData = await requestDataPromise('/web/getWebsiteArticleList', {
+        method: 'GET',
+        query: {
+            'page': pageNum.value,
+            'pageSize': pageSize.value,
+            'catid': articleId
+        },
+    });
+    if (listData.code == 200) {
+        newsList.value = listData.data.rows;
+        total.value = listData.data.count;
+
+    } else {
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+        console.log("错误位置:获取新闻列表")
+        console.log("后端错误反馈:", listData.message)
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    }
+}
+newslists();
+
+//分页
+let changePage = (value) => {
+    console.log("当前页码", value);
+    navigateTo(`/${targetSegment}/${value}.html`)
+}
+//3.列表 end ---------------------------------------->
+
+
+//4.面包屑 start---------------------------------------->
+//3.1 获得页面名称
+const name = ref('')
+let getPageName = async () => {
+    const pageName = await requestDataPromise('/web/getOneWebsiteCategory', {
+        method: 'GET',
+        query: {
+            'catid': articleId
+        },
+    });
+    if (pageName.code == 200) {
+        name.value = pageName.data.alias
+    } else {
+        console.log("错误位置:设置页面标题")
+    }
+}
+getPageName();
+
+//3.2 获得父级栏目
+const parent_name = ref([]);
+const parent_id = ref([]);
+const parent_pinyin = ref("");
+let getParentNav = async () => {
+    const listData = await requestDataPromise('/web/getOneWebsiteCategory', {
+        method: 'GET',
+        query: {
+            'catid': articleId
+        },
+    });
+    if (listData.code == 200) {
+        console.log(111999)
+        console.log(listData.data);
+        parent_name.value = listData.data.parent_name;
+        parent_id.value = listData.data.parent_id;
+        parent_pinyin.value = listData.data.parent_pinyin;
+    } else {
+        console.log("错误位置:获取父级栏目")
+    }
+    getSecondNav();
+}
+getParentNav();
+
+// 3.3获取二级栏目
+const secondNav = ref([]);
+let getSecondNav = async () => {
+    const listData = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            'placeid': 1,
+            'pid': parent_id.value,
+            'num': 20,
+        },
+    });
+    console.log('listData', listData);
+
+    if (listData.code == 200) {
+        secondNav.value = listData.data;
+    } else {
+        console.log("错误位置:获取二级栏目列表")
+    }
+}
+//4.面包屑 end ---------------------------------------->
+
+
+//5.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': articleId
+    },
+});
+
+if (setData.code == 200) {
+    let seoTitle = setData.data.seo_title;
+    let seoDescription = setData.data.seo_description;
+    let seoKeywords = setData.data.seo_keywords;
+    let seoSuffix = setData.data.suffix;
+    let seoName = setData.data.website_name;
+
+    useSeoMeta({
+        title: seoTitle + "_" + seoName + "_" + seoSuffix,
+        meta: [
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix , tagPriority: 10 },
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix , tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("错误位置:设置列表页面SEO数据")
+}
+//5.设置seo信息 end---------------------------------------->
+
+//6.广告 start---------------------------------------->
+let adImg1 = ref({});
+let adImg2 = ref({});
+
+onMounted(async ()  => {
+    //从客户端获取行政职能部门 加快打开速度
+    const { $webUrl, $CwebUrl } = useNuxtApp();
+    //广告1
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_list_0001`
+    const responseAd1 = await fetch(url, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd1 = await responseAd1.json();
+    adImg1.value = resultAd1.data[0];
+    
+    //广告2
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_list_0002`
+    const responseAd2 = await fetch(url2, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd2 = await responseAd2.json();
+    adImg2.value = resultAd2.data[0];
+
+})
+//6.广告 end---------------------------------------->
+</script>
+
+<style lang="less" scoped>
+@import url('@/assets/css/list.less');
+</style>

+ 35 - 27
composables/publicFunction.ts

@@ -1,34 +1,34 @@
 //1.格式化日期 start ---------------------------------------->
 //time 日期字符串 type 从什么时候开始返回 year = 返回年月日 month = 返回月日..
 //style 样式,比如 年-月-日 年.月.日
-const getTime = function(time:string,type:string,style:Number){
+const getTime = function (time: string, type: string, style: Number) {
   const date = new Date(time);
   const year = date.getFullYear();
   const month = date.getMonth() + 1;
   const day = date.getDate();
 
   //返回 年-月-日
-  if(type == 'year'&& style == 1){
+  if (type == 'year' && style == 1) {
     return `${year}-${month}-${day}`;
   }
   //返回 年-月
-  if(type == 'year'&& style == 2){
+  if (type == 'year' && style == 2) {
     return `${year}-${month}`;
   }
   //返回 年
-  if(type == 'year'&& style == 3){
+  if (type == 'year' && style == 3) {
     return `${year}`;
   }
   //返回 月-日
-  if(type == 'month'&& style == 1){
+  if (type == 'month' && style == 1) {
     return `${month}-${day}`;
   }
   //返回 月.日
-  if(type == 'month'&& style == 2){
+  if (type == 'month' && style == 2) {
     return `${month}.${day}`;
   }
   //返回 日
-  if(type == 'day'&& style == 1){
+  if (type == 'day' && style == 1) {
     return `${day}`;
   }
 }
@@ -36,10 +36,10 @@ const getTime = function(time:string,type:string,style:Number){
 
 //2.格式化标题长度 start ---------------------------------------->
 //title 标题 length 长度
-const getTitleLength = function(title:string,length:number){
-  if(title.length >= length){
+const getTitleLength = function (title: string, length: number) {
+  if (title.length >= length) {
     return title.substring(0, length) + "...";
-  }else{
+  } else {
     return title;
   }
 }
@@ -47,30 +47,33 @@ const getTitleLength = function(title:string,length:number){
 
 //3.格式化跳转路径 start ---------------------------------------->
 //3.1跳转到频道页面或者一级列表页
-const getLinkPath = (item:any) => {
-    if(item.is_url==1){
-        return `${item.web_url}`;
-    }else if(item.children_count == 0){
-        //return `/newsList/${item.category_id}?page=1`;
-        return `/${item.aLIas_pinyin}/list-1.html`;
-    }else{
-        //return `/primaryNavigation/${item.aLIas_pinyin}/`;
-        return `/${item.aLIas_pinyin}/index.html`;
-    }
+const getLinkPath = (item: any) => {
+  if (item.is_url == 1) {
+    return `${item.web_url}`;
+  } else if (item.alias == "供求信息") {
+    return `/gongqiuxinxi/gongyingxinxi/index.html`;
+  } else if (item.children_count == 0) {
+    return `/${item.aLIas_pinyin}/list-1.html`;
+  } else {
+    return `/${item.aLIas_pinyin}/index.html`;
+  }
+}
+const getLinkPath1 = (item: any) => {
+  return `/${item.aLIas_pinyin}/list-1.html`;
 }
 //3.2跳转到详情页
-const getLinkPathDetail = (item:any) => {
+const getLinkPathDetail = (item: any) => {
   if (item.islink == 1) {
-      return `${item.linkurl}`;
+    return `${item.linkurl}`;
   } else {
-      return `/${item.pinyin}/${item.id}.html`;
+    return `/${item.pinyin}/${item.id}.html`;
   }
 }
 //3.格式化跳转路径 end ---------------------------------------->
 
 
 //4.获得路由路径 start ---------------------------------------->
-const getRoutePath = (type:Number) => {
+const getRoutePath = (type: Number) => {
   const route = useRoute();
   //获得当前的完整路径
   const fullPath = route.path;
@@ -78,16 +81,21 @@ const getRoutePath = (type:Number) => {
   const segments = fullPath.split('/');
   const targetSegmentOne = segments[1];
   const targetSegmentTwo = segments[2];
+  const targetSegmentThree = segments[3];
 
-  if(type == 1){
+  if (type == 1) {
     return targetSegmentOne;
   }
-  if(type == 2){
+  if (type == 2) {
     return targetSegmentTwo;
   }
+  if (type == 3) {
+    return targetSegmentThree;
+  }
 }
 
 
 
 //4.获得路由路径 end ---------------------------------------->
-export { getTime,getTitleLength,getLinkPath,getLinkPathDetail,getRoutePath};
+export { getTime, getTitleLength, getLinkPath, getLinkPath1, getLinkPathDetail, getRoutePath };
+

+ 66 - 0
pages/[dir]/[dir]/[dir]/[id].vue

@@ -0,0 +1,66 @@
+<template>
+    <div>
+        <GoodsDetail3 v-if="routeType == 2"></GoodsDetail3>
+    </div>
+</template>
+
+<script setup>
+//1.获得路由id start ---------------------------------------->
+const targetSegment = getRoutePath(3);
+//1.1 获得当前的路由id
+let routeType;
+//通过导航路径反向查询导航id
+
+//1.2 获取二级栏目
+let parent_name = ref('');//父级名称
+let parent_id = ref('');//父级id
+const getRoutePName = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRoutePName", getRoutePName);
+
+if (getRoutePName.code == 200) {
+    // routeId = getRoutePName.data.category_id
+    // parent_id.value = getRoutePName.data.category_id
+    // parent_name.value = getRoutePName.data.alias
+    routeType = getRoutePName.data.type
+} else {
+    console.log("获得路由id出错!", getRoutePName.message)
+}
+
+//5.广告 start ---------------------------------------->
+let adImg1 = ref([]);
+let adImg2 = ref([]);
+
+onMounted(async () => {
+    const { $webUrl, $CwebUrl } = useNuxtApp();
+    //广告1
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0001`
+    const responseAd1 = await fetch(url, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd1 = await responseAd1.json();
+    adImg1.value = resultAd1.data[0];
+    //广告2
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0002`
+    const responseAd2 = await fetch(url2, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd2 = await responseAd2.json();
+    adImg2.value = resultAd2.data[0];
+})
+//5.广告 end ---------------------------------------->
+</script>
+
+<style lang="less" scoped></style>

+ 424 - 0
pages/[dir]/[dir]/[dir]/list-[id].vue

@@ -0,0 +1,424 @@
+<template>
+    <HomePageHead></HomePageHead>
+    <HomePageNavigation></HomePageNavigation>
+    <HomeAdvertising :imgurl="adImg1"></HomeAdvertising>
+    <!-- 商品列表 goods-->
+    <main class="index_main">
+        <section class="index_1 clearfix">
+            <div class="shop_head_1 clearfix">
+                <div class="shop_head_1_name">{{ parent_name }}</div>
+            </div>
+            <div class="categ_color_box clearfix">
+                <div class="categ_color_in clearfix">
+                    <NuxtLink class="categ_color_a" :href="`/${item.aLIas_pinyin}/list-1.html`" :title="item.title"
+                        v-for="(item, index) in goodsData" :key="index"
+                        :class="{ categ_color_a_only: navCid == item.cid }">
+                        {{ item.alias }}
+                    </NuxtLink>
+                </div>
+            </div>
+        </section>
+        <GoodsSubMenu3></GoodsSubMenu3>
+        <!-- 三农市场网-商城-商品列表 1-->
+        <section class="">
+            <div class="breadcrumb">
+                <div class="inner">
+                    <span class="location">当前位置 :</span>
+                    <el-breadcrumb :separator-icon="ArrowRight">
+                        <el-breadcrumb-item>
+                            <NuxtLink to="/">首页</NuxtLink>
+                        </el-breadcrumb-item>
+                        <el-breadcrumb-item v-if="p_parent_name != ''">
+                            <!-- <NuxtLink :to="`/${targetSegment}/index.html`"> {{ p_parent_name }}</NuxtLink> -->
+                            {{ p_parent_name }}
+                        </el-breadcrumb-item>
+                        <el-breadcrumb-item v-if="parent_name != ''">
+                            <NuxtLink :to="`/${targetSegment}/${targetSegment1}/index.html`"> {{ parent_name }}
+                            </NuxtLink>
+                        </el-breadcrumb-item>
+                        <el-breadcrumb-item>{{ navTitle }}</el-breadcrumb-item>
+                    </el-breadcrumb>
+                </div>
+            </div>
+            <div class="categ_table clearfix">
+                <div class="categ_table_head_box">
+                    <div class="categ_table_td_1">产品图片</div>
+                    <div class="categ_table_td_2">供求信息/公司</div>
+                    <div class="categ_table_td_3">发布时间</div>
+                    <div class="categ_table_td_4">地区</div>
+                </div>
+                <div class="categ_table_li" v-for="(item, index) in goodsList" :key="index">
+                    <a class="categ_table_li_a" :href="`/${item.pinyin}/${item.id}.html`" title="">
+                        <div class="categ_table_td_1">
+                            <img class="categ_table_td_1_img" :src="item.imgurl" title="" alt="">
+                        </div>
+                        <div class="categ_table_td_2 ">
+                            <div class="categ_table_td_2_in">
+                                <div class="categ_table_td_2_dot1 dot1">
+                                    {{ item.name }}
+                                </div>
+                                <div class="categ_table_td_2_dot2 dot2">
+                                    {{ item.description }}
+                                </div>
+                            </div>
+                        </div>
+                        <div class="categ_table_td_3">{{ getTime(item.updated_at, 'year', 1) }}</div>
+                        <div class="categ_table_td_4 dot1">{{ item.city_name }}</div>
+                    </a>
+                </div>
+                <div class="empty" v-if="goodsList == false">
+                    <img src="@/public/topic/empty.png" alt="" class="empty_img">
+                    <span class="empty_text">当前暂无数据</span>
+                </div>
+            </div>
+            <div class="pagination1" v-if="goodstotal > 0">
+                <el-pagination background layout="prev, pager, next" :total="goodstotal" :page-size="pageSize_goods"
+                    prev-text="上一页" next-text="下一页" />
+            </div>
+        </section>
+        <!-- 三农市场网-商城-商品列表 2-->
+    </main>
+    <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
+    <HomeFoot></HomeFoot>
+</template>
+
+<script setup>
+//0.加载页面依赖 start ---------------------------------------->
+import { ref, onMounted } from 'vue';
+import { ElMessage, ElBreadcrumb, ElBreadcrumbItem, ElPagination } from 'element-plus';
+import { ArrowRight } from '@element-plus/icons-vue'
+import { NuxtLink } from '#components';
+//0.加载页面依赖 end ---------------------------------------->
+
+//1.获得路由id start ---------------------------------------->
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+const targetSegment2 = getRoutePath(3);
+const route = useRoute();
+let cityid = route.query.cityid;
+let cityId = ref(0)
+cityId.value = parseFloat(cityid)
+//1.1 获得当前的路由id
+let routeId;
+let routeType;
+let navTitle = ref('')//二级导航标题
+let navCid = ref('')//二级导航id
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment2,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    navTitle.value = getRouteId.data.alias
+    navCid.value = getRouteId.data.category_id
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.2 获取二级栏目
+let parent_name = ref('');//父级名称
+let parent_id = ref('');//父级id
+let parent_pinyin = ref('');//父级拼音
+const getRoutePName = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+console.log("getRoutePName", getRoutePName);
+
+if (getRoutePName.code == 200) {
+    routeId = getRoutePName.data.category_id
+    parent_id.value = getRoutePName.data.category_id
+    parent_name.value = getRoutePName.data.alias
+    routeType = getRoutePName.data.type
+} else {
+    console.log("获得路由id出错!", getRoutePName.message)
+}
+//1.3 获取一级栏目
+let p_parent_name = ref('');//父级名称
+let p_parent_id = ref('');//父级id
+let p_parent_pinyin = ref('');//父级拼音
+const getRoutePName_parent = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRoutePName_parent", getRoutePName_parent);
+
+if (getRoutePName_parent.code == 200) {
+    p_parent_id.value = getRoutePName_parent.data.category_id
+    p_parent_name.value = getRoutePName_parent.data.alias
+    // p_parent_pinyin.value = getRoutePName_parent.data.aLIas_pinyin
+} else {
+    console.log("获得路由id出错!", getRoutePName_parent.message)
+}
+//1.4 获取某个栏目
+const getParentId = await requestDataPromise('/web/getOneWebsiteCategory', {
+    method: 'GET',
+    query: {
+        'catid': parent_id.value,
+    },
+});
+console.log("getParentId", getParentId);
+
+if (getParentId.code == 200) {
+    parent_pinyin.value = getParentId.data.aLIas_pinyin
+} else {
+    console.log("获得路由id出错!", getParentId.message)
+}
+//1.获得路由id end ---------------------------------------->
+
+//2.选项卡 start ---------------------------------------->
+let showTabs = ref(1)
+let qhtabs = function (number) {
+    console.log(number)
+    showTabs.value = number
+}
+//2.选项卡 end ---------------------------------------->
+
+//3.广告 start ---------------------------------------->
+let adImg1 = ref({})
+let adImg2 = ref({})
+onMounted(async () => {
+    //从客户端获取行政职能部门 加快打开速度
+    const { $webUrl, $CwebUrl } = useNuxtApp();
+    //广告1
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_list_0001`
+    const responseAd1 = await fetch(url, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd1 = await responseAd1.json();
+    adImg1.value = resultAd1.data[0];
+
+    //广告2
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_list_0002`
+    const responseAd2 = await fetch(url2, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd2 = await responseAd2.json();
+    adImg2.value = resultAd2.data[0];
+})
+//3.广告 end ---------------------------------------->
+
+//4.页面数据 start ---------------------------------------->
+const pageData = ref([
+    //示例:
+    // {
+    //     id: 1, 
+    //     title: "", //该导航的标题
+    //     data: [], //数据1
+    //     data1: [], //数据2
+    //     data2: [], //数据3
+    //     data3: [], //数据4
+    //     data4: [], //数据5
+    //     category_id1: "",  //子导航id1
+    //     category_id2: "", 
+    //     category_id3: "",
+    //     category_id4: "",
+    //     title1: "", //子导航标题1
+    //     title2: "",
+    //     title3: "",
+    //     title4: "",
+    //     cid: "" //该导航的id
+    // },
+])
+const goodsData = ref([])
+
+//4.1 获取所有导航
+try {
+    const navigateData = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            'placeid': 1,
+            'pid': routeId,
+            'num': 8,
+            'type': 1
+        },
+    });
+    console.log('获取三级导航1111111', navigateData);
+
+    if (navigateData.code == 200) {
+        // 遍历可用的导航池放到页面中
+        for (let index in navigateData.data) {
+            let data = {
+                title: navigateData.data[index].name,
+                cid: navigateData.data[index].category_id,
+                children_count: navigateData.data[index].children_count,
+                alias: navigateData.data[index].alias,
+                aLIas_pinyin: targetSegment + "/" + targetSegment1 + "/" + navigateData.data[index].aLIas_pinyin,
+                type: navigateData.data[index].type,
+                data: [],
+                data1: [],
+                data2: [],
+                data3: [],
+                data4: [],
+                category_id1: "",
+                category_id2: "",
+                category_id3: "",
+                category_id4: "",
+                title1: "",
+                title2: "",
+                title3: "",
+                title4: ""
+            };
+            if (navigateData.data[index].is_url == 1) {
+                // 处理 URL 的逻辑
+            } else {
+                if (navigateData.data[index].type == 2) {
+                    goodsData.value.push(data);
+                }
+                //每个页面最多8个模块
+                pageData.value.push(data);
+            }
+        }
+        console.log('获取三级导航pageData', pageData.value);
+        console.log('获取三级导航goods', goodsData.value);
+
+    } else {
+        console.log("错误:渲染8个模块环节出错,请检查是否存在没有数据的模块!")
+    }
+} catch (error) {
+    console.log("错误:导航池渲染执行接口出错!请检查频道页渲染的模块数据是否完整!")
+}
+
+// 获取商品数据列表 start--------------------------------------->
+const goodsList = ref()
+const page_goods = ref(1)
+const pageSize_goods = ref(20)
+const goodstotal = ref()
+let getshop = async () => {
+    let params = {
+        'catid': navCid.value,
+        'city_id': cityId.value,
+        'page': page_goods.value,
+        'pageSize': pageSize_goods.value,
+        'ismix': 1
+    }
+    if (cityId.value == undefined || cityId.value == '' || cityId.value == 'NaN') {
+        //删除变量params中的city_id参数
+        delete params.city_id
+    } else {
+        params.city_id = parseFloat(cityId.value)
+    }
+
+    const getGoodsList = await requestDataPromise('/web/getWebsiteshopList', {
+        method: 'GET',
+        query: params
+    });
+    console.log("获取数据列表goods", getGoodsList);
+
+    if (getGoodsList.code == 200) {
+        goodsList.value = getGoodsList.data.goods
+        goodstotal.value = getGoodsList.data.count
+    }
+}
+
+let getshop1 = async () => {
+    let params = {
+        'catid': navCid.value,
+        'page': page_goods.value,
+        'pageSize': pageSize_goods.value,
+        'ismix': 1
+    }
+
+    const getGoodsList = await requestDataPromise('/web/getWebsiteshopList', {
+        method: 'GET',
+        query: params
+    });
+    // console.log("获取数据列表goods", getGoodsList);
+
+    if (getGoodsList.code == 200) {
+        goodsList.value = getGoodsList.data.goods
+        goodstotal.value = getGoodsList.data.count
+    }
+
+}
+// getshop1()
+//4.4.1 监听cityid
+watch(() => route.query.cityid, (newVal, oldVal) => {
+    if (newVal != undefined) {
+        cityId.value = parseFloat(newVal)
+        getshop()
+    } else {
+        getshop1()
+    }
+}, {
+    deep: true,
+    immediate: true
+})
+
+// 获取商品数据 end----------------------------------------->
+
+//4.页面数据 end ---------------------------------------->
+
+//5.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': routeId
+    },
+});
+
+if (setData.code == 200) {
+    let seoTitle = setData.data.seo_title;
+    let seoDescription = setData.data.seo_description;
+    let seoKeywords = setData.data.seo_keywords;
+    let seoSuffix = setData.data.suffix;
+    let seoName = setData.data.website_name;
+
+    useSeoMeta({
+        title: seoTitle + "_" + seoSuffix,
+        meta: [
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("设置频道页SEO出错!", setData.message)
+}
+//5.设置seo信息 end---------------------------------------->
+</script>
+<style lang="less" scoped>
+// @import url("@/assets/css/shop/newsList.less");
+@import url("@/assets/css/shop/goodsList.less");
+
+.empty {
+    width: 100%;
+    height: 150px;
+    line-height: 150px;
+    text-align: center;
+}
+
+.empty_img {
+    vertical-align: -30px;
+    margin-right: 20px;
+}
+
+.empty_text {
+    font-size: 26px;
+    color: #999;
+}
+
+.pagination {
+    height: 100px;
+    margin-top: 20px;
+}
+
+.pagination1 {
+    height: 100px;
+    margin-top: 20px;
+}
+</style>

+ 17 - 235
pages/[dir]/[dir]/[id].vue

@@ -1,253 +1,35 @@
 <template>
-    <!-- 页面头部 -->
-    <HomePageHead></HomePageHead>
-    <!-- 导航栏 -->
-    <HomePageNavigation></HomePageNavigation>
-    <!-- 列表页广告一 -->
-    <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
-    <!-- 资讯列表 -->
-    <div class="newsDetail">
-        <div class="inner">
-            <div class="innerLeft">
-                <!-- 面包屑导航 -->
-                <div class="breadcrumb">
-                    <div class="inner">
-                        <span class="location">当前位置:</span>
-                        <el-breadcrumb :separator-icon="ArrowRight">
-                            <el-breadcrumb-item>
-                                <NuxtLink to="/">首页</NuxtLink>
-                            </el-breadcrumb-item>
-                            <el-breadcrumb-item v-if="parent_name != ''">
-                                <NuxtLink :to="`/${parent_pinyin}/index.html`"> {{ parent_name }}</NuxtLink>
-                            </el-breadcrumb-item>
-                            <el-breadcrumb-item>
-                                <NuxtLink :to="`list-1.html`"> {{ routLevelTitle }}</NuxtLink>
-                            </el-breadcrumb-item>
-                            <el-breadcrumb-item>{{ getTitleLength(routeNewsTtitle, 20) }}</el-breadcrumb-item>
-                        </el-breadcrumb>
-                    </div>
-                </div>
-                <div class="LeftTop">
-                    <h1>{{ newsDetail.title }}</h1>
-                    <p>
-                        来源: <span>{{ newsDetail.copyfrom }}</span>
-                        作者: <span>{{ newsDetail.author }}</span>
-                        发布时间: <span>{{ time }}</span>
-                    </p>
-                </div>
-                <div class="leftBottom" v-html="newsDetail.content" v-if="newsDetail.content" @click="openPreview">
-                </div>
-                <div v-if="previewVisible" class="preview-modal" @click="closePreview">
-                    <img :src="selectedImage" alt="Preview">
-                </div>
-                <!-- 免责声明: -->
-                <div class="disclaimer" v-if="newsDetail.copyfrom != '本网'">
-                    <p>原文链接:{{ newsDetail.fromurl }}</p>
-                    <p>[免责声明]本文来源于网络转载,仅供学习交流使用,不构成商业目的。 版权归原作者所有,如涉及作品内容,版权和其他问题,请在30日与本网联系,我们将第一时间处理。</p>
-                </div>
-                <div v-if="articleChoice">
-                    <HomeSurveyvote></HomeSurveyvote>
-                </div>
-            </div>
-            <div class="innerRight">
-                <!-- 热点资讯1 -->
-                <div class="hotList1">
-                    <DetailHotNews></DetailHotNews>
-                </div>
-                <!-- 热点资讯2 -->
-                <div class="hotList2">
-                    <DetailHotNews2></DetailHotNews2>
-                </div>
-            </div>
-        </div>
+    <div>
+        <GoodsDetailSec v-if="routeType == 2"></GoodsDetailSec>
+        <NewsDetailSec v-if="routeType == 1"></NewsDetailSec>
     </div>
-    <!-- 列表页广告二 -->
-    <HomeTopTen :imgurl="adImg2" v-if="adImg2"></HomeTopTen>
-    <!-- 页面底部 -->
-    <HomeFoot1></HomeFoot1>
 </template>
 
 <script setup>
-//1.页面依赖 start ---------------------------------------->
-import { onMounted } from 'vue'
-import { ElBreadcrumb, ElBreadcrumbItem, ElRadio, ElRadioGroup, ElCheckbox, ElCheckboxGroup, ElMessage, ElInput } from 'element-plus'
-import { ArrowRight } from '@element-plus/icons-vue'
-//1.页面依赖 end ---------------------------------------->
+//0.加载页面依赖 start ---------------------------------------->
+import { ref, onMounted } from 'vue';
+import { ElMessage } from 'element-plus';
+//0.加载页面依赖 end ---------------------------------------->
 
-//2.页面路径 start ---------------------------------------->
-const route = useRoute();
-const articleId = parseInt(route.params.id);
+//1.获得路由id start ---------------------------------------->
 const targetSegment = getRoutePath(1);
-
+const targetSegment1 = getRoutePath(2);
+//1.1 获得当前的路由id
 let routeId;
+let routeType;
 //通过导航路径反向查询导航id
 const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
     method: 'GET',
     query: {
-        'pinyin': targetSegment,
+        'pinyin': targetSegment1,
     },
 });
 if (getRouteId.code == 200) {
+    console.log('getRouteId', getRouteId.data);
     routeId = getRouteId.data.category_id
+    routeType = getRouteId.data.type
 } else {
-    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
-    console.log("错误位置:通过url路径查询导航池id")
-    console.log("后端错误反馈:", getRouteId.message)
-    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
-}
-//2.页面路径 end ---------------------------------------->
-
-//3.面包屑 start ---------------------------------------->
-const parent_name = ref("");
-const parent_id = ref("");
-const parent_pinyin = ref("");
-
-let getParentNav = async () => {
-    const listData = await requestDataPromise('/web/getOneWebsiteCategory', {
-        method: 'GET',
-        query: {
-            'catid': routeId
-        },
-    });
-
-    if (listData.code == 200) {
-        parent_name.value = listData.data.alias;
-        parent_id.value = listData.data.parent_id;
-        parent_pinyin.value = listData.data.aLIas_pinyin;
-
-    } else {
-        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
-        console.log("错误位置:获取面包屑导航")
-        console.log("后端错误反馈:", listData.message)
-        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
-    }
-}
-//获得父级栏目详情
-getParentNav();
-//3.面包屑 end ---------------------------------------->
-
-//4.新闻详情 start ---------------------------------------->
-//4.1 资讯详情
-const newsDetail = ref({})
-const routeNewsTtitle = ref("");
-//4.2 发布日期
-const time = ref("");
-//4.3 路径
-const routLevelTitle = ref("");
-const routLevelId = ref("");
-//4.4 是否展示投票
-const articleChoice = ref(false);
-//4.5 获取详情
-async function getPageData() {
-    const mkdata = await requestDataPromise('/web/selectWebsiteArticleInfo', {
-        method: 'GET',
-        query: {
-            'articleid': articleId
-        },
-    });
-    if (mkdata.code == 200) {
-        //判断是否显示投票
-        if (mkdata.data.is_survey == 1) {
-            console.log("本篇文章含有投票!")
-            articleChoice.value = true;
-        }
-        //获取内容
-        newsDetail.value = mkdata.data;
-        //获取路径
-        routLevelTitle.value = newsDetail.value.cat_name;
-        routLevelId.value = newsDetail.value.category_id;
-        //获取发布时间
-        time.value = newsDetail.value.updated_at.split(' ')[0];
-        //修正标题长度
-        if (newsDetail.value.title.length >= 30) {
-            routeNewsTtitle.value = newsDetail.value.title.substr(0, 30) + "...";
-        } else {
-            routeNewsTtitle.value = newsDetail.value.title
-        }
-    } else {
-        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
-        console.log("错误位置:获取详情内容")
-        console.log("后端错误反馈:", mkdata.message)
-        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
-    }
-}
-getPageData();
-//4.新闻详情 end ---------------------------------------->
-
-
-//5.广告 start ---------------------------------------->
-let adImg1 = ref([]);
-let adImg2 = ref([]);
-onMounted(async () => {
-    const { $webUrl, $CwebUrl } = useNuxtApp();
-    //广告1
-    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0001`
-    const responseAd1 = await fetch(url, {
-        headers: {
-            'Content-Type': 'application/json',
-            'Userurl': $CwebUrl,
-            'Origin': $CwebUrl
-        }
-    });
-    const resultAd1 = await responseAd1.json();
-    adImg1.value = resultAd1.data[0];
-
-    //广告2
-    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0002`
-    const responseAd2 = await fetch(url2, {
-        headers: {
-            'Content-Type': 'application/json',
-            'Userurl': $CwebUrl,
-            'Origin': $CwebUrl
-        }
-    });
-    const resultAd2 = await responseAd2.json();
-    adImg2.value = resultAd2.data[0];
-})
-//5.广告 end ---------------------------------------->
-
-//6.设置seo信息 start---------------------------------------->
-const setData = await requestDataPromise('/web/selectWebsiteArticleInfo', {
-    method: 'GET',
-    query: {
-        'articleid': articleId
-    },
-});
-if (setData.code == 200) {
-    let seoTitle = setData.data.title;
-    let seoDescription = setData.data.introduce;
-    let seoKeywords = setData.data.keyword;
-    let seoSuffix = setData.data.suffix;
-    let seoName = setData.data.website_name;
-
-    useSeoMeta({
-        title: seoTitle + "_" + seoName + "_" + seoSuffix,
-        meta: [
-            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
-            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
-        ]
-    });
-} else {
-    console.log("获取广告数据失败!", setData.message)
-}
-//6.设置seo信息 end---------------------------------------->
-
-//8.页面图片放大 start---------------------------------------->
-const previewVisible = ref(false)
-const selectedImage = ref(' ')
-
-const openPreview = (event) => {
-    if (event.target.tagName === 'IMG') {
-        selectedImage.value = event.target.src;
-        previewVisible.value = true;
-    }
-}
-const closePreview = () => {
-    previewVisible.value = false;
+    console.log("获得路由id出错!", getRouteId.message)
 }
-//8.页面图片放大 end---------------------------------------->
-</script>
-
-<style lang="less" scoped>
-@import url('@/assets/css/detail.less');
-</style>
+//1.获得路由id end ---------------------------------------->
+</script>

+ 518 - 0
pages/[dir]/[dir]/index.html.vue

@@ -0,0 +1,518 @@
+<template>
+    <HomePageHead></HomePageHead>
+    <HomePageNavigation></HomePageNavigation>
+    <HomeAdvertising :imgurl="adImg1"></HomeAdvertising>
+    <!-- 商品三级分类页 -->
+    <div class="goods">
+        <section class="index_1 clearfix">
+            <div class="shop_head_1 clearfix">
+                <div class="shop_head_1_name">{{ secNavTitle }}</div>
+            </div>
+            <div class="categ_color_box clearfix">
+                <div class="categ_color_in clearfix">
+                    <NuxtLink class="categ_color_a" :href="`/${item.aLIas_pinyin}/list-1.html`" :title="item.title"
+                        v-for="(item, index) in goodsData">
+                        {{ item.alias }}
+                    </NuxtLink>
+                </div>
+            </div>
+        </section>
+        <GoodsSubMenu2></GoodsSubMenu2>
+        <section class="">
+            <div class="breadcrumb">
+                <div class="inner">
+                    <span class="location">当前位置 :</span>
+                    <el-breadcrumb :separator-icon="ArrowRight">
+                        <el-breadcrumb-item>
+                            <NuxtLink to="/">首页</NuxtLink>
+                        </el-breadcrumb-item>
+                        <el-breadcrumb-item v-if="parent_name != ''">
+                            <!-- <NuxtLink :to="`/${parent_pinyin}/index.html`"> {{ parent_name }}</NuxtLink> -->
+                            {{ parent_name }}
+                        </el-breadcrumb-item>
+                        <el-breadcrumb-item>{{ secNavTitle }}</el-breadcrumb-item>
+                    </el-breadcrumb>
+                </div>
+            </div>
+            <!-- 商品列表 -->
+            <!-- 第一行 -->
+            <section class="index_2 clearfix">
+                <div class="box_1 clearfix" v-if="goodsData.length > 0">
+                    <div class="box_1_head">
+                        <NuxtLink class="box_1_head_name" :href="getLinkPath1(goodsData[0])">
+                            {{ goodsData[0].alias }}
+                        </NuxtLink>
+                        <NuxtLink class="box_1_head_a" :href="getLinkPath1(goodsData[0])" :title="goodsData[0].title">
+                            栏目简介
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in goodsData[0].data" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.name">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.name" alt="">
+                                </div>
+                                <div class="img_li_1_dot2 dot2">{{ item.name }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="box_1 clearfix" v-if="goodsData.length > 1">
+                    <div class="box_1_head">
+                        <NuxtLink class="box_1_head_name" :href="getLinkPath1(goodsData[1])">
+                            {{ goodsData[1].alias }}
+                        </NuxtLink>
+                        <NuxtLink class="box_1_head_a" :href="getLinkPath1(goodsData[1])" :title="goodsData[1].title">
+                            栏目简介
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in goodsData[1].data" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.name">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.name" alt="">
+                                </div>
+                                <div class="img_li_1_dot2">{{ item.name }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 第二行 -->
+            <section class="index_3 clearfix">
+                <div class="box_2 clearfix" v-if="goodsData.length > 2">
+                    <div class="box_2_head">
+                        <NuxtLink class="box_2_head_name" :href="getLinkPath1(goodsData[2])">
+                            {{ goodsData[2].alias }}
+                        </NuxtLink>
+                        <NuxtLink class="box_2_head_a" :href="getLinkPath1(goodsData[2])" :title="goodsData[2].title">
+                            栏目简介
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_2 clearfix">
+                        <div class="img_li_2 clearfix" v-for="(item, index) in goodsData[2].data" :key="index">
+                            <NuxtLink class="img_li_2_a" :href="getLinkPathDetail(item)" :title="item.name">
+                                <div class="img_li_2_img_box clearfix">
+                                    <img class="img_li_2_img" :src="item.imgurl" :title="item.name" alt="">
+                                </div>
+                                <div class="img_li_2_dot2 dot2">{{ item.name }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 第三行 -->
+            <section class="index_4 clearfix">
+                <div class="box_1 clearfix" v-if="goodsData.length > 3">
+                    <div class="box_1_head">
+                        <NuxtLink class="box_1_head_name" :href="getLinkPath1(goodsData[3])">
+                            {{ goodsData[3].alias }}
+                        </NuxtLink>
+                        <NuxtLink class="box_1_head_a" :href="getLinkPath1(goodsData[3])" :title="goodsData[3].title">
+                            栏目简介
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in goodsData[3].data" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.name">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.name" alt="">
+                                </div>
+                                <div class="img_li_1_dot2 dot2">{{ item.name }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="box_1 clearfix" v-if="goodsData.length > 4">
+                    <div class="box_1_head">
+                        <NuxtLink class="box_1_head_name" :href="getLinkPath1(goodsData[4])">
+                            {{ goodsData[4].alias }}
+                        </NuxtLink>
+                        <NuxtLink class="box_1_head_a" :href="getLinkPath1(goodsData[4])" :title="goodsData[4].title">
+                            栏目简介
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_1 clearfix">
+                        <div class="img_li_1 clearfix" v-for="(item, index) in goodsData[4].data" :key="index">
+                            <NuxtLink class="img_li_1_a" :href="getLinkPathDetail(item)" :title="item.name">
+                                <div class="img_li_1_img_box clearfix">
+                                    <img class="img_li_1_img" :src="item.imgurl" :title="item.name" alt="">
+                                </div>
+                                <div class="img_li_1_dot2 dot2">{{ item.name }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 第四行 -->
+            <section class="index_5 clearfix">
+                <div class="box_2 clearfix" v-if="goodsData.length > 5">
+                    <div class="box_2_head">
+                        <NuxtLink class="box_2_head_name" :href="getLinkPath1(goodsData[5])">
+                            {{ goodsData[5].alias }}
+                        </NuxtLink>
+                        <NuxtLink class="box_2_head_a" :href="getLinkPath1(goodsData[5])" :title="goodsData[5].title">
+                            栏目简介
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_2 clearfix">
+                        <div class="img_li_2 clearfix" v-for="(item, index) in goodsData[5].data" :key="index">
+                            <NuxtLink class="img_li_2_a" :href="getLinkPathDetail(item)" :title="item.name">
+                                <div class="img_li_2_img_box clearfix">
+                                    <img class="img_li_2_img" :src="item.imgurl" :title="item.name" alt="">
+                                </div>
+                                <div class="img_li_2_dot2 dot2">{{ item.name }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </section>
+        </section>
+    </div>
+    <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
+    <HomeFoot></HomeFoot>
+</template>
+
+<script setup>
+//0.加载页面依赖 start ---------------------------------------->
+import { ref, onMounted } from 'vue';
+import { ElMessage, ElBreadcrumb, ElBreadcrumbItem } from 'element-plus';
+import { ArrowRight } from '@element-plus/icons-vue'
+import { NuxtLink } from '#components';
+//0.加载页面依赖 end ---------------------------------------->
+
+//1.获得路由id start ---------------------------------------->
+const targetSegment = getRoutePath(2);
+const targetSegment1 = getRoutePath(1);
+//1.1 获得当前的路由id
+let routeId;
+let routeType;
+let secNavTitle = ref('')//二级导航标题
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    routeId = getRouteId.data.category_id
+    secNavTitle.value = getRouteId.data.alias
+    routeType = getRouteId.data.type
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.2 获得父级栏目
+let parent_name = ref('');//父级名称
+let parent_id = ref('');//父级id
+let parent_pinyin = ref('');//父级拼音
+const getRoutePName = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+console.log("getRoutePName", getRoutePName);
+
+if (getRoutePName.code == 200) {
+    parent_id.value = getRoutePName.data.category_id
+    parent_name.value = getRoutePName.data.alias
+} else {
+    console.log("获得路由id出错!", getRoutePName.message)
+}
+const getParentId = await requestDataPromise('/web/getOneWebsiteCategory', {
+    method: 'GET',
+    query: {
+        'catid': parent_id.value,
+    },
+});
+console.log("getParentId", getParentId);
+
+if (getParentId.code == 200) {
+    parent_pinyin.value = getParentId.data.aLIas_pinyin
+} else {
+    console.log("获得路由id出错!", getParentId.message)
+}
+//1.获得路由id end ---------------------------------------->
+
+//2.选项卡 start ---------------------------------------->
+let showTabs = ref(1)
+let qhtabs = function (number) {
+    console.log(number)
+    showTabs.value = number
+}
+//2.选项卡 end ---------------------------------------->
+
+//3.广告 start ---------------------------------------->
+let adImg1 = ref({})
+let adImg2 = ref({})
+let adImg3 = ref({})
+let adImg4 = ref({})
+onMounted(async () => {
+    //从客户端获取行政职能部门 加快打开速度
+    const { $webUrl, $CwebUrl } = useNuxtApp();
+    //广告1
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_category_0001`
+    const responseAd1 = await fetch(url, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd1 = await responseAd1.json();
+    adImg1.value = resultAd1.data[0];
+
+    //广告2
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_category_0002`
+    const responseAd2 = await fetch(url2, {
+        headers: {
+            'Content-Type': 'application/json',
+            'Userurl': $CwebUrl,
+            'Origin': $CwebUrl
+        }
+    });
+    const resultAd2 = await responseAd2.json();
+    adImg2.value = resultAd2.data[0];
+})
+//3.广告 end ---------------------------------------->
+
+//4.页面数据 start ---------------------------------------->
+const pageData = ref([
+    //示例:
+    // {
+    //     id: 1, 
+    //     title: "", //该导航的标题
+    //     data: [], //数据1
+    //     data1: [], //数据2
+    //     data2: [], //数据3
+    //     data3: [], //数据4
+    //     data4: [], //数据5
+    //     category_id1: "",  //子导航id1
+    //     category_id2: "", 
+    //     category_id3: "",
+    //     category_id4: "",
+    //     title1: "", //子导航标题1
+    //     title2: "",
+    //     title3: "",
+    //     title4: "",
+    //     cid: "" //该导航的id
+    // },
+])
+const goodsData = ref([])
+
+//4.1 获取所有导航
+try {
+    const navigateData = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            'placeid': 1,
+            'pid': routeId,
+            'num': 8,
+            'type': 1
+        },
+    });
+    console.log('获取三级导航1111111', navigateData);
+
+    if (navigateData.code == 200) {
+        // 遍历可用的导航池放到页面中
+        for (let index in navigateData.data) {
+            let data = {
+                title: navigateData.data[index].name,
+                cid: navigateData.data[index].category_id,
+                children_count: navigateData.data[index].children_count,
+                alias: navigateData.data[index].alias,
+                aLIas_pinyin: targetSegment1 + "/" + targetSegment + "/" + navigateData.data[index].aLIas_pinyin,
+                type: navigateData.data[index].type,
+                data: [],
+                data1: [],
+                data2: [],
+                data3: [],
+                data4: [],
+                category_id1: "",
+                category_id2: "",
+                category_id3: "",
+                category_id4: "",
+                title1: "",
+                title2: "",
+                title3: "",
+                title4: ""
+            };
+            if (navigateData.data[index].is_url == 1) {
+                // 处理 URL 的逻辑
+            } else {
+                if (navigateData.data[index].type == 2) {
+                    goodsData.value.push(data);
+                }
+                //每个页面最多8个模块
+                pageData.value.push(data);
+            }
+        }
+        console.log('获取三级导航pageData', pageData.value);
+        console.log('获取三级导航goods', goodsData.value);
+
+        let goodsJson = []
+        for (let i = 0; i < goodsData.value.length; i++) {
+            if (i == 0) {
+                goodsJson.push({ "catid": goodsData.value[0].cid + ",0,4" });
+            } else if (i == 1) {
+                goodsJson.push({ "catid": goodsData.value[1].cid + ",0,4" });
+            } else if (i == 2) {
+                goodsJson.push({ "catid": goodsData.value[2].cid + ",0,8" });
+            } else if (i == 3) {
+                goodsJson.push({ "catid": goodsData.value[3].cid + ",0,4" });
+            } else if (i == 4) {
+                goodsJson.push({ "catid": goodsData.value[4].cid + ",0,4" });
+            } else if (i == 5) {
+                goodsJson.push({ "catid": goodsData.value[5].cid + ",0,8" });
+            } else if (i == 6) {
+                goodsJson.push({ "catid": goodsData.value[6].cid + ",0,4" });
+            } else if (i == 7) {
+                goodsJson.push({ "catid": goodsData.value[7].cid + ",0,4" });
+            }
+        }
+        let goodsJsonString = JSON.stringify(goodsJson);
+        getPageGoodsAllData(goodsJsonString);
+    } else {
+        console.log("错误:渲染8个模块环节出错,请检查是否存在没有数据的模块!")
+    }
+} catch (error) {
+    console.log("错误:导航池渲染执行接口出错!请检查频道页渲染的模块数据是否完整!")
+}
+// 获取商品数据 start--------------------------------------->
+async function getPageGoodsAllData(goodsJsonString) {
+    const mkdata = await requestDataPromise('/web/getWebsiteCatidshop', {
+        method: 'GET',
+        query: {
+            'catid': goodsJsonString
+        },
+    });
+    console.log("获取商品数据", mkdata);
+
+    if (mkdata.code == 200) {
+        //模块1
+        goodsData.value[0].data = mkdata.data[0];
+        //模块2
+        goodsData.value[1].data = mkdata.data[1];
+        //模块3
+        goodsData.value[2].data = mkdata.data[2];
+        //模块4
+        goodsData.value[3].data = mkdata.data[3];
+        //模块5
+        goodsData.value[4].data = mkdata.data[4];
+        //模块6
+        goodsData.value[5].data = mkdata.data[5];
+        //模块7
+        goodsData.value[6].data = mkdata.data[6];
+        //模块8
+        goodsData.value[7].data = mkdata.data[7];
+    }
+}
+// 获取商品数据 end----------------------------------------->
+
+
+//4.页面数据 end ---------------------------------------->
+
+//5.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': routeId
+    },
+});
+
+if (setData.code == 200) {
+    let seoTitle = setData.data.seo_title;
+    let seoDescription = setData.data.seo_description;
+    let seoKeywords = setData.data.seo_keywords;
+    let seoSuffix = setData.data.suffix;
+    let seoName = setData.data.website_name;
+
+    useSeoMeta({
+        title: seoTitle + "_" + seoSuffix,
+        meta: [
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("设置频道页SEO出错!", setData.message)
+}
+//5.设置seo信息 end---------------------------------------->
+</script>
+
+<style lang="less" scoped>
+// @import url("@/assets/css/shop/newsClass.less");
+@import url("@/assets/css/shop/goodsList.less");
+
+// .news {
+//     width: 1200px;
+//     margin: 0 auto;
+// }
+
+.goods {
+    width: 1200px;
+    margin: 0 auto;
+}
+
+//导航条
+.breadcrumb {
+    width: 100%;
+    height: 22px;
+    padding-bottom: 30px;
+    border-bottom: 1px solid #ccc;
+    font-family: Microsoft YaHei, Microsoft YaHei;
+    font-weight: 400;
+    font-size: 20px;
+    color: #666666;
+    line-height: 23px;
+    text-align: left;
+    font-style: normal;
+    text-transform: none;
+    margin-top: 40px;
+
+    :deep(.el-breadcrumb) {
+        display: inline-block;
+        vertical-align: -4px;
+    }
+
+    :deep(.el-breadcrumb__inner a),
+    :deep(.el-breadcrumb__inner.is-link) {
+        color: #666666;
+        font-weight: 400;
+        text-decoration: none;
+        transition: var(--el-transition-color);
+    }
+
+    span {
+        font-family: Microsoft YaHei, Microsoft YaHei;
+        font-weight: 400;
+        font-size: 20px;
+        color: #666666;
+        line-height: 23px;
+        text-align: left;
+        font-style: normal;
+        text-transform: none;
+    }
+
+    span:hover {
+        color: #666666;
+    }
+
+    .location {
+        margin-right: 20px;
+        width: 100px;
+        height: 22px;
+        font-family: Microsoft YaHei, Microsoft YaHei;
+        font-weight: 400;
+        font-size: 20px;
+        color: #666666;
+        line-height: 23px;
+        text-align: left;
+        font-style: normal;
+        text-transform: none;
+    }
+}
+</style>

+ 19 - 244
pages/[dir]/[dir]/list-[id].vue

@@ -1,83 +1,21 @@
 <template>
-    <div id="newsList">
-        <!-- 页面头部 -->
-        <HomePageHead></HomePageHead>
-        <!-- 导航栏 -->
-        <HomePageNavigation></HomePageNavigation>
-        <!-- 列表页广告一 -->
-        <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
-        <!-- 二级标题-->
-        <HomeListSecondaryHeading v-if="parent_name != ''" :name="parent_name" :pinyin="parent_pinyin" :nav="secondNav"></HomeListSecondaryHeading>
-        <!-- 资讯列表 -->
-        <div class="newsList">
-            <div class="inner">
-                <div class="innerLeft">
-                    <!-- 面包屑导航 -->
-                    <div class="breadcrumb">
-                        <div class="inner">
-                            <span class="location">当前位置:</span>
-                            <el-breadcrumb :separator-icon="ArrowRight">
-                                <el-breadcrumb-item>
-                                    <NuxtLink to="/">首页</NuxtLink>
-                                </el-breadcrumb-item>
-                                <el-breadcrumb-item v-if="parent_name !=''">
-                                    <NuxtLink :to="`/${parent_pinyin}/index.html`"> {{ parent_name }}</NuxtLink>
-                                </el-breadcrumb-item>
-                                <el-breadcrumb-item>{{ name }}</el-breadcrumb-item>
-                            </el-breadcrumb>
-                        </div>
-                    </div>
-                    <ul class="list">
-                        <li v-for="(item, index) in newsList" :key="index">
-                            <NuxtLink :href="getLinkPathDetail(item)" :title="item.alias">
-                                <span class="listTitle">{{ item.title }}</span>
-                                <span class="time">{{ getTime(item.updated_at, 'month', 1) }}</span>
-                            </NuxtLink>
-                        </li>
-                    </ul>
-                    <!-- 分页器 -->
-                    <div class="pagination" v-if="total > 0">
-                        <el-pagination 
-                            size="small" 
-                            background 
-                            layout="prev, pager, next" 
-                            :total="total" 
-                            class="mt-4"
-                            :page-size="pageSize" 
-                            :current-page="pageNum"
-                            prev-text="上一页" 
-                            next-text="下一页" 
-                            @current-change="changePage" 
-                        />
-                    </div>
-                </div>
-                <div class="innerRight">
-                    <DetailHotNews></DetailHotNews>
-                    <DetailHotNews2></DetailHotNews2>
-                </div>
-            </div>
-        </div>
-        <!-- 列表页广告二 -->
-        <HomeTopTen :imgurl="adImg2" v-if="adImg2"></HomeTopTen>
-        <!-- 页面底部 -->
-        <HomeFoot1></HomeFoot1>
+    <div>
+        <GoodsListSec v-if="routeType == 2"></GoodsListSec>
+        <NewsListSec v-if="routeType == 1"></NewsListSec>
     </div>
 </template>
 
 <script setup>
-//1.页面必备依赖 start ---------------------------------------->
-import { ElBreadcrumb, ElBreadcrumbItem, ElPagination } from 'element-plus'
-import { ArrowRight } from '@element-plus/icons-vue'
+//0.加载页面依赖 start ---------------------------------------->
 import { ref, onMounted } from 'vue';
-//1.页面必备依赖 end ---------------------------------------->
-
-//2.路径 start---------------------------------------->
-//当前列表名称
-const route = useRoute();
-let articleId = 0;//列表需要使用的导航id 
-const targetSegment = getRoutePath(2);//根据路由反向查询导航id
-let pageNum = ref(1);//获得路由里面的分页数据
-
+import { ElMessage } from 'element-plus';
+//0.加载页面依赖 end ---------------------------------------->
+
+//1.获得路由id start ---------------------------------------->
+const targetSegment = getRoutePath(1);
+//1.1 获得当前的路由id
+let routeId;
+let routeType;
 //通过导航路径反向查询导航id
 const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
     method: 'GET',
@@ -85,175 +23,12 @@ const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
         'pinyin': targetSegment,
     },
 });
-if(getRouteId.code == 200){
-    articleId = getRouteId.data.category_id
-}else{
-    console.log("后端错误反馈:",getRouteId.message)
-}
-pageNum.value = parseInt(route.params.id);
-//2.路径 end---------------------------------------->
-
-//3.列表 start ---------------------------------------->
-let total = ref(1);
-let pageSize = ref(20);
-
-const newsList = ref([]);
-let newslists = async () => {
-    const listData = await requestDataPromise('/web/getWebsiteArticleList', {
-        method: 'GET',
-        query: {
-            'page': pageNum.value,
-            'pageSize': pageSize.value,
-            'catid': articleId
-        },
-    });
-    if (listData.code == 200) {
-        newsList.value = listData.data.rows;
-        total.value = listData.data.count;
-
-    } else {
-        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
-        console.log("错误位置:获取新闻列表")
-        console.log("后端错误反馈:", listData.message)
-        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
-    }
-}
-newslists();
-
-//分页
-let changePage = (value) => {
-    console.log("当前页码", value);
-    navigateTo(`/${targetSegment}/${value}.html`)
-}
-//3.列表 end ---------------------------------------->
-
-
-//4.面包屑 start---------------------------------------->
-//3.1 获得页面名称
-const name = ref('')
-let getPageName = async () => {
-    const pageName = await requestDataPromise('/web/getOneWebsiteCategory', {
-        method: 'GET',
-        query: {
-            'catid': articleId
-        },
-    });
-    if (pageName.code == 200) {
-        name.value = pageName.data.alias
-    } else {
-        console.log("错误位置:设置页面标题")
-    }
-}
-getPageName();
-
-//3.2 获得父级栏目
-const parent_name = ref([]);
-const parent_id = ref([]);
-const parent_pinyin = ref("");
-let getParentNav = async () => {
-    const listData = await requestDataPromise('/web/getOneWebsiteCategory', {
-        method: 'GET',
-        query: {
-            'catid': articleId
-        },
-    });
-    if (listData.code == 200) {
-        console.log(111999)
-        console.log(listData.data);
-        parent_name.value = listData.data.parent_name;
-        parent_id.value = listData.data.parent_id;
-        parent_pinyin.value = listData.data.parent_pinyin;
-    } else {
-        console.log("错误位置:获取父级栏目")
-    }
-    getSecondNav();
-}
-getParentNav();
-
-// 3.3获取二级栏目
-const secondNav = ref([]);
-let getSecondNav = async () => {
-    const listData = await requestDataPromise('/web/getWebsiteModelCategory', {
-        method: 'GET',
-        query: {
-            'placeid': 1,
-            'pid': parent_id.value,
-            'num': 20,
-        },
-    });
-    console.log('listData', listData);
-
-    if (listData.code == 200) {
-        secondNav.value = listData.data;
-    } else {
-        console.log("错误位置:获取二级栏目列表")
-    }
-}
-//4.面包屑 end ---------------------------------------->
-
-
-//5.设置seo信息 start---------------------------------------->
-const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
-    method: 'GET',
-    query: {
-        'catid': articleId
-    },
-});
-
-if (setData.code == 200) {
-    let seoTitle = setData.data.seo_title;
-    let seoDescription = setData.data.seo_description;
-    let seoKeywords = setData.data.seo_keywords;
-    let seoSuffix = setData.data.suffix;
-    let seoName = setData.data.website_name;
-
-    useSeoMeta({
-        title: seoTitle + "_" + seoName + "_" + seoSuffix,
-        meta: [
-            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix , tagPriority: 10 },
-            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix , tagPriority: 10 }
-        ]
-    });
+if (getRouteId.code == 200) {
+    console.log('getRouteId', getRouteId.data);
+    routeId = getRouteId.data.category_id
+    routeType = getRouteId.data.type
 } else {
-    console.log("错误位置:设置列表页面SEO数据")
+    console.log("获得路由id出错!", getRouteId.message)
 }
-//5.设置seo信息 end---------------------------------------->
-
-//6.广告 start---------------------------------------->
-let adImg1 = ref({});
-let adImg2 = ref({});
-
-onMounted(async ()  => {
-    //从客户端获取行政职能部门 加快打开速度
-    const { $webUrl, $CwebUrl } = useNuxtApp();
-    //广告1
-    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_list_0001`
-    const responseAd1 = await fetch(url, {
-        headers: {
-            'Content-Type': 'application/json',
-            'Userurl': $CwebUrl,
-            'Origin': $CwebUrl
-        }
-    });
-    const resultAd1 = await responseAd1.json();
-    adImg1.value = resultAd1.data[0];
-    
-    //广告2
-    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_list_0002`
-    const responseAd2 = await fetch(url2, {
-        headers: {
-            'Content-Type': 'application/json',
-            'Userurl': $CwebUrl,
-            'Origin': $CwebUrl
-        }
-    });
-    const resultAd2 = await responseAd2.json();
-    adImg2.value = resultAd2.data[0];
-
-})
-//6.广告 end---------------------------------------->
-</script>
-
-<style lang="less" scoped>
-@import url('@/assets/css/list.less');
-</style>
+//1.获得路由id end ---------------------------------------->
+</script>

+ 16 - 231
pages/[dir]/[id].vue

@@ -1,81 +1,22 @@
 <template>
-    <!-- 页面头部 -->
-    <HomePageHead></HomePageHead>
-    <!-- 导航栏 -->
-    <HomePageNavigation></HomePageNavigation>
-    <!-- 列表页广告一 -->
-    <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
-
-    <!-- 资讯列表 -->
-    <div class="newsDetail">
-        <div class="inner">
-            <div class="innerLeft">
-                <!-- 面包屑导航 -->
-                <div class="breadcrumb">
-                    <div class="inner">
-                        <span class="location">当前位置:</span>
-                        <el-breadcrumb :separator-icon="ArrowRight">
-                            <el-breadcrumb-item>
-                                <NuxtLink to="/">首页</NuxtLink>
-                            </el-breadcrumb-item>
-                            <el-breadcrumb-item v-if="parent_name != ''">
-                                <NuxtLink :to="`/${parent_pinyin}/index.html`"> {{ parent_name }}</NuxtLink>
-                            </el-breadcrumb-item>
-                            <el-breadcrumb-item>{{ getTitleLength(routeNewsTtitle, 20) }}</el-breadcrumb-item>
-                        </el-breadcrumb>
-                    </div>
-                </div>
-                <div class="LeftTop">
-                    <h1>{{ newsDetail.title }}</h1>
-                    <p>
-                        来源: <span>{{ newsDetail.copyfrom }}</span>
-                        作者: <span>{{ newsDetail.author }}</span>
-                        发布时间: <span>{{ time }}</span>
-                    </p>
-                </div>
-                <div class="leftBottom" v-html="newsDetail.content" v-if="newsDetail.content" @click="openPreview">
-                </div>
-                <div v-if="previewVisible" class="preview-modal" @click="closePreview">
-                    <img :src="selectedImage" alt="Preview">
-                </div>
-                <!-- 免责声明: -->
-                <div class="disclaimer" v-if="newsDetail.copyfrom != '本网'">
-                    <p>原文链接:{{ newsDetail.fromurl }}</p>
-                    <p>[免责声明]本文来源于网络转载,仅供学习交流使用,不构成商业目的。 版权归原作者所有,如涉及作品内容,版权和其他问题,请在30日与本网联系,我们将第一时间处理。</p>
-                </div>
-                <div v-if="articleChoice">
-                    <HomeSurveyvote></HomeSurveyvote>
-                </div>
-            </div>
-            <div class="innerRight">
-                <!-- 热点资讯1 -->
-                <div class="hotList1">
-                    <DetailHotNews></DetailHotNews>
-                </div>
-                <!-- 热点资讯2 -->
-                <div class="hotList2">
-                    <DetailHotNews2></DetailHotNews2>
-                </div>
-            </div>
-        </div>
+    <div>
+        <GoodsDetail v-if="routeType == 2"></GoodsDetail>
+        <NewsDetail v-if="routeType == 1"></NewsDetail>
     </div>
-
-    <!-- 列表页广告二 -->
-    <HomeTopTen :imgurl="adImg2" v-if="adImg2"></HomeTopTen>
-    <!-- 页面底部 -->
-    <HomeFoot1></HomeFoot1>
 </template>
 
 <script setup>
-//1.页面依赖 start ---------------------------------------->
-import { onMounted } from 'vue'
-import { ElBreadcrumb, ElBreadcrumbItem } from 'element-plus'
-import { ArrowRight } from '@element-plus/icons-vue'
-//1.页面依赖 end ---------------------------------------->
+//0.加载页面依赖 start ---------------------------------------->
+import { ref, onMounted } from 'vue';
+import { ElMessage } from 'element-plus';
+//0.加载页面依赖 end ---------------------------------------->
 
-//2.页面路径 start ---------------------------------------->
+//1.获得路由id start ---------------------------------------->
 const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+//1.1 获得当前的路由id
 let routeId;
+let routeType;
 //通过导航路径反向查询导航id
 const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
     method: 'GET',
@@ -84,167 +25,11 @@ const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
     },
 });
 if (getRouteId.code == 200) {
+    console.log('getRouteId', getRouteId.data);
     routeId = getRouteId.data.category_id
+    routeType = getRouteId.data.type
 } else {
-    console.log("错误位置:获得页面路径")
-}
-//2.页面路径 start ---------------------------------------->
-
-//3.面包屑 start ---------------------------------------->
-const route = useRoute();
-const articleId = parseInt(route.params.id); //获得该页面的id
-
-//3.1 获得父级栏目的名称、id
-const parent_name = ref([]);
-const parent_id = ref([]);
-const parent_pinyin = ref("");
-const parent_children_count = ref(0)
-let getParentNav = async () => {
-    const listData = await requestDataPromise('/web/getOneWebsiteCategory', {
-        method: 'GET',
-        query: {
-            'catid': routeId
-        },
-    });
-    if (listData.code == 200) {
-
-        console.log(778899)
-        console.log(listData.data)
-        parent_name.value = listData.data.alias;
-        parent_id.value = listData.data.parent_id;
-        parent_pinyin.value = listData.data.aLIas_pinyin;
-        parent_children_count.value = listData.data.children_count;
-    } else {
-        console.log("错误位置:获取面包屑导航")
-    }
-}
-getParentNav();
-//3.页面依赖 end ---------------------------------------->
-
-//4.页面数据 start ---------------------------------------->
-//4.1 资讯详情
-const newsDetail = ref({})
-const routeNewsTtitle = ref("");
-//4.2 发布日期
-const time = ref("");
-//4.3 路径
-const routLevelTitle = ref("");
-const routLevelId = ref("");
-//4.4 是否展示投票
-const articleChoice = ref(false);
-//4.5 获取详情
-async function getPageData() {
-    const mkdata = await requestDataPromise('/web/selectWebsiteArticleInfo', {
-        method: 'GET',
-        query: {
-            'articleid': articleId
-        },
-    });
-    if (mkdata.code == 200) {
-        //判断是否显示投票
-        if (mkdata.data.is_survey == 1) {
-            console.log("本篇文章含有投票!")
-            articleChoice.value = true;
-
-        }
-        //获取内容
-        newsDetail.value = mkdata.data;
-        //获取路径
-        routLevelTitle.value = newsDetail.value.cat_name;
-        routLevelId.value = newsDetail.value.category_id;
-        //获取发布时间
-        time.value = newsDetail.value.updated_at.split(' ')[0];
-        //修正标题长度
-        if (newsDetail.value.title.length >= 30) {
-            routeNewsTtitle.value = newsDetail.value.title.substr(0, 30) + "...";
-        } else {
-            routeNewsTtitle.value = newsDetail.value.title
-        }
-    } else {
-        console.log("错误位置:获取详情内容")
-    }
-}
-getPageData();
-//4.页面数据 end ---------------------------------------->
-
-//5.广告 start ---------------------------------------->
-let adImg1 = ref([]);
-let adImg2 = ref([]);
-onMounted(async () => {
-    const { $webUrl, $CwebUrl } = useNuxtApp();
-    //广告1
-    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0001`
-    const responseAd1 = await fetch(url, {
-        headers: {
-            'Content-Type': 'application/json',
-            'Userurl': $CwebUrl,
-            'Origin': $CwebUrl
-        }
-    });
-    const resultAd1 = await responseAd1.json();
-    adImg1.value = resultAd1.data[0];
-
-    //广告2
-    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_detail_0002`
-    const responseAd2 = await fetch(url2, {
-        headers: {
-            'Content-Type': 'application/json',
-            'Userurl': $CwebUrl,
-            'Origin': $CwebUrl
-        }
-    });
-    const resultAd2 = await responseAd2.json();
-    adImg2.value = resultAd2.data[0];
-})
-//5.广告 end ---------------------------------------->
-
-//6.设置seo信息 start---------------------------------------->
-const setData = await requestDataPromise('/web/selectWebsiteArticleInfo', {
-    method: 'GET',
-    query: {
-        'articleid': articleId
-    },
-});
-if (setData.code == 200) {
-    let seoTitle = setData.data.title;
-    let seoDescription = setData.data.introduce;
-    let seoKeywords = setData.data.keyword;
-    let seoSuffix = setData.data.suffix;
-    let seoName = setData.data.website_name;
-
-    useSeoMeta({
-        title: seoTitle + "_" + seoName + "_" + seoSuffix,
-        meta: [
-            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
-            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
-        ]
-    });
-} else {
-    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
-    console.log("错误位置:设置详情页面SEO数据")
-    console.log("后端错误反馈:", setData.message)
-    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    console.log("获得路由id出错!", getRouteId.message)
 }
-//6.设置seo信息 end---------------------------------------->
-
-
-
-//8.页面图片放大 start---------------------------------------->
-const previewVisible = ref(false)
-const selectedImage = ref(' ')
-
-const openPreview = (event) => {
-    if (event.target.tagName === 'IMG') {
-        selectedImage.value = event.target.src;
-        previewVisible.value = true;
-    }
-}
-const closePreview = () => {
-    previewVisible.value = false;
-}
-//8.页面图片放大 end---------------------------------------->
-</script>
-
-<style lang="less" scoped>
-@import url('@/assets/css/detail.less');
-</style>
+//1.获得路由id end ---------------------------------------->
+</script>

+ 63 - 340
pages/[dir]/index.html.vue

@@ -1,300 +1,7 @@
 <template>
     <div>
-        <HomePageHead></HomePageHead>
-        <HomePageNavigation></HomePageNavigation>
-        <HomeSecondaryHeading :titleData="pageData" :pinyinid="routeId"></HomeSecondaryHeading>
-        <!-- 频道页 -->
-        <main class="index_main">
-            <section class="channel_1 clearfix">
-                <div class="channel_1_box clearfix">
-                    <div class="roll_1_box clearfix">
-                        <HomeSwiperNzgx :imgData="pageData[0].data"></HomeSwiperNzgx>
-                    </div>
-                </div>
-                <div class="channel_2_box clearfix">
-                    <div class="channel_ul_1 clearfix">
-                        <NuxtLink class="channel_ul_1_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
-                            v-for="item in pageData[0].data2" :key="item.id"
-                            :target="item.islink == 1 ? '_blank' : '_self'">
-                            {{ item.title }}
-                        </NuxtLink>
-                    </div>
-                </div>
-            </section>
-            <!-- 广告 1-->
-            <HomeAdvertising :imgurl="adImg1"></HomeAdvertising>
-            <section class="channel_2 clearfix">
-                <div class="channel_1_box" v-if="pageData.length > 1">
-                    <div class="channel_head_box clearfix">
-                        <div class="channel_head_box_left">
-                            <div class="channel_head_left_a_btn">
-                                <NuxtLink class="channel_head_left_a channel_head_left_a_only"
-                                    :href="getLinkPath(pageData[1])" v-if="pageData[1]" :title="pageData[1].alias">
-                                    {{ pageData[1].alias }}
-                                </NuxtLink>
-                            </div>
-                        </div>
-                    </div>
-                    <div class=" clearfix">
-                        <div class="channel_3_box clearfix">
-                            <div class="channel_ul_2 clearfix" v-if="pageData[1]">
-                                <NuxtLink class="channel_ul_2_a dot1" :href="getLinkPathDetail(item)"
-                                    :title="item.title" v-for="item in pageData[1].data3" :key="item.id"
-                                    :target="item.islink == 1 ? '_blank' : '_self'">
-                                    {{ item.title }}
-                                </NuxtLink>
-                            </div>
-                        </div>
-                        <div class="channel_4_box clearfix">
-                            <div class="channel_img_ul_1">
-                                <div class="channel_img_ul_1_li" v-if="pageData[1]">
-                                    <NuxtLink class="channel_img_ul_1_li_a" :href="getLinkPathDetail(item)"
-                                        :title="item.title" v-for="item in pageData[1].data" :key="item.id"
-                                        :target="item.islink == 1 ? '_blank' : '_self'">
-                                        <img class="channel_img_ul_1_li_img" :src="item.imgurl" alt="item.imgurl">
-                                        <div class="channel_img_ul_1_li_dot2 dot2">
-                                            {{ item.title }}
-                                        </div>
-                                    </NuxtLink>
-                                </div>
-                            </div>
-                            <div class="channel_img_ul_even_1 clearfix" v-if="pageData[1]">
-                                <div class="channel_img_ul_even_1_li" v-for="item in pageData[1].data2">
-                                    <NuxtLink class="channel_img_ul_even_1_li_a" :href="getLinkPathDetail(item)"
-                                        :title="item.title" :key="item.id"
-                                        :target="item.islink == 1 ? '_blank' : '_self'">
-                                        <img class="channel_img_ul_even_1_li_img" :src="item.imgurl" alt="item.imgurl">
-                                        <div class="channel_img_ul_even_1_li_dot2 dot2">
-                                            {{ item.title }}
-                                        </div>
-                                    </NuxtLink>
-                                </div>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="channel_2_box" v-if="pageData.length > 2">
-                    <div class="channel_head_box clearfix">
-                        <div class="channel_head_box_left">
-                            <div class="channel_head_left_a_btn">
-                                <NuxtLink class="channel_head_left_a channel_head_left_a_only"
-                                    :href="getLinkPath(pageData[2])" v-if="pageData[2]" :title="pageData[2].alias">
-                                    {{ pageData[2].alias }}
-                                </NuxtLink>
-                            </div>
-                        </div>
-                        <div class="channel_head_box_right">
-                            <NuxtLink class="channel_head_box_right_1_a" :href="getLinkPath(pageData[2])"
-                                v-if="pageData[2]" :title="pageData[2].alias">
-                                栏目简介
-                            </NuxtLink>
-                        </div>
-                    </div>
-                    <div class=" clearfix">
-                        <div class="channel_even_img_ul_2 clearfix" v-if="pageData[2]">
-                            <div class="channel_even_img_ul_2_li" v-for="item in pageData[2].data">
-                                <NuxtLink class="channel_even_img_ul_2_a" :href="getLinkPathDetail(item)"
-                                    :title="item.title" :key="item.id" :target="item.islink == 1 ? '_blank' : '_self'">
-                                    <img class="channel_even_img_ul_2_li_img" :src="item.imgurl" alt="item.title">
-                                    <div class="channel_even_img_ul_2_dot1 dot1">{{ item.title }}</div>
-                                </NuxtLink>
-                            </div>
-                        </div>
-                        <div class="channel_ul_3 clearfix" v-if="pageData[2]">
-                            <NuxtLink class="channel_ul_3_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
-                                v-for="item in pageData[2].data2" :key="item.id"
-                                :target="item.islink == 1 ? '_blank' : '_self'">
-                                {{ item.title }}
-                            </NuxtLink>
-                        </div>
-                    </div>
-                </div>
-            </section>
-            <section class="channel_3 clearfix">
-                <div class="channel_1_box" v-if="pageData.length > 3">
-                    <div class="channel_head_box clearfix">
-                        <div class="channel_head_box_left">
-                            <div class="channel_head_left_a_btn">
-                                <NuxtLink class="channel_head_left_a channel_head_left_a_only"
-                                    :href="getLinkPath(pageData[3])" v-if="pageData[3]" :title="pageData[3].alias">
-                                    {{ pageData[3].alias }}
-                                </NuxtLink>
-                            </div>
-                        </div>
-                        <div class="channel_head_box_right">
-                            <NuxtLink class="channel_head_box_right_1_a" :href="getLinkPath(pageData[3])"
-                                v-if="pageData[3]" :title="pageData[3].alias">
-                                栏目简介
-                            </NuxtLink>
-                        </div>
-                    </div>
-                    <div class=" clearfix">
-                        <div class="channel_ul_4 clearfix" v-if="pageData[3]">
-                            <NuxtLink class="channel_ul_4_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
-                                v-for="item in pageData[3].data2" :key="item.id"
-                                :target="item.islink == 1 ? '_blank' : '_self'">
-                                {{ item.title }}
-                            </NuxtLink>
-                        </div>
-                    </div>
-                </div>
-                <div class="channel_2_box" v-if="pageData.length > 4">
-                    <div class="channel_head_box clearfix">
-                        <div class="channel_head_box_left">
-                            <div class="channel_head_left_a_btn">
-                                <NuxtLink class="channel_head_left_a channel_head_left_a_only"
-                                    :href="getLinkPath(pageData[4])" v-if="pageData[4]" :title="pageData[4].alias">
-                                    {{ pageData[4].alias }}
-                                </NuxtLink>
-                            </div>
-                        </div>
-                        <div class="channel_head_box_right">
-                            <NuxtLink class="channel_head_box_right_1_a" :href="getLinkPath(pageData[4])"
-                                v-if="pageData[4]" :title="pageData[4].alias">
-                                栏目简介
-                            </NuxtLink>
-                        </div>
-                    </div>
-                    <div class="channel_img_ul_2">
-                        <div class="channel_img_ul_2_li" v-if="pageData[4]">
-                            <NuxtLink class="channel_img_ul_2_li_a" :href="getLinkPathDetail(item)" :title="item.title"
-                                v-for="item in pageData[4].data" :key="item.id"
-                                :target="item.islink == 1 ? '_blank' : '_self'">
-                                <img class="channel_img_ul_2_li_img" :src="item.imgurl" alt="item.imgurl">
-                                <div class="channel_img_ul_2_li_dot2 dot2">{{ item.title }}</div>
-                            </NuxtLink>
-                        </div>
-                    </div>
-                </div>
-            </section>
-            <!-- 广告 2-->
-            <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
-            <section class="channel_4 clearfix">
-                <div class="channel_1_box">
-                    <div class="channel_head_box clearfix" v-if="pageData.length > 5">
-                        <div class="channel_head_box_left">
-                            <div class="channel_head_left_a_btn">
-                                <NuxtLink class="channel_head_left_a channel_head_left_a_only"
-                                    :href="getLinkPath(pageData[5])" v-if="pageData[5]" :title="pageData[5].alias">
-                                    {{ pageData[5].alias }}
-                                </NuxtLink>
-                            </div>
-                        </div>
-                        <div class="channel_head_box_right">
-                            <NuxtLink class="channel_head_box_right_1_a" :href="getLinkPath(pageData[5])"
-                                v-if="pageData[5]" :title="pageData[5].alias">
-                                栏目简介
-                            </NuxtLink>
-                        </div>
-                    </div>
-                    <div class=" clearfix" v-if="pageData.length > 5">
-                        <div class="channel_3_box clearfix">
-                            <div class="channel_img_ul_3_ul boxheight2">
-                                <div class="channel_img_ul_3_li" v-if="pageData[5]">
-                                    <NuxtLink class="channel_img_ul_3_li_a" :href="getLinkPathDetail(item)"
-                                        :title="item.title" v-for="item in pageData[5].data" :key="item.id"
-                                        :target="item.islink == 1 ? '_blank' : '_self'">
-                                        <img class="channel_img_ul_3_li_img" :src="item.imgurl" alt="item.title">
-                                        <div class="channel_img_ul_3_li_dot1 dot1">
-                                            {{ item.title }}
-                                        </div>
-                                    </NuxtLink>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="channel_4_box clearfix">
-                            <div class="channel_ul_5 clearfix" v-if="pageData[5]">
-                                <NuxtLink class="channel_ul_5_a dot1" :href="getLinkPathDetail(item)"
-                                    :title="item.title" v-for="item in pageData[5].data2" :key="item.id"
-                                    :target="item.islink == 1 ? '_blank' : '_self'">
-                                    {{ item.title }}
-                                </NuxtLink>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="channel_head_box clearfix channel_head_box_2" v-if="pageData.length > 6">
-                        <div class="channel_head_box_left">
-                            <div class="channel_head_left_a_btn">
-                                <NuxtLink class="channel_head_left_a channel_head_left_a_only"
-                                    :href="getLinkPath(pageData[6])" v-if="pageData[6]" :title="pageData[6].alias">
-                                    {{ pageData[6].alias }}
-                                </NuxtLink>
-                            </div>
-                        </div>
-                        <div class="channel_head_box_right">
-                            <NuxtLink class="channel_head_box_right_1_a" :href="getLinkPath(pageData[6])"
-                                v-if="pageData[6]" :title="pageData[6].alias">
-                                栏目简介
-                            </NuxtLink>
-                        </div>
-                    </div>
-                    <div class=" clearfix" v-if="pageData.length > 6">
-                        <div class="channel_3_box clearfix">
-                            <div class="channel_img_ul_4_ul">
-                                <div class="channel_img_ul_4_li" v-if="pageData[6]">
-                                    <NuxtLink class="channel_img_ul_4_li_a" :href="getLinkPathDetail(item)"
-                                        :title="item.title" v-for="item in pageData[6].data" :key="item.id"
-                                        :target="item.islink == 1 ? '_blank' : '_self'">
-                                        <img class="channel_img_ul_4_li_img" :src="item.imgurl" alt="item.title">
-                                        <div class="channel_img_ul_4_li_dot1 dot1">
-                                            {{ item.title }}
-                                        </div>
-                                    </NuxtLink>
-                                </div>
-                            </div>
-                        </div>
-                        <div class="channel_4_box clearfix">
-                            <div class="channel_ul_6 clearfix" v-if="pageData[6]">
-                                <NuxtLink class="channel_ul_6_a dot1" :href="getLinkPathDetail(item)"
-                                    :title="item.title" v-for="item in pageData[6].data2" :key="item.id"
-                                    :target="item.islink == 1 ? '_blank' : '_self'">
-                                    {{ item.title }}
-                                </NuxtLink>
-                            </div>
-                        </div>
-                    </div>
-                </div>
-                <div class="channel_2_box" v-if="pageData.length > 7">
-                    <div class="channel_head_box clearfix">
-                        <div class="channel_head_box_left">
-                            <div class="channel_head_left_a_btn">
-                                <NuxtLink class="channel_head_left_a channel_head_left_a_only"
-                                    :href="getLinkPath(pageData[7])" v-if="pageData[7]" :title="pageData[7].alias">
-                                    {{ pageData[7].alias }}
-                                </NuxtLink>
-                            </div>
-                        </div>
-                        <div class="channel_head_box_right">
-                            <NuxtLink class="channel_head_box_right_1_a" :href="getLinkPath(pageData[7])"
-                                v-if="pageData[7]" :title="pageData[7].alias">
-                                栏目简介
-                            </NuxtLink>
-                        </div>
-                    </div>
-                    <div class="boxheight1 clearfix">
-                        <div class="channel_img_ul_5_ul">
-                            <div class="channel_img_ul_5_li" v-if="pageData[7]">
-                                <NuxtLink class="channel_img_ul_5_li_a" :href="getLinkPathDetail(item)"
-                                    :title="item.title" v-for="item in pageData[7].data" :key="item.id"
-                                    :target="item.islink == 1 ? '_blank' : '_self'">
-                                    <img class="channel_img_ul_5_li_img" :src="item.imgurl" alt="item.title">
-                                    <div class="channel_img_ul_5_li_dot1 dot1">{{ item.title }}</div>
-                                </NuxtLink>
-                            </div>
-                        </div>
-                        <div class="index_ul_7 clearfix" v-if="pageData[7]">
-                            <NuxtLink class="index_ul_7_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
-                                v-for="item in pageData[7].data2" :key="item.id"
-                                :target="item.islink == 1 ? '_blank' : '_self'">
-                                {{ item.title }}
-                            </NuxtLink>
-                        </div>
-                    </div>
-                </div>
-            </section>
-        </main>
-        <!-- 页脚部分 -->
-        <HomeFoot1></HomeFoot1>
+        <NewsClass v-if="routeType == 1"></NewsClass>
+        <GoodsClass v-if="routeType == 2"></GoodsClass>
     </div>
 </template>
 
@@ -308,6 +15,7 @@ import { ElMessage } from 'element-plus';
 const targetSegment = getRoutePath(1);
 //1.1 获得当前的路由id
 let routeId;
+let routeType;
 //通过导航路径反向查询导航id
 const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
     method: 'GET',
@@ -315,24 +23,37 @@ const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
         'pinyin': targetSegment,
     },
 });
-console.log('mkdataRouteId', getRouteId);
-
 if (getRouteId.code == 200) {
+    console.log('getRouteId', getRouteId.data);
     routeId = getRouteId.data.category_id
-    console.log('mkdataRouteId1111', routeId);
-
+    routeType = getRouteId.data.type
 } else {
     console.log("获得路由id出错!", getRouteId.message)
 }
 //1.获得路由id end ---------------------------------------->
 
-//2.选项卡 start ---------------------------------------->
-let showTabs = ref(1)
-let qhtabs = function (number) {
-    console.log(number)
-    showTabs.value = number
+//2.页面交互效果 start ---------------------------------------->
+// 2.1 一级栏目
+const title = ref("")
+
+async function getPageDataTitle() {
+    const mkdata = await requestDataPromise('/web/getOneWebsiteCategory', {
+        method: 'GET',
+        query: {
+            'catid': routeId,
+        },
+    });
+    if (mkdata.code == 200) {
+        title.value = mkdata.data.alias;
+    } else {
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+        console.log("错误位置:获取二级标题")
+        console.log("后端错误反馈:", mkdata.message)
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    }
 }
-//2.选项卡 end ---------------------------------------->
+getPageDataTitle();
+//2.页面交互效果 end ---------------------------------------->
 
 //3.广告 start ---------------------------------------->
 let adImg1 = ref({})
@@ -343,7 +64,7 @@ onMounted(async () => {
     //从客户端获取行政职能部门 加快打开速度
     const { $webUrl, $CwebUrl } = useNuxtApp();
     //广告1
-    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_category_0001`
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nfcpgxw_category_0001`
     const responseAd1 = await fetch(url, {
         headers: {
             'Content-Type': 'application/json',
@@ -355,7 +76,7 @@ onMounted(async () => {
     adImg1.value = resultAd1.data[0];
 
     //广告2
-    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_category_0002`
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nfcpgxw_category_0002`
     const responseAd2 = await fetch(url2, {
         headers: {
             'Content-Type': 'application/json',
@@ -367,7 +88,7 @@ onMounted(async () => {
     adImg2.value = resultAd2.data[0];
 
     //广告3
-    let url3 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_category_0003`
+    let url3 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nfcpgxw_category_0003`
     const responseAd3 = await fetch(url3, {
         headers: {
             'Content-Type': 'application/json',
@@ -379,7 +100,7 @@ onMounted(async () => {
     adImg3.value = resultAd3.data[0];
 
     //广告4
-    let url4 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_category_0004`
+    let url4 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nfcpgxw_category_0004`
     const responseAd4 = await fetch(url4, {
         headers: {
             'Content-Type': 'application/json',
@@ -454,43 +175,38 @@ try {
                 //每个页面最多8个模块
                 pageData.value.push(data);
             }
-
         }
-        console.log("mkdata导航池加载完毕", pageData.value);
-
         //导航池加载完毕,开始申请模块数据
         let getJson = [
-            // { "parent": routeId + ",0,0", "child": pageData.value[0].cid + ",4,9" },//模块1 顶部没有标题的那个
-            // { "parent": routeId + ",0,0", "child": pageData.value[1].cid + ",3,11" },//模块2
-            // { "parent": routeId + ",0,0", "child": pageData.value[2].cid + ",2,7" },//模块3
-            // { "parent": routeId + ",0,0", "child": pageData.value[3].cid + ",0,8" },//模块4
-            // { "parent": routeId + ",0,0", "child": pageData.value[4].cid + ",1,0" },//模块5
-            // { "parent": routeId + ",0,0", "child": pageData.value[5].cid + ",1,6" },//模块6
-            // { "parent": routeId + ",0,0", "child": pageData.value[6].cid + ",1,6" },//模块7
-            // { "parent": routeId + ",0,0", "child": pageData.value[7].cid + ",1,7" },//模块8
+            // { "parent": routeId + ",0,0", "child": pageData.value[0].cid + ",4,8" },//模块1
+            // { "parent": routeId + ",0,0", "child": pageData.value[1].cid + ",2,8" },//模块2
+            // { "parent": routeId + ",0,0", "child": pageData.value[2].cid + ",1,6" },//模块3
+            // { "parent": routeId + ",0,0", "child": pageData.value[3].cid + ",6,0" },//模块4
+            // { "parent": routeId + ",0,0", "child": pageData.value[4].cid + ",2,3" },//模块5
+            // { "parent": routeId + ",0,0", "child": pageData.value[5].cid + ",1,0" },//模块6
+            // { "parent": routeId + ",0,0", "child": pageData.value[6].cid + ",3,10" },//模块7
+            // { "parent": routeId + ",0,0", "child": pageData.value[7].cid + ",1,6" },//模块8
         ]
         for (let i = 0; i < pageData.value.length; i++) {
             if (i == 0) {
-                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",4,9" });//模块1 
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",4,8" });
             } else if (i == 1) {
-                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",3,11" });//模块2 
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",2,8" });
             } else if (i == 2) {
-                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",2,7" });//模块3 
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",1,6" });
             } else if (i == 3) {
-                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",0,8" });//模块4 
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",6,0" });
             } else if (i == 4) {
-                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",1,0" });//模块5
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",2,3" });
             } else if (i == 5) {
-                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",1,6" });//模块6
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",1,0" });
             } else if (i == 6) {
-                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",1,6" });//模块7
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",3,10" });
             } else if (i == 7) {
-                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",1,7" });//模块8 
+                getJson.push({ "parent": routeId + ",0,0", "child": pageData.value[i].cid + ",1,6" });
             }
         }
         let jsonString = JSON.stringify(getJson);
-        console.log('mkdatajsonString', jsonString);
-
         getPageAllData(jsonString);
 
     } else {
@@ -508,7 +224,9 @@ async function getPageAllData(jsonString) {
             'id': jsonString
         },
     });
-    console.log('mkdata', mkdata.data);
+
+    console.log("频道页渲染的模块数据:", mkdata);
+
     if (mkdata.code == 200) {
         if (mkdata.data.length > 0) {
             //模块1 顶部大图和列表
@@ -517,12 +235,12 @@ async function getPageAllData(jsonString) {
         }
         if (mkdata.data.length > 1) {
             //模块2
-            pageData.value[1].data3 = mkdata.data[1].child.textnum;
-            for (let index in mkdata.data[1].child.imgnum) {
-                if (index < 1) {
-                    pageData.value[1].data.push(mkdata.data[1].child.imgnum[index]);
+            pageData.value[1].data = mkdata.data[1].child.imgnum;
+            for (let index in mkdata.data[1].child.textnum) {
+                if (index < 4) {
+                    pageData.value[1].data2.push(mkdata.data[1].child.textnum[index]);
                 } else {
-                    pageData.value[1].data2.push(mkdata.data[1].child.imgnum[index]);
+                    pageData.value[1].data3.push(mkdata.data[1].child.textnum[index]);
                 }
             }
         }
@@ -534,21 +252,26 @@ async function getPageAllData(jsonString) {
         if (mkdata.data.length > 3) {
             //模块4
             pageData.value[3].data = mkdata.data[3].child.imgnum;
-            pageData.value[3].data2 = mkdata.data[3].child.textnum;
         }
         if (mkdata.data.length > 4) {
             //模块5
             pageData.value[4].data = mkdata.data[4].child.imgnum;
+            pageData.value[4].data2 = mkdata.data[4].child.textnum;
         }
         if (mkdata.data.length > 5) {
             //模块6
             pageData.value[5].data = mkdata.data[5].child.imgnum;
-            pageData.value[5].data2 = mkdata.data[5].child.textnum;
         }
         if (mkdata.data.length > 6) {
             //模块7
-            pageData.value[6].data = mkdata.data[6].child.imgnum;
-            pageData.value[6].data2 = mkdata.data[6].child.textnum;
+            for (let index in mkdata.data[6].child.imgnum) {
+                if (index < 1) {
+                    pageData.value[6].data.push(mkdata.data[6].child.imgnum[index]);
+                } else {
+                    pageData.value[6].data2.push(mkdata.data[6].child.imgnum[index]);
+                }
+            }
+            pageData.value[6].data3 = mkdata.data[6].child.textnum;
         }
         if (mkdata.data.length > 7) {
             //模块8

+ 17 - 238
pages/[dir]/list-[id].vue

@@ -1,79 +1,21 @@
 <template>
-    <div id="newsList">
-        <!-- 页面头部 -->
-        <HomePageHead></HomePageHead>
-        <!-- 导航栏 -->
-        <HomePageNavigation></HomePageNavigation>
-        <!-- 列表页广告一 -->
-        <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
-        <!-- 资讯列表 -->
-        <div class="newsList">
-            <div class="inner">
-                <div class="innerLeft">
-                    <!-- 面包屑导航 -->
-                    <div class="breadcrumb">
-                        <div class="inner">
-                            <span class="location">当前位置:</span>
-                            <el-breadcrumb :separator-icon="ArrowRight">
-                                <el-breadcrumb-item>
-                                    <NuxtLink to="/">首页</NuxtLink>
-                                </el-breadcrumb-item>
-                                <el-breadcrumb-item v-if="parent_name !=''">
-                                    <NuxtLink :to="`/${parent_pinyin}/index.html`"> {{ parent_name }}</NuxtLink>
-                                </el-breadcrumb-item>
-                                <el-breadcrumb-item class="nameBox">{{ name }}</el-breadcrumb-item>
-                            </el-breadcrumb>
-                        </div>
-                    </div>
-                    <ul class="list">
-                        <li v-for="(item, index) in newsList" :key="index">
-                            <NuxtLink :href="getLinkPathDetail(item)" :title="item.alias">
-                                <span class="listTitle">{{ item.title }}</span>
-                                <span class="time">{{ getTime(item.updated_at, 'month', 1) }}</span>
-                            </NuxtLink>
-                        </li>
-                    </ul>
-                    <!-- 分页器 -->
-                    <div class="pagination" v-if="total > 0">
-                        <el-pagination 
-                            size="small" 
-                            background 
-                            layout="prev, pager, next" 
-                            :total="total" 
-                            class="mt-4"
-                            :page-size="pageSize" 
-                            :current-page="pageNum"
-                            prev-text="上一页" 
-                            next-text="下一页" 
-                            @current-change="changePage" 
-                        />
-                    </div>
-                </div>
-                <div class="innerRight">
-                    <DetailHotNews></DetailHotNews>
-                    <DetailHotNews2></DetailHotNews2>
-                </div>
-            </div>
-        </div>
-        <!-- 列表页广告二 -->
-        <HomeTopTen :imgurl="adImg2" v-if="adImg2"></HomeTopTen>
-        <!-- 页面底部 -->
-        <HomeFoot1></HomeFoot1>
+    <div>
+        <GoodsListOne v-if="routeType == 2"></GoodsListOne>
+        <NewsList v-if="routeType == 1"></NewsList>
     </div>
 </template>
 
 <script setup>
-//1.页面必备依赖 start ---------------------------------------->
-import { ElBreadcrumb, ElBreadcrumbItem, ElPagination } from 'element-plus';
-import { ArrowRight } from '@element-plus/icons-vue';
+//0.加载页面依赖 start ---------------------------------------->
 import { ref, onMounted } from 'vue';
-//1.页面必备依赖 end ---------------------------------------->
+import { ElMessage } from 'element-plus';
+//0.加载页面依赖 end ---------------------------------------->
 
-//2.页面路径 start ---------------------------------------->
-const route = useRoute();
-let articleId = 0; //获取哪个导航下的列表
-//2.1 获得当前的完整路径
+//1.获得路由id start ---------------------------------------->
 const targetSegment = getRoutePath(1);
+//1.1 获得当前的路由id
+let routeId;
+let routeType;
 //通过导航路径反向查询导航id
 const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
     method: 'GET',
@@ -81,175 +23,12 @@ const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
         'pinyin': targetSegment,
     },
 });
-if(getRouteId.code == 200){
-    articleId = getRouteId.data.category_id
-}else{
-    console.log("错误位置:获得页面路径")
-}
-//2.页面路径 end ---------------------------------------->
-
-//3.页面数据 start ---------------------------------------->
-let pageNum = ref(2); //当前页码
-pageNum.value = parseInt(route.params.id);//路由中传递的分页页码
-let total = ref(1); //总条数
-let pageSize = ref(20); //每页条数
-
-//3.1 新闻列表
-const newsList = ref([]);
-let newslists = async () => {
-    const listData = await requestDataPromise('/web/getWebsiteArticleList', {
-        method: 'GET',
-        query: {
-            'page': pageNum.value,
-            'pageSize': pageSize.value,
-            'catid': articleId
-        },
-    });
-    if (listData.code == 200) {
-        newsList.value = listData.data.rows;
-        total.value = listData.data.count;
-
-    } else {
-        console.log("错误位置:获取新闻列表")
-    }
-}
-//获得列表
-newslists();
-
-//3.2 分页事件
-let changePage = (value) => {
-    console.log("当前页码", value);
-    navigateTo(`/${targetSegment}/list-${value}.html`)
-}
-//3.页面数据 end ---------------------------------------->
-
-//4.面包屑 start ---------------------------------------->
-const name = ref('')
-//4.1 当前频道名称
-let getPageName = async () => {
-    const pageName = await requestDataPromise('/web/getOneWebsiteCategory', {
-        method: 'GET',
-        query: {
-            'catid': articleId
-        },
-    });
-    if (pageName.code == 200) {
-        name.value = pageName.data.alias
-    } else {
-        console.log("错误位置:获取当前频道名称", pageName.message)
-    }
-}
-getPageName();
-
-//4.2 查询是否含有父级导航
-const parent_name = ref([]);
-const parent_id = ref([]);
-const parent_pinyin = ref("");
-let getParentNav = async () => {
-    const listData = await requestDataPromise('/web/getOneWebsiteCategory', {
-        method: 'GET',
-        query: {
-            'catid': articleId
-        },
-    });
-    if (listData.code == 200) {
-        parent_name.value = listData.data.parent_name;
-        parent_id.value = listData.data.parent_id;
-        parent_pinyin.value = listData.data.parent_pinyin;
-    } else {
-        console.log("错误位置:查询父级导航信息")
-    }
-    getSecondNav();
-}
-getParentNav();
-
-//4.3 获取二级栏目列表
-const secondNav = ref([]);
-let getSecondNav = async () => {
-    const listData = await requestDataPromise('/web/getWebsiteModelCategory', {
-        method: 'GET',
-        query: {
-            'placeid': 1,
-            'pid': parent_id.value,
-            'num': 8,
-        },
-    });
-    console.log('listData', listData);
-
-    if (listData.code == 200) {
-        secondNav.value = listData.data
-    } else {
-        console.log("错误位置:获得二级栏目列表")
-    }
-}
-//4.面包屑 end ---------------------------------------->
-
-//5.设置seo信息 start---------------------------------------->
-const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
-    method: 'GET',
-    query: {
-        'catid': articleId
-    },
-});
-
-if (setData.code == 200) {
-    let seoTitle = setData.data.seo_title;
-    let seoDescription = setData.data.seo_description;
-    let seoKeywords = setData.data.seo_keywords;
-    let seoSuffix = setData.data.suffix;
-    let seoName = setData.data.website_name;
-
-    useSeoMeta({
-        title: seoTitle + "_" + seoName + "_" + seoSuffix,
-        meta: [
-            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix , tagPriority: 10 },
-            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix , tagPriority: 10 }
-        ]
-    });
+if (getRouteId.code == 200) {
+    console.log('getRouteId', getRouteId.data);
+    routeId = getRouteId.data.category_id
+    routeType = getRouteId.data.type
 } else {
-    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
-    console.log("错误位置:设置列表页面SEO数据")
-    console.log("后端错误反馈:", setData.message)
-    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    console.log("获得路由id出错!", getRouteId.message)
 }
-//5.设置seo信息 end---------------------------------------->
-
-//6.广告 start---------------------------------------->
-let adImg1 = ref({});
-let adImg2 = ref({});
-
-onMounted(async ()  => {
-
-    //从客户端获取行政职能部门 加快打开速度
-    const { $webUrl, $CwebUrl } = useNuxtApp();
-    //广告1
-    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_list_0001`
-    const responseAd1 = await fetch(url, {
-        headers: {
-            'Content-Type': 'application/json',
-            'Userurl': $CwebUrl,
-            'Origin': $CwebUrl
-        }
-    });
-    const resultAd1 = await responseAd1.json();
-    adImg1.value = resultAd1.data[0];
-    
-    //广告2
-    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=nzgxw_list_0002`
-    const responseAd2 = await fetch(url2, {
-        headers: {
-            'Content-Type': 'application/json',
-            'Userurl': $CwebUrl,
-            'Origin': $CwebUrl
-        }
-    });
-    const resultAd2 = await responseAd2.json();
-    adImg2.value = resultAd2.data[0];
-
-})
-//6.广告 end---------------------------------------->
-</script>
-
-<style lang="less" scoped>
-@import url('@/assets/css/list.less');
-</style>
+//1.获得路由id end ---------------------------------------->
+</script>

File diff suppressed because it is too large
+ 202 - 488
pages/index.vue


+ 24 - 17
plugins/category.ts

@@ -1,20 +1,24 @@
 
 //master 环境
 const navMaster: number[] = [
-    1787,
-    1811,
-    1646,
-    1746,
-    470,
-    1637,
-    1818,
-    1834,
-    1843,
-    1833,
-    1852,
-    1824,
-    1645,
-    1654
+    1787,//1
+    1811,//2
+    1646,//3
+    1746,//4
+    470,//5
+    1637,//6
+    1818,//7
+    1834,//8
+    1843,//9
+    1833,//10
+    1852,//11
+    1824,//12
+    1645,//13
+    1654,//14
+    
+    1746,//15 供求信息
+    1747,//16 供求信息的二级栏目
+
 ]
 
 
@@ -32,12 +36,15 @@ const navPre: number[] = [
     533,//模块11 行业报告
     530,//模块12 专家服务
     586,//子导航 法律法规 - 属于政策法规
-    585//子导航 三农新闻 - 属于动态资讯
+    585,//子导航 三农新闻 - 属于动态资讯
+
+    565,//供求信息
+    758,//供求信息二级栏目
 ]
 
 export default defineNuxtPlugin((nuxtApp) => {
     //master 环境
-    nuxtApp.provide('pageNav', navMaster)
+    // nuxtApp.provide('pageNav', navMaster)
     //pre 环境
-    // nuxtApp.provide('pageNav', navPre)
+    nuxtApp.provide('pageNav', navPre)
 })

+ 10 - 10
plugins/globals.ts

@@ -1,16 +1,16 @@
 export default defineNuxtPlugin((nuxtApp) => {
   //Pre环境
-  // nuxtApp.provide('webUrl', 'http://apipre1.bjzxtw.org.cn:29501')
-  // nuxtApp.provide('CwebUrl', 'http://pre.nzgx.org')
-  // nuxtApp.provide('BwebUrl', 'http://adminpre.bjzxtw.org.cn')
-  // nuxtApp.provide('LoginWebUrl', 'http://adminpre.bjzxtw.org.cn/adminapi')
-  // nuxtApp.provide('userUrl', 'http://localhost:3006')
+  nuxtApp.provide('webUrl', 'http://apipre1.bjzxtw.org.cn:29501')
+  nuxtApp.provide('CwebUrl', 'http://pre.nzgx.org')
+  nuxtApp.provide('BwebUrl', 'http://adminpre.bjzxtw.org.cn')
+  nuxtApp.provide('LoginWebUrl', 'http://adminpre.bjzxtw.org.cn/adminapi')
+  nuxtApp.provide('userUrl', 'http://localhost:3006')
 
   //正式环境
-  nuxtApp.provide('webUrl', 'https://flzxw.bjzxtw.org.cn')
-  nuxtApp.provide('CwebUrl', 'http://nw.nzgx.org')
-  nuxtApp.provide('BwebUrl', 'https://admin.bjzxtw.org.cn')
-  nuxtApp.provide('LoginWebUrl', 'http://admin.bjzxtw.org.cn/adminapi')
-  nuxtApp.provide('userUrl', 'http://localhost:3006')
+  // nuxtApp.provide('webUrl', 'https://flzxw.bjzxtw.org.cn')
+  // nuxtApp.provide('CwebUrl', 'http://nw.nzgx.org')
+  // nuxtApp.provide('BwebUrl', 'https://admin.bjzxtw.org.cn')
+  // nuxtApp.provide('LoginWebUrl', 'http://admin.bjzxtw.org.cn/adminapi')
+  // nuxtApp.provide('userUrl', 'http://localhost:3006')
   
 })

+ 5 - 5
plugins/request.ts

@@ -6,11 +6,11 @@ export default defineNuxtPlugin(() => {
 
     let Url = {
         //正式环境
-        webUrl: 'https://flzxw.bjzxtw.org.cn', //接口地址
-        CwebUrl: 'nw.nzgx.org' //页面地址
-        //pre环境
-        // webUrl: 'http://apipre1.bjzxtw.org.cn:29501', //pre接口地址
-        // CwebUrl: 'pre.nzgx.org' //页面地址
+        // webUrl: 'https://flzxw.bjzxtw.org.cn', //接口地址
+        // CwebUrl: 'nw.nzgx.org' //页面地址
+        // //pre环境
+        webUrl: 'http://apipre1.bjzxtw.org.cn:29501', //pre接口地址
+        CwebUrl: 'pre.nzgx.org' //页面地址
     }
 
     const service = axios.create({

BIN
public/img/8.png


BIN
public/img/9.png


BIN
public/shop/01.png


BIN
public/shop/02.png


BIN
public/topic/empty.png


Some files were not shown because too many files changed in this diff