Jing пре 1 недеља
родитељ
комит
9e52e95f32

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

@@ -1 +1 @@
-{"id":"cc086619-7479-4e90-b1f8-ed7335b5c719","timestamp":1752634428946}
+{"id":"e7a919bf-043b-4566-bb06-451c136742ff","timestamp":1753079663818}

+ 0 - 1
.nuxt/manifest/meta/cc086619-7479-4e90-b1f8-ed7335b5c719.json

@@ -1 +0,0 @@
-{"id":"cc086619-7479-4e90-b1f8-ed7335b5c719","timestamp":1752634428946,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}

+ 1 - 0
.nuxt/manifest/meta/e7a919bf-043b-4566-bb06-451c136742ff.json

@@ -0,0 +1 @@
+{"id":"e7a919bf-043b-4566-bb06-451c136742ff","timestamp":1753079663818,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}

+ 1 - 1
.nuxt/tsconfig.json

@@ -102,7 +102,7 @@
         "./imports"
       ],
       "#app-manifest": [
-        "./manifest/meta/cc086619-7479-4e90-b1f8-ed7335b5c719.json"
+        "./manifest/meta/e7a919bf-043b-4566-bb06-451c136742ff.json"
       ],
       "#components": [
         "./components"

+ 1346 - 0
assets/css/project/class.less

@@ -0,0 +1,1346 @@
+@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;
+}
+
+.adPlace {
+    width: 1200px;
+    margin: 20px auto 0;
+}
+
+.index_main {
+    width: 1200px;
+}
+
+.index_1 {
+    box-shadow: 0px 0px 3px 2px rgba(0, 0, 0, 0.10);
+    margin-top: 30px;
+    box-sizing: border-box;
+}
+
+.img_ul_1 {
+    width: 1160px;
+    margin: 30px auto 0px;
+    height: 190px;
+
+    .img_li_1 {
+        float: left;
+        width: 180px;
+        height: 180px;
+        margin: 0px 16px 16px 0px;
+    }
+
+    .img_li_1_photo {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .img_li_1:nth-of-type(6n) {
+        margin-right: 0px;
+    }
+}
+
+.ul_1 {
+    padding: 0px 0px 10px;
+    box-sizing: border-box;
+    width: 1168px;
+    margin: 9px auto 0px;
+    min-height: 200px;
+
+    .ul_1_a {
+        float: left;
+        margin: 0px 17px 15px 0px;
+        background: #FAFAFA;
+        height: 51px;
+        line-height: 51px;
+        color: #333;
+        font-size: 16px;
+        width: 220px;
+        padding: 0px 10px;
+        box-sizing: border-box;
+        text-align: center;
+    }
+
+    .ul_1_a:nth-of-type(5n) {
+        margin-right: 0px;
+    }
+}
+
+.index_left {
+    float: left;
+    width: 900px;
+    margin-bottom: 20px;
+}
+
+.index_aside {
+    float: right;
+    width: 270px;
+}
+
+/* 种植项目  */
+.index_2_head {
+    margin: 18px auto 2px;
+    position: relative;
+    box-sizing: border-box;
+    padding-left: 8px;
+
+    .index_2_head_a {
+        float: left;
+        height: 54px;
+        line-height: 54px;
+        color: #999;
+        font-size: 18px;
+        padding: 0 10px;
+        position: relative;
+        font-weight: bold;
+    }
+
+    .index_2_head_a_only {
+        color: #489D97;
+        font-size: 22px;
+    }
+}
+
+.index_2_head::after {
+    content: '';
+    display: block;
+    width: 3px;
+    height: 18px;
+    position: absolute;
+    left: 0px;
+    top: 19px;
+    background: linear-gradient(to top, #0998A9, #6ADDD6);
+}
+
+.index_2_head_right {
+    float: right;
+    height: 54px;
+    line-height: 54px;
+
+    .index_2_head_right_in_a {
+        height: 54px;
+        line-height: 54px;
+        color: #999;
+        font-size: 16px;
+        float: right;
+
+        &:hover {
+            color: #489D97;
+        }
+    }
+}
+
+.index_2_in {
+    border: solid 1px #D9D9D9;
+    border-right: none;
+    display: flex;
+    height: 239px;
+}
+
+.ul_2 {
+    float: left;
+    width: 469px;
+    position: relative;
+    margin: 20px auto 6px;
+
+    .ul_2_a {
+        box-sizing: border-box;
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 16px;
+        position: relative;
+        margin-bottom: 20px;
+        text-indent: 48px;
+        width: 49%;
+
+        &:hover {
+            color: #489D97;
+        }
+
+        &:hover::after {
+            background: #489D97;
+        }
+    }
+
+    .ul_2_a:nth-of-type(odd) {
+        float: left;
+    }
+
+    .ul_2_a:nth-of-type(even) {
+        float: right;
+    }
+
+    .ul_2_a::after {
+        content: '';
+        display: block;
+        width: 8px;
+        height: 8px;
+        position: absolute;
+        left: 30px;
+        top: 8px;
+        border-radius: 4px;
+        background: #D9D9D9;
+    }
+}
+
+.img_ul_2 {
+    float: right;
+    width: 430px;
+    background: #FAFAFA;
+    position: relative;
+    box-sizing: border-box;
+    border: solid 1px #FAFAFA;
+    padding-top: 19px;
+
+    .img_li_2 {
+        width: 180px;
+        margin-bottom: 10px;
+    }
+
+    .img_li_2:nth-of-type(odd) {
+        float: left;
+        margin-left: 20px;
+    }
+
+    .img_li_2:nth-of-type(even) {
+        float: right;
+        margin-right: 20px;
+    }
+
+    .img_li_2_a {
+        display: block;
+        width: 100%;
+    }
+
+    .img_li_2_a_photo {
+        display: block;
+        width: 100%;
+        height: 180px;
+    }
+
+    .img_li_2_dot1 {
+        height: 18px;
+        line-height: 18px;
+        text-align: center;
+        padding: 0px 8px;
+        box-sizing: border-box;
+        width: 100%;
+        margin-top: 10px;
+        color: #333;
+        font-size: 14px;
+    }
+
+    .img_li_2_a:hover .img_li_2_dot1 {
+        color: #489D97;
+    }
+}
+
+.img_ul_2::after {
+    content: '';
+    display: block;
+    position: absolute;
+    height: 100%;
+    top: 0px;
+    left: 0px;
+    background: #e9e9e9;
+    width: 1px;
+    box-sizing: border-box;
+    border-top: solid 10px #FAFAFA;
+    border-bottom: solid 10px #FAFAFA;
+}
+
+@media screen and (min-width:1200px) {
+    /*pc_1440*/
+    @media screen and (max-width:1440px) {
+        /*1200*/
+    }
+
+    .pc_none {
+        display: none;
+    }
+}
+
+/* 种植项目  */
+/* 养殖项目  */
+.index_3_head {
+    position: relative;
+    box-sizing: border-box;
+    padding-left: 10px;
+    margin: 18px auto 2px;
+
+    .index_3_head_a {
+        float: left;
+        height: 54px;
+        line-height: 54px;
+        color: #999;
+        font-size: 18px;
+        padding: 0 10px;
+        position: relative;
+        font-weight: bold;
+    }
+
+    .index_3_head_a_only {
+        color: #489D97;
+        font-size: 22px;
+    }
+}
+
+.index_3_head::after {
+    content: '';
+    display: block;
+    width: 3px;
+    height: 18px;
+    position: absolute;
+    left: 0px;
+    top: 19px;
+    background: linear-gradient(to top, #0998A9, #6ADDD6);
+}
+
+.index_3_head_right {
+    float: right;
+    height: 54px;
+    line-height: 54px;
+
+    .index_3_head_right_in_a {
+        height: 54px;
+        line-height: 54px;
+        color: #999;
+        font-size: 16px;
+        float: right;
+
+        &:hover {
+            color: #489D97;
+        }
+    }
+}
+
+.index_3_in {
+    border: solid 1px #D9D9D9;
+    border-right: none;
+    display: flex;
+    margin-top: 1px;
+    height: 239px;
+}
+
+.ul_3 {
+    float: left;
+    width: 469px;
+    position: relative;
+    margin: 20px auto 6px;
+
+    .ul_3_a {
+        box-sizing: border-box;
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 16px;
+        position: relative;
+        margin-bottom: 20px;
+        text-indent: 48px;
+        width: 49%;
+
+        &:hover {
+            color: #489D97;
+        }
+
+        &:hover::after {
+            background: #489D97;
+        }
+    }
+
+    .ul_3_a:nth-of-type(odd) {
+        float: left;
+    }
+
+    .ul_3_a:nth-of-type(even) {
+        float: right;
+    }
+
+    .ul_3_a::after {
+        content: '';
+        display: block;
+        width: 8px;
+        height: 8px;
+        position: absolute;
+        left: 30px;
+        top: 8px;
+        border-radius: 4px;
+        background: #D9D9D9;
+    }
+}
+
+.img_ul_3 {
+    float: right;
+    width: 430px;
+    background: #FAFAFA;
+    position: relative;
+    box-sizing: border-box;
+    border: solid 1px #FAFAFA;
+    padding-top: 19px;
+
+    .img_li_3 {
+        width: 180px;
+        margin-bottom: 10px;
+    }
+
+    .img_li_3:nth-of-type(odd) {
+        float: left;
+        margin-left: 20px;
+    }
+
+    .img_li_3:nth-of-type(even) {
+        float: right;
+        margin-right: 20px;
+    }
+
+    .img_li_3_a {
+        display: block;
+        width: 100%;
+    }
+
+    .img_li_3_a_photo {
+        display: block;
+        width: 100%;
+        height: 180px;
+    }
+
+    .img_li_3_dot1 {
+        height: 18px;
+        line-height: 18px;
+        text-align: center;
+        padding: 0px 8px;
+        box-sizing: border-box;
+        width: 100%;
+        margin-top: 10px;
+        color: #333;
+        font-size: 14px;
+    }
+
+    .img_li_3_a:hover .img_li_3_dot1 {
+        color: #489D97;
+    }
+}
+
+.img_ul_3::after {
+    content: '';
+    display: block;
+    position: absolute;
+    height: 100%;
+    top: 0px;
+    left: 0px;
+    background: #e9e9e9;
+    width: 1px;
+    box-sizing: border-box;
+    border-top: solid 10px #FAFAFA;
+    border-bottom: solid 10px #FAFAFA;
+}
+
+@media screen and (min-width:1200px) {
+    /*pc_1440*/
+    @media screen and (max-width:1440px) {
+        /*1200*/
+    }
+
+    .pc_none {
+        display: none;
+    }
+}
+
+/* 养殖项目*/
+/*  特产项目  */
+.index_4_head {
+    position: relative;
+    box-sizing: border-box;
+    padding-left: 10px;
+    margin: 18px auto 2px;
+
+    .index_4_head_a {
+        float: left;
+        height: 54px;
+        line-height: 54px;
+        color: #999;
+        font-size: 18px;
+        padding: 0 10px;
+        position: relative;
+        font-weight: bold;
+    }
+
+    .index_4_head_a_only {
+        color: #489D97;
+        font-size: 22px;
+    }
+}
+
+.index_4_head::after {
+    content: '';
+    display: block;
+    width: 3px;
+    height: 18px;
+    position: absolute;
+    left: 0px;
+    top: 19px;
+    background: linear-gradient(to top, #0998A9, #6ADDD6);
+}
+
+.index_4_head_right {
+    float: right;
+    height: 54px;
+    line-height: 54px;
+
+    .index_4_head_right_in_a {
+        height: 54px;
+        line-height: 54px;
+        color: #999;
+        font-size: 16px;
+        float: right;
+
+        &:hover {
+            color: #489D97;
+        }
+    }
+}
+
+.index_4_in {
+    border: solid 1px #D9D9D9;
+    border-right: none;
+    display: flex;
+    margin-top: 1px;
+    height: 239px;
+}
+
+.ul_4 {
+    float: left;
+    width: 469px;
+    position: relative;
+    margin: 20px auto 6px;
+
+    .ul_4_a {
+        box-sizing: border-box;
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 16px;
+        position: relative;
+        margin-bottom: 20px;
+        text-indent: 48px;
+        width: 49%;
+
+        &:hover {
+            color: #489D97;
+        }
+
+        &:hover::after {
+            background: #489D97;
+        }
+    }
+
+    .ul_4_a:nth-of-type(odd) {
+        float: left;
+    }
+
+    .ul_4_a:nth-of-type(even) {
+        float: right;
+    }
+
+    .ul_4_a::after {
+        content: '';
+        display: block;
+        width: 8px;
+        height: 8px;
+        position: absolute;
+        left: 30px;
+        top: 8px;
+        border-radius: 4px;
+        background: #D9D9D9;
+    }
+}
+
+.img_ul_4 {
+    float: right;
+    width: 430px;
+    background: #FAFAFA;
+    position: relative;
+    box-sizing: border-box;
+    border: solid 1px #FAFAFA;
+    padding-top: 19px;
+
+    .img_li_4 {
+        width: 180px;
+        margin-bottom: 10px;
+    }
+
+    .img_li_4:nth-of-type(odd) {
+        float: left;
+        margin-left: 20px;
+    }
+
+    .img_li_4:nth-of-type(even) {
+        float: right;
+        margin-right: 20px;
+    }
+
+    .img_li_4_a {
+        display: block;
+        width: 100%;
+    }
+
+    .img_li_4_a_photo {
+        display: block;
+        width: 100%;
+        height: 180px;
+    }
+
+    .img_li_4_dot1 {
+        height: 18px;
+        line-height: 18px;
+        text-align: center;
+        padding: 0px 8px;
+        box-sizing: border-box;
+        width: 100%;
+        margin-top: 10px;
+        color: #333;
+        font-size: 14px;
+    }
+
+    .img_li_4_a:hover .img_li_4_dot1 {
+        color: #489D97;
+    }
+}
+
+.img_ul_4::after {
+    content: '';
+    display: block;
+    position: absolute;
+    height: 100%;
+    top: 0px;
+    left: 0px;
+    background: #e9e9e9;
+    width: 1px;
+    box-sizing: border-box;
+    border-top: solid 10px #FAFAFA;
+    border-bottom: solid 10px #FAFAFA;
+}
+
+/* 特产项目  */
+/*  加工项目项目  */
+.index_5_head {
+    position: relative;
+    box-sizing: border-box;
+    padding-left: 10px;
+    margin: 18px auto 2px;
+
+    .index_5_head_a {
+        float: left;
+        height: 54px;
+        line-height: 54px;
+        color: #999;
+        font-size: 18px;
+        padding: 0 10px;
+        position: relative;
+        font-weight: bold;
+    }
+
+    .index_5_head_a_only {
+        color: #489D97;
+        font-size: 22px;
+    }
+}
+
+.index_5_head::after {
+    content: '';
+    display: block;
+    width: 3px;
+    height: 18px;
+    position: absolute;
+    left: 0px;
+    top: 19px;
+    background: linear-gradient(to top, #0998A9, #6ADDD6);
+}
+
+.index_5_head_right {
+    float: right;
+    height: 54px;
+    line-height: 54px;
+
+    .index_5_head_right_in_a {
+        height: 54px;
+        line-height: 54px;
+        color: #999;
+        font-size: 16px;
+        float: right;
+
+        &:hover {
+            color: #489D97;
+        }
+    }
+}
+
+.index_5_in {
+    border: solid 1px #D9D9D9;
+    border-right: none;
+    display: flex;
+    margin-top: 1px;
+    height: 239px;
+}
+
+.ul_5 {
+    float: left;
+    width: 469px;
+    position: relative;
+    margin: 20px auto 6px;
+
+    .ul_5_a {
+        box-sizing: border-box;
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 16px;
+        position: relative;
+        margin-bottom: 20px;
+        text-indent: 48px;
+        width: 49%;
+
+        &:hover {
+            color: #489D97;
+        }
+
+        &:hover::after {
+            background: #489D97;
+        }
+    }
+
+    .ul_5_a:nth-of-type(odd) {
+        float: left;
+    }
+
+    .ul_5_a:nth-of-type(even) {
+        float: right;
+    }
+
+    .ul_5_a::after {
+        content: '';
+        display: block;
+        width: 8px;
+        height: 8px;
+        position: absolute;
+        left: 30px;
+        top: 8px;
+        border-radius: 4px;
+        background: #D9D9D9;
+    }
+}
+
+.img_ul_5 {
+    float: right;
+    width: 430px;
+    background: #FAFAFA;
+    position: relative;
+    box-sizing: border-box;
+    border: solid 1px #FAFAFA;
+    padding-top: 19px;
+
+    .img_li_5 {
+        width: 180px;
+        margin-bottom: 10px;
+    }
+
+    .img_li_5:nth-of-type(odd) {
+        float: left;
+        margin-left: 20px;
+    }
+
+    .img_li_5:nth-of-type(even) {
+        float: right;
+        margin-right: 20px;
+    }
+
+    .img_li_5_a {
+        display: block;
+        width: 100%;
+    }
+
+    .img_li_5_a_photo {
+        display: block;
+        width: 100%;
+        height: 180px;
+    }
+
+    .img_li_5_dot1 {
+        height: 18px;
+        line-height: 18px;
+        text-align: center;
+        padding: 0px 8px;
+        box-sizing: border-box;
+        width: 100%;
+        margin-top: 10px;
+        color: #333;
+        font-size: 14px;
+    }
+
+    .img_li_5_a:hover .img_li_5_dot1 {
+        color: #489D97;
+    }
+}
+
+.img_ul_5::after {
+    content: '';
+    display: block;
+    position: absolute;
+    height: 100%;
+    top: 0px;
+    left: 0px;
+    background: #e9e9e9;
+    width: 1px;
+    box-sizing: border-box;
+    border-top: solid 10px #FAFAFA;
+    border-bottom: solid 10px #FAFAFA;
+}
+
+/* 加工项目 */
+/* 生产项目 */
+.index_6_head {
+    position: relative;
+    box-sizing: border-box;
+    padding-left: 10px;
+    margin: 18px auto 2px;
+
+    .index_6_head_a {
+        float: left;
+        height: 54px;
+        line-height: 54px;
+        color: #999;
+        font-size: 18px;
+        padding: 0 10px;
+        position: relative;
+        font-weight: bold;
+    }
+
+    .index_6_head_a_only {
+        color: #489D97;
+        font-size: 22px;
+    }
+}
+
+.index_6_head::after {
+    content: '';
+    display: block;
+    width: 3px;
+    height: 18px;
+    position: absolute;
+    left: 0px;
+    top: 19px;
+    background: linear-gradient(to top, #0998A9, #6ADDD6);
+}
+
+.index_6_head_right {
+    float: right;
+    height: 54px;
+    line-height: 54px;
+
+    .index_6_head_right_in_a {
+        height: 54px;
+        line-height: 54px;
+        color: #999;
+        font-size: 16px;
+        float: right;
+
+        &:hover {
+            color: #489D97;
+        }
+    }
+}
+
+.index_6_in {
+    border: solid 1px #D9D9D9;
+    border-right: none;
+    display: flex;
+    margin-top: 1px;
+    height: 239px;
+}
+
+.ul_6 {
+    float: left;
+    width: 469px;
+    position: relative;
+    margin: 20px auto 6px;
+
+    .ul_6_a {
+        box-sizing: border-box;
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 16px;
+        position: relative;
+        margin-bottom: 20px;
+        text-indent: 48px;
+        width: 49%;
+
+        &:hover {
+            color: #489D97;
+        }
+
+        &:hover::after {
+            background: #489D97;
+        }
+    }
+
+    .ul_6_a:nth-of-type(odd) {
+        float: left;
+    }
+
+    .ul_6_a:nth-of-type(even) {
+        float: right;
+    }
+
+    .ul_6_a::after {
+        content: '';
+        display: block;
+        width: 8px;
+        height: 8px;
+        position: absolute;
+        left: 30px;
+        top: 8px;
+        border-radius: 4px;
+        background: #D9D9D9;
+    }
+}
+
+.img_ul_6 {
+    float: right;
+    width: 430px;
+    background: #FAFAFA;
+    position: relative;
+    box-sizing: border-box;
+    border: solid 1px #FAFAFA;
+    padding-top: 19px;
+
+    .img_li_6 {
+        width: 180px;
+        margin-bottom: 10px;
+    }
+
+    .img_li_6:nth-of-type(odd) {
+        float: left;
+        margin-left: 20px;
+    }
+
+    .img_li_6:nth-of-type(even) {
+        float: right;
+        margin-right: 20px;
+    }
+
+    .img_li_6_a {
+        display: block;
+        width: 100%;
+    }
+
+    .img_li_6_a_photo {
+        display: block;
+        width: 100%;
+        height: 180px;
+    }
+
+    .img_li_6_dot1 {
+        height: 18px;
+        line-height: 18px;
+        text-align: center;
+        padding: 0px 8px;
+        box-sizing: border-box;
+        width: 100%;
+        margin-top: 10px;
+        color: #333;
+        font-size: 14px;
+    }
+
+    .img_li_6_a:hover .img_li_6_dot1 {
+        color: #489D97;
+    }
+}
+
+.img_ul_6::after {
+    content: '';
+    display: block;
+    position: absolute;
+    height: 100%;
+    top: 0px;
+    left: 0px;
+    background: #e9e9e9;
+    width: 1px;
+    box-sizing: border-box;
+    border-top: solid 10px #FAFAFA;
+    border-bottom: solid 10px #FAFAFA;
+}
+
+/* 生产项目 */
+.index_aside_head_1 {
+    border-bottom: solid 2px #489D97;
+    margin-top: 24px;
+
+    .index_aside_head_1_a {
+        float: left;
+        height: 40px;
+        line-height: 40px;
+        color: #fff;
+        font-size: 18px;
+        padding: 0px 14px;
+        border-radius: 4px 4px 0px 0px;
+        background: #489D97;
+    }
+
+    .index_aside_head_1_a_more {
+        height: 40px;
+        line-height: 40px;
+        color: #999;
+        font-size: 16px;
+        float: right;
+
+        &:hover {
+            color: #489D97;
+        }
+    }
+}
+
+.index_aside_img_ul_1 {
+    margin-top: 30px;
+    height: 260px;
+
+    .index_aside_img_li_1 {
+        margin-bottom: 20px;
+    }
+
+    .index_aside_img_li_1:last-of-type {
+        margin-bottom: 0px;
+    }
+
+    .index_aside_img_li_1_a {
+        display: flex;
+    }
+
+    .index_aside_img_li_1_a_img_box {
+        width: 120px;
+        height: 120px;
+        margin-right: 10px;
+        display: block;
+    }
+
+    .index_aside_img_li_1_a img {
+        width: 120px;
+        height: 120px;
+        display: block;
+    }
+
+    .index_aside_img_li_1_dot3 {
+        height: 63px;
+        line-height: 21px;
+        color: #333;
+        font-size: 18px;
+        width: 100%;
+    }
+
+    .index_aside_img_li_1_a:hover .index_aside_img_li_1_dot3 {
+        color: #489D97;
+    }
+}
+
+.index_aside_ul_1 {
+    margin-top: 30px;
+    height: 156px;
+
+    .index_aside_ul_1_a {
+        box-sizing: border-box;
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        position: relative;
+        margin-bottom: 20px;
+        text-indent: 18px;
+
+        &:hover {
+            color: #489D97;
+        }
+
+        &:hover::after {
+            background: #489D97;
+        }
+    }
+
+    .index_aside_ul_1_a:last-of-type {
+        margin-bottom: 0px;
+    }
+
+    .index_aside_ul_1_a::after {
+        content: '';
+        display: block;
+        width: 8px;
+        height: 8px;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        border-radius: 4px;
+        background: #D9D9D9;
+    }
+}
+
+/* 加盟连锁 */
+.index_aside_head_2 {
+    border-bottom: solid 2px #489D97;
+    margin-top: 30px;
+
+    .index_aside_head_2_a {
+        float: left;
+        height: 40px;
+        line-height: 40px;
+        color: #fff;
+        font-size: 18px;
+        padding: 0px 14px;
+        border-radius: 4px 4px 0px 0px;
+        background: #489D97;
+    }
+
+    .index_aside_head_2_a_more {
+        height: 40px;
+        line-height: 40px;
+        color: #999;
+        font-size: 16px;
+        float: right;
+
+        &:hover {
+            color: #489D97;
+        }
+    }
+}
+
+.index_aside_img_ul_2 {
+    margin-top: 30px;
+
+    .index_aside_img_li_2 {
+        margin-bottom: 20px;
+    }
+
+    .index_aside_img_li_2:last-of-type {
+        margin-bottom: 0px;
+    }
+
+    .index_aside_img_li_2_a {
+        display: flex;
+    }
+
+    .index_aside_img_li_2_a_img_box {
+        width: 120px;
+        height: 120px;
+        margin-right: 10px;
+        display: block;
+    }
+
+    .index_aside_img_li_2_a img {
+        width: 120px;
+        height: 120px;
+        display: block;
+    }
+
+    .index_aside_img_li_2_dot3 {
+        height: 63px;
+        line-height: 21px;
+        color: #333;
+        font-size: 18px;
+        width: 100%;
+    }
+
+    .index_aside_img_li_2_a:hover .index_aside_img_li_2_dot3 {
+        color: #489D97;
+    }
+}
+
+.index_aside_ul_2 {
+    margin-top: 30px;
+
+    .index_aside_ul_2_a {
+        box-sizing: border-box;
+        height: 24px;
+        line-height: 24px;
+        color: #333;
+        font-size: 18px;
+        position: relative;
+        margin-bottom: 20px;
+        text-indent: 18px;
+
+        &:hover {
+            color: #489D97;
+        }
+
+        &:hover::after {
+            background: #489D97;
+        }
+    }
+
+    .index_aside_ul_2_a:last-of-type {
+        margin-bottom: 0px;
+    }
+
+    .index_aside_ul_2_a::after {
+        content: '';
+        display: block;
+        width: 8px;
+        height: 8px;
+        position: absolute;
+        left: 0px;
+        top: 8px;
+        border-radius: 4px;
+        background: #D9D9D9;
+    }
+}
+
+/* 加盟连锁 */
+@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) {}

+ 507 - 0
assets/css/project/detail.less

@@ -0,0 +1,507 @@
+@charset "utf-8";
+
+* {
+    font-family: "微软雅黑", "microsoft yahei";
+}
+
+//导航条
+.breadcrumb {
+    width: 100%;
+    height: 22px;
+    padding-bottom: 20px;
+    border-bottom: 1px solid #e6e6e6;
+    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;
+
+    .el-breadcrumb::v-deep {
+        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;
+    }
+}
+
+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;
+}
+
+.show_crumb {
+    line-height: 26px;
+    color: #999;
+    font-size: 20px;
+    margin-top: 30px;
+    padding-bottom: 30px;
+    border-bottom: solid 1px #D9D9D9;
+
+    .show_crumb_text {
+        display: inline-block;
+        line-height: 26px;
+        color: #999;
+        font-size: 20px;
+        margin: 0px 11px;
+    }
+
+    span.show_crumb_text {
+        color: #333;
+    }
+
+    a.show_crumb_text:hover {
+        color: #489D97;
+    }
+}
+
+.index_2 {
+    margin-top: 30px;
+    display: flex;
+}
+
+.index_2_img {
+    float: left;
+    width: 330px;
+    height: 330px;
+    margin-right: 25px;
+}
+
+.index_2_right {
+    flex: 1;
+}
+
+.index_2_h4 {
+    line-height: 29px;
+    color: #333;
+    font-size: 22px;
+}
+
+.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: 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;
+    }
+}
+
+.index_3 {
+    margin-top: 30px;
+}
+
+.index_3 * {
+    font-size: 20px;
+    line-height: 30px;
+    color: #333;
+}
+
+.show_head_box {
+    border-bottom: solid 2px #489D97;
+
+    .show_head_a {
+        float: left;
+        height: 40px;
+        line-height: 40px;
+        color: #000;
+        font-size: 18px;
+        padding: 0px 14px;
+        border-radius: 4px 4px 0px 0px;
+    }
+
+    .show_head_a_only {
+        background: #489D97;
+        color: #fff;
+    }
+}
+
+.show_article {
+    margin-top: 30px;
+    line-height: 27px;
+}
+
+.index_4 {
+    margin-top: 30px;
+}
+
+.index_4 * {
+    font-size: 20px;
+    line-height: 30px;
+    color: #333;
+}
+
+.show_head_box_2 {
+    border-bottom: solid 2px #489D97;
+
+    .show_head_a_2 {
+        float: left;
+        height: 40px;
+        line-height: 40px;
+        color: #000;
+        font-size: 18px;
+        padding: 0px 14px;
+        border-radius: 4px 4px 0px 0px;
+    }
+
+    .show_head_a_only_2 {
+        background: #489D97;
+        color: #fff;
+    }
+}
+
+.show_article_2 {
+    margin-top: 30px;
+    line-height: 27px;
+}
+
+.index_4 {
+    margin-top: 30px;
+}
+
+.index_4 * {
+    font-size: 20px;
+    line-height: 30px;
+    color: #333;
+}
+
+.show_head_box_3 {
+    border-bottom: solid 2px #489D97;
+
+    .show_head_a_3 {
+        float: left;
+        height: 40px;
+        line-height: 40px;
+        color: #000;
+        font-size: 18px;
+        padding: 0px 14px;
+        border-radius: 4px 4px 0px 0px;
+    }
+
+    .show_head_a_only_3 {
+        background: #489D97;
+        color: #fff;
+    }
+}
+
+.img_ul_1 {
+    margin-top: 30px;
+}
+
+.img_li_1 {
+    width: 210px;
+    height: 210px;
+    overflow: hidden;
+    float: left;
+    margin: 0px 37px 10px 0px;
+}
+
+.img_li_1:nth-of-type(5n) {
+    margin-right: 0px;
+}
+
+.img_li_1_img {
+    display: block;
+    width: 100%;
+    height: 100%;
+}
+
+.index_5 {
+    margin-top: 8px;
+}
+
+.index_2_head {
+    border-bottom: solid 1px #D9D9D9;
+    position: relative;
+    box-sizing: border-box;
+    padding-left: 10px;
+
+    .index_2_head_a {
+        float: left;
+        height: 56px;
+        line-height: 56px;
+        color: #333;
+        font-size: 22px;
+        padding: 0 10px;
+        position: relative;
+        font-weight: bold;
+    }
+
+    .index_2_head_a_only {
+        color: #489D97;
+    }
+}
+
+.index_2_head::after {
+    content: '';
+    display: block;
+    width: 3px;
+    height: 18px;
+    position: absolute;
+    left: 0px;
+    top: 19px;
+    background: linear-gradient(to top, #0998A9, #6ADDD6);
+}
+
+.index_6_head_right_in_a {
+    height: 54px;
+    line-height: 54px;
+    color: #999;
+    font-size: 16px;
+    float: right;
+
+    &:hover {
+        color: #489D97;
+    }
+}
+
+.categ_ul_img_1 {
+    margin-top: 20px;
+    overflow: hidden;
+    max-height: 484px;
+    min-height: 242px;
+}
+
+.categ_li_img_1 {
+    float: left;
+    margin: 0px 24px 20px 0px;
+    width: 180px;
+    position: relative;
+
+    .categ_li_img_1_a {}
+
+    .categ_li_img_1_img {
+        display: block;
+        width: 180px;
+        height: 180px;
+    }
+
+    .categ_li_img_1_dot2 {
+        width: 168px;
+        margin: 10px auto 0px;
+        height: 32px;
+        line-height: 16px;
+        color: #333;
+        font-size: 14px;
+    }
+}
+
+.categ_li_img_1:nth-of-type(6n) {
+    margin-right: 0px;
+}
+
+.categ_li_img_1_hover_dot1 {
+    width: 152px;
+    position: absolute;
+    left: 50%;
+    margin-left: -76px;
+    bottom: 13px;
+    font-size: 14px;
+    background: linear-gradient(to right, #FFE1AA, #F9F4E3, #FFE1AA);
+    -webkit-background-clip: text;
+    color: transparent;
+}
+
+.categ_li_img_1:hover .categ_li_img_1_dot2 {
+    color: #489D97;
+}
+
+@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) {}

+ 390 - 0
assets/css/project/list.less

@@ -0,0 +1,390 @@
+@charset "utf-8";
+
+* {
+    font-family: "微软雅黑", "microsoft yahei";
+}
+
+.pagination {
+    width: 1200px;
+    height: 34px;
+    // margin-left: 141px;
+    display: flex;
+    justify-content: center;
+    margin: 40px 0;
+
+    // 鼠标移入后字体颜色
+    .el-pagination::v-deep :hover {
+        color: #489d97;
+    }
+
+    .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: #489d97;
+        color: #fff;
+    }
+}
+
+.empty {
+    width: 100%;
+    height: 450px;
+    line-height: 450px;
+    text-align: center;
+}
+
+.empty_img {
+    vertical-align: -30px;
+    margin-right: 20px;
+}
+
+.empty_text {
+    font-size: 26px;
+    color: #999;
+}
+
+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;
+}
+
+.dot5 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 5;
+}
+
+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;
+    width: 1200px;
+    min-height: 450px;
+}
+
+.slow_6 {
+    -webkit-transition: all .6s;
+    -moz-transition: all .6s;
+    -ms-transition: all .6s;
+    -o-transition: all .6s;
+    transition: all .6s;
+}
+
+//导航条
+.breadcrumb {
+    width: 100%;
+    height: 22px;
+    padding-bottom: 20px;
+    border-bottom: solid 2px #489D97;
+    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: 10px;
+
+    :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;
+    }
+}
+
+.img_li {
+    float: left;
+    width: 386px;
+    border: solid 1px #DDDDDD;
+    margin-bottom: 20px;
+    box-sizing: border-box;
+
+    .img_li_a {
+        display: block;
+        width: 100%;
+    }
+
+    .img_li_h4 {
+        display: block;
+        width: 100%;
+        box-sizing: border-box;
+        padding: 0px 20px;
+        color: #489D97;
+        font-size: 16px;
+        font-weight: bold;
+        background: #F7FBFE;
+        height: 60px;
+        line-height: 60px;
+        border-bottom: solid 1px #DDDDDD;
+    }
+
+    .img_li_in {
+        margin: 20px auto 31px;
+    }
+
+    .img_li_left {
+        float: left;
+        width: 120px;
+        margin-left: 20px;
+    }
+
+    .img_li_left_foto_box {
+        width: 120px;
+        height: 120px;
+    }
+
+    .img_li_left_foto {
+        display: block;
+        width: 100%;
+        height: 100%;
+    }
+
+    .img_li_left_dot1 {
+        height: 16px;
+        line-height: 16px;
+        color: #999;
+        font-size: 12px;
+        margin-top: 10px;
+    }
+
+    .img_li_right {
+        float: right;
+        width: 206px;
+        margin-right: 20px;
+    }
+
+    .img_li_right_dot5 {
+        height: 100px;
+        line-height: 20px;
+        color: #666;
+        font-size: 14px;
+    }
+
+    .img_li_right_detail {
+        float: right;
+        color: #D31D33;
+        font-size: 14px;
+        height: 20px;
+        line-height: 20px;
+    }
+}
+
+.img_li:hover {
+    background: #489D97;
+}
+
+.img_li:hover .img_li_right_dot5 {
+    color: #fff;
+}
+
+.img_li:hover .img_li_right_detail {
+    color: #fff;
+}
+
+.img_li:hover .img_li_left_dot1 {
+    color: #fff;
+}
+
+.img_li:nth-of-type(3n-1) {
+    margin-left: 21px;
+}
+
+.img_li:nth-of-type(3n) {
+    float: right;
+}
+
+.info_foot {
+    margin-top: 40px;
+    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: #489D97;
+        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) {}

+ 316 - 0
pages/nongmingongzhifuxinxi/[dir]/[id].vue

@@ -0,0 +1,316 @@
+<template>
+    <!-- 页面头部 -->
+    <HomePageHead></HomePageHead>
+    <!-- 导航栏 -->
+    <HomePageNavigation></HomePageNavigation>
+    <!-- 列表页广告一 -->
+    <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
+    <!-- 资讯列表 -->
+    <main class="index_main">
+        <!-- 面包屑导航 -->
+        <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>
+                        <NuxtLink :to="`list-1.html`"> {{ routLevelTitle }}</NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item>{{ routeNewsTtitle }}</el-breadcrumb-item>
+                </el-breadcrumb>
+            </div>
+        </div>
+        <section class="index_2 clearfix">
+            <img class="index_2_img" :src="img_one" :title="newsDetail.title" :alt="newsDetail.title">
+            <div class="index_2_right">
+                <h4 class="index_2_h4">{{ newsDetail.title }}</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">{{ newsDetail.business_name }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">联 系 人</label>
+                        <span class="index_2_li_text">{{ newsDetail.content_person }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">电 &nbsp;&nbsp;&nbsp;&nbsp; 话</label>
+                        <span class="index_2_li_text">{{ newsDetail.telephone }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">手 &nbsp;&nbsp;&nbsp;&nbsp; 机</label>
+                        <span class="index_2_li_text">{{ newsDetail.mobile }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">传 &nbsp;&nbsp;&nbsp;&nbsp; 真</label>
+                        <span class="index_2_li_text">{{ newsDetail.fax }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">邮 &nbsp;&nbsp;&nbsp;&nbsp; 箱</label>
+                        <span class="index_2_li_text">{{ newsDetail.email }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">邮 &nbsp;&nbsp;&nbsp;&nbsp; 编</label>
+                        <span class="index_2_li_text">{{ newsDetail.post_code }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">地 &nbsp;&nbsp;&nbsp;&nbsp; 址</label>
+                        <span class="index_2_li_text">{{ newsDetail.address }}</span>
+                    </div>
+                </div>
+            </div>
+        </section>
+        <section class="index_3 clearfix">
+            <div class="show_head_box clearfix">
+                <span class="show_head_a show_head_a_only">项目介绍</span>
+            </div>
+            <article class="show_article" v-html="newsDetail.introduce">
+            </article>
+        </section>
+        <section class="index_4 clearfix">
+            <div class="show_head_box_2 clearfix">
+                <span class="show_head_a_2 show_head_a_only_2">加盟详情</span>
+            </div>
+            <article class="show_article_2" v-html="newsDetail.franchise_details">
+            </article>
+        </section>
+        <section class="index_4 clearfix">
+            <div class="show_head_box_3 clearfix">
+                <span class="show_head_a_3 show_head_a_only_3">图片展示</span>
+            </div>
+            <div class="img_ul_1 clearfix">
+                <div class="img_li_1" title="" v-for="(item, index) in imgList" :key="index">
+                    <img class="img_li_1_img" :src="item" :title="newsDetail.title" :alt="newsDetail.title">
+                </div>
+            </div>
+        </section>
+        <section class="index_5 clearfix">
+            <div class="index_2_head clearfix">
+                <span class="index_2_head_a index_2_head_a_only" title="">精品项目推荐</span>
+            </div>
+            <div class="categ_ul_img_1">
+                <div class="categ_li_img_1" v-for="(item, index) in recommend" :key="index">
+                    <a class="categ_li_img_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                        <img class="categ_li_img_1_img" :src="item.imgurl" :title="item.title" :alt="item.title">
+                        <div class="categ_li_img_1_dot2 dot2">
+                            {{ item.title }}
+                        </div>
+                    </a>
+                </div>
+            </div>
+        </section>
+    </main>
+    <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 route = useRoute();
+const articleId = parseInt(route.params.id);
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+
+const parent_name = ref("");
+const parent_id = ref("");
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+if (getRouteId.code == 200) {
+    parent_name.value = getRouteId.data.alias;
+    parent_id.value = 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 routLevelTitle = ref("");
+const routLevelId = ref("");
+const getRouteId1 = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+if (getRouteId1.code == 200) {
+    routLevelTitle.value = getRouteId1.data.alias;
+    routLevelId.value = getRouteId1.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 ---------->")
+}
+//3.面包屑 end ---------------------------------------->
+
+//4.新闻详情 start ---------------------------------------->
+//4.1 资讯详情
+const newsDetail = ref({})
+const routeNewsTtitle = ref("");
+//4.2 发布日期
+const time = ref("");
+// 图片列表
+const imgList = ref([]);
+const img_one = ref("");
+//4.3 获取详情
+let seoTitle;
+let seoDescription;
+let seoKeywords;
+async function getPageData() {
+    const mkdata = await requestDataPromise('/web/getWebsiteProjectInfo', {
+        method: 'GET',
+        query: {
+            'id': articleId
+        },
+    });
+
+    if (mkdata.code == 200) {
+        //获取内容
+        newsDetail.value = mkdata.data;
+        //获取发布时间
+        time.value = newsDetail.value.updated_at.split(' ')[0];
+        //修正标题长度
+        if (newsDetail.value.title.length >= 20) {
+            routeNewsTtitle.value = newsDetail.value.title.substr(0, 20) + "...";
+        } else {
+            routeNewsTtitle.value = newsDetail.value.title
+        }
+        // 图片列表
+        imgList.value = JSON.parse(mkdata.data.imgurl);
+        img_one.value = imgList.value[0];
+        seoTitle = newsDetail.value.title;
+        seoDescription = newsDetail.value.description;
+        seoKeywords = newsDetail.value.keyword;
+    } 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 ---------------------------------------->
+
+// 推荐
+let getJson1 = [
+    { "level": "1,12,0" },
+]
+let jsonString1 = JSON.stringify(getJson1);
+getPageHotData(jsonString1);
+
+// 获取推荐数据
+let recommend = ref([]);
+async function getPageHotData(jsonString1) {
+    const mkdata = await requestDataPromise('/web/getWebsiteProject', {
+        method: 'GET',
+        query: {
+            'id': jsonString1
+        },
+    });
+    console.log('mkdata_HotData', mkdata.data)
+    if (mkdata.code == 200) {
+        if (mkdata.data.length > 0) {
+            recommend.value = mkdata.data[0].img_num;
+        }
+    } else {
+        ElMessage.error(mkdata.message)
+    }
+}
+
+//5.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': parent_id.value
+    },
+});
+
+if (setData.code == 200) {
+    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("设置频道页SEO出错!", setData.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=nmgw_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=nmgw_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];
+})
+//6.广告 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/project/detail.less');
+</style>

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

@@ -0,0 +1,266 @@
+<template>
+    <div id="newsList">
+        <!-- 页面头部 -->
+        <HomePageHead></HomePageHead>
+        <!-- 导航栏 -->
+        <HomePageNavigation></HomePageNavigation>
+        <!-- 列表页广告一 -->
+        <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
+        <!-- 二级标题-->
+        <HomeListSecondaryHeading v-if="parent_name != ''" :name="parent_name" :nav="secondNav" :pinyin="parent_pinyin">
+        </HomeListSecondaryHeading>
+        <!-- 资讯列表 -->
+        <main class="index_main">
+            <!-- 面包屑导航 -->
+            <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>
+            <section class="img_ul_box clearfix">
+                <div class="img_li slow_6" v-for="(item, index) in newsList" :key="index">
+                    <NuxtLink class="img_li_a clearfix" :href="getLinkPathDetail(item)" :title="item.title">
+                        <h4 class="img_li_h4 dot1">{{ item.title }}</h4>
+                        <div class="img_li_in clearfix">
+                            <div class="img_li_left">
+                                <div class="img_li_left_foto_box">
+                                    <img class="img_li_left_foto" :src="item.imgurl" :title="item.title"
+                                        :alt="item.title">
+                                </div>
+                                <div class="img_li_left_dot1 dot1">{{ item.title }}</div>
+                            </div>
+                            <div class="img_li_right">
+                                <div class="img_li_right_dot5 dot5">
+                                    {{ item.description }}
+                                </div>
+                                <div class="img_li_right_detail">【查看详情】</div>
+                            </div>
+                        </div>
+                    </NuxtLink>
+                </div>
+                <div class="empty" v-if="newsList == false">
+                    <img src="@/public/topic/empty.png" alt="" class="empty_img">
+                    <span class="empty_text">当前暂无数据</span>
+                </div>
+            </section>
+            <!-- 分页器 -->
+            <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>
+        </main>
+        <!-- 列表页广告二 -->
+        <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
+let routeName;
+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
+    routeName = getRouteId.data.alias
+} else {
+    console.log("后端错误反馈:", getRouteId.message)
+}
+pageNum.value = parseInt(route.params.id);
+//2.路径 end---------------------------------------->
+
+//3.列表 start ---------------------------------------->
+let total = ref(0);
+let pageSize = ref(15);
+
+const newsList = ref([]);
+let newslists = async () => {
+    const listData = await requestDataPromise('/web/getWebsiteProjectList', {
+        method: 'GET',
+        query: {
+            'page': pageNum.value,
+            'pageSize': pageSize.value,
+            'category_id': articleId
+        },
+    });
+    console.log("listData1111", listData);
+
+
+    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=nmgw_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=nmgw_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/project/list.less');
+</style>

+ 313 - 0
pages/nongmingongzhifuxinxi/[id].vue

@@ -0,0 +1,313 @@
+<template>
+    <!-- 页面头部 -->
+    <HomePageHead></HomePageHead>
+    <!-- 导航栏 -->
+    <HomePageNavigation></HomePageNavigation>
+    <!-- 列表页广告一 -->
+    <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
+    <!-- 资讯列表 -->
+    <main class="index_main">
+        <!-- 面包屑导航 -->
+        <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>{{ routeNewsTtitle }}</el-breadcrumb-item>
+                </el-breadcrumb>
+            </div>
+        </div>
+        <section class="index_2 clearfix">
+            <img class="index_2_img" :src="img_one" :title="newsDetail.title" :alt="newsDetail.title">
+            <div class="index_2_right">
+                <h4 class="index_2_h4">{{ newsDetail.title }}</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">{{ newsDetail.business_name }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">联 系 人</label>
+                        <span class="index_2_li_text">{{ newsDetail.content_person }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">电 &nbsp;&nbsp;&nbsp;&nbsp; 话</label>
+                        <span class="index_2_li_text">{{ newsDetail.telephone }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">手 &nbsp;&nbsp;&nbsp;&nbsp; 机</label>
+                        <span class="index_2_li_text">{{ newsDetail.mobile }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">传 &nbsp;&nbsp;&nbsp;&nbsp; 真</label>
+                        <span class="index_2_li_text">{{ newsDetail.fax }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">邮 &nbsp;&nbsp;&nbsp;&nbsp; 箱</label>
+                        <span class="index_2_li_text">{{ newsDetail.email }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">邮 &nbsp;&nbsp;&nbsp;&nbsp; 编</label>
+                        <span class="index_2_li_text">{{ newsDetail.post_code }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">地 &nbsp;&nbsp;&nbsp;&nbsp; 址</label>
+                        <span class="index_2_li_text">{{ newsDetail.address }}</span>
+                    </div>
+                </div>
+            </div>
+        </section>
+        <section class="index_3 clearfix">
+            <div class="show_head_box clearfix">
+                <span class="show_head_a show_head_a_only">项目介绍</span>
+            </div>
+            <article class="show_article" v-html="newsDetail.introduce">
+            </article>
+        </section>
+        <section class="index_4 clearfix">
+            <div class="show_head_box_2 clearfix">
+                <span class="show_head_a_2 show_head_a_only_2">加盟详情</span>
+            </div>
+            <article class="show_article_2" v-html="newsDetail.franchise_details">
+            </article>
+        </section>
+        <section class="index_4 clearfix">
+            <div class="show_head_box_3 clearfix">
+                <span class="show_head_a_3 show_head_a_only_3">图片展示</span>
+            </div>
+            <div class="img_ul_1 clearfix">
+                <div class="img_li_1" title="" v-for="(item, index) in imgList" :key="index">
+                    <img class="img_li_1_img" :src="item" :title="newsDetail.title" :alt="newsDetail.title">
+                </div>
+            </div>
+        </section>
+        <section class="index_5 clearfix">
+            <div class="index_2_head clearfix">
+                <span class="index_2_head_a index_2_head_a_only" title="">精品项目推荐</span>
+            </div>
+            <div class="categ_ul_img_1">
+                <div class="categ_li_img_1" v-for="(item, index) in recommend" :key="index">
+                    <a class="categ_li_img_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                        <img class="categ_li_img_1_img" :src="item.imgurl" :title="item.title" :alt="item.title">
+                        <div class="categ_li_img_1_dot2 dot2">
+                            {{ item.title }}
+                        </div>
+                    </a>
+                </div>
+            </div>
+        </section>
+    </main>
+    <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 route = useRoute();
+const articleId = parseInt(route.params.id);
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+
+const parent_name = ref("");
+const parent_id = ref("");
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+if (getRouteId.code == 200) {
+    parent_name.value = getRouteId.data.alias;
+    parent_id.value = 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 routLevelTitle = ref("");
+const routLevelId = ref("");
+const getRouteId1 = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+if (getRouteId1.code == 200) {
+    routLevelTitle.value = getRouteId1.data.alias;
+    routLevelId.value = getRouteId1.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 ---------->")
+}
+//3.面包屑 end ---------------------------------------->
+
+//4.新闻详情 start ---------------------------------------->
+//4.1 资讯详情
+const newsDetail = ref({})
+const routeNewsTtitle = ref("");
+//4.2 发布日期
+const time = ref("");
+// 图片列表
+const imgList = ref([]);
+const img_one = ref("");
+//4.3 获取详情
+let seoTitle;
+let seoDescription;
+let seoKeywords;
+async function getPageData() {
+    const mkdata = await requestDataPromise('/web/getWebsiteProjectInfo', {
+        method: 'GET',
+        query: {
+            'id': articleId
+        },
+    });
+
+    if (mkdata.code == 200) {
+        //获取内容
+        newsDetail.value = mkdata.data;
+        //获取发布时间
+        time.value = newsDetail.value.updated_at.split(' ')[0];
+        //修正标题长度
+        if (newsDetail.value.title.length >= 20) {
+            routeNewsTtitle.value = newsDetail.value.title.substr(0, 20) + "...";
+        } else {
+            routeNewsTtitle.value = newsDetail.value.title
+        }
+        // 图片列表
+        imgList.value = JSON.parse(mkdata.data.imgurl);
+        img_one.value = imgList.value[0];
+        seoTitle = newsDetail.value.title;
+        seoDescription = newsDetail.value.description;
+        seoKeywords = newsDetail.value.keyword;
+    } 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 ---------------------------------------->
+
+// 推荐
+let getJson1 = [
+    { "level": "1,12,0" },
+]
+let jsonString1 = JSON.stringify(getJson1);
+getPageHotData(jsonString1);
+
+// 获取推荐数据
+let recommend = ref([]);
+async function getPageHotData(jsonString1) {
+    const mkdata = await requestDataPromise('/web/getWebsiteProject', {
+        method: 'GET',
+        query: {
+            'id': jsonString1
+        },
+    });
+    console.log('mkdata_HotData', mkdata.data)
+    if (mkdata.code == 200) {
+        if (mkdata.data.length > 0) {
+            recommend.value = mkdata.data[0].img_num;
+        }
+    } else {
+        ElMessage.error(mkdata.message)
+    }
+}
+
+//5.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': parent_id.value
+    },
+});
+
+if (setData.code == 200) {
+    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("设置频道页SEO出错!", setData.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=nmgw_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=nmgw_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];
+})
+//6.广告 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/project/detail.less');
+</style>

+ 696 - 0
pages/nongmingongzhifuxinxi/index.html.vue

@@ -0,0 +1,696 @@
+<template>
+    <HomePageHead></HomePageHead>
+    <HomePageNavigation></HomePageNavigation>
+    <div class="adPlace">
+        <HomeAdvertising :imgurl="adImg1"></HomeAdvertising>
+    </div>
+    <HomeSecondaryHeading :titleData="pageData" :pinyinid="routeId"></HomeSecondaryHeading>
+    <section class="index_1 clearfix index_main">
+        <!-- 最新 -->
+        <div class="img_ul_1 clearfix">
+            <NuxtLink class="img_li_1" :href="getLinkPathDetail(item)" :title="item.title"
+                v-for="(item, index) in newest" :key="index">
+                <img class="img_li_1_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+            </NuxtLink>
+        </div>
+        <!-- 推荐 -->
+        <div class="ul_1 clearfix">
+            <NuxtLink class="ul_1_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                v-for="(item, index) in recommend" :key="index">
+                {{ item.title }}
+            </NuxtLink>
+        </div>
+    </section>
+    <main class="index_main clearfix">
+        <div class="index_left">
+            <!-- 第一部分 -->
+            <div class="index_2 clearfix">
+                <div class="index_2_head  clearfix">
+                    <NuxtLink class="index_2_head_a" :class="{ 'index_2_head_a_only': tabsData1 == 1 }"
+                        @mouseenter="tabsData1 = 1" :href="getLinkPath(pageData[0])" v-if="pageData[0]"
+                        :title="pageData[0].alias">
+                        {{ pageData[0].alias }}
+                    </NuxtLink>
+                    <span class="index_2_head_a">/ </span>
+                    <NuxtLink class="index_2_head_a" :class="{ 'index_2_head_a_only': tabsData1 == 2 }"
+                        @mouseenter="tabsData1 = 2" :href="getLinkPath(pageData[1])" v-if="pageData[1]"
+                        :title="pageData[1].alias">
+                        {{ pageData[1].alias }}
+                    </NuxtLink>
+                </div>
+                <div class="index_2_in clearfix" v-if="tabsData1 === 1">
+                    <div class="ul_2 clearfix">
+                        <NuxtLink class="ul_2_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[0].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_2 clearfix">
+                        <div class="img_li_2" v-for="(item, index) in pageData[0].data" :key="index">
+                            <NuxtLink class="img_li_2_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_2_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_2_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="index_2_in clearfix" v-if="tabsData1 === 2">
+                    <div class="ul_2 clearfix">
+                        <NuxtLink class="ul_2_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[1].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_2 clearfix">
+                        <div class="img_li_2" v-for="(item, index) in pageData[1].data" :key="index">
+                            <NuxtLink class="img_li_2_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_2_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_2_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!-- 第二部分 -->
+            <div class="index_3 clearfix">
+                <div class="index_3_head  clearfix">
+                    <NuxtLink class="index_3_head_a" :class="{ 'index_3_head_a_only': tabsData2 == 1 }"
+                        :href="getLinkPath(pageData[2])" @mouseenter="tabsData2 = 1" v-if="pageData[2]"
+                        :title="pageData[2].alias">
+                        {{ pageData[2].alias }}
+                    </NuxtLink>
+                    <span class="index_3_head_a">/ </span>
+                    <NuxtLink class="index_3_head_a" :class="{ 'index_3_head_a_only': tabsData2 == 2 }"
+                        :href="getLinkPath(pageData[3])" @mouseenter="tabsData2 = 2" v-if="pageData[3]"
+                        :title="pageData[3].alias">
+                        {{ pageData[3].alias }}
+                    </NuxtLink>
+                </div>
+                <div class="index_3_in clearfix" v-if="tabsData2 == 1">
+                    <div class="ul_3 clearfix">
+                        <NuxtLink class="ul_3_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[2].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_3 clearfix">
+                        <div class="img_li_3" v-for="(item, index) in pageData[2].data" :key="index">
+                            <NuxtLink class="img_li_3_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_3_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_3_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="index_3_in clearfix" v-if="tabsData2 == 2">
+                    <div class="ul_3 clearfix">
+                        <NuxtLink class="ul_3_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[3].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_3 clearfix">
+                        <div class="img_li_3" v-for="(item, index) in pageData[3].data" :key="index">
+                            <NuxtLink class="img_li_3_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_3_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_3_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!-- 第三部分 -->
+            <div class="index_4 clearfix">
+                <div class="index_4_head  clearfix">
+                    <NuxtLink class="index_4_head_a" :class="{ 'index_4_head_a_only': tabsData3 == 1 }"
+                        :href="getLinkPath(pageData[4])" @mouseenter="tabsData3 = 1" v-if="pageData[4]"
+                        :title="pageData[4].alias">
+                        {{ pageData[4].alias }}
+                    </NuxtLink>
+                    <span class="index_4_head_a">/ </span>
+                    <NuxtLink class="index_4_head_a" :class="{ 'index_4_head_a_only': tabsData3 == 2 }"
+                        :href="getLinkPath(pageData[5])" @mouseenter="tabsData3 = 2" v-if="pageData[5]"
+                        :title="pageData[5].alias">
+                        {{ pageData[5].alias }}
+                    </NuxtLink>
+                </div>
+                <div class="index_4_in clearfix" v-if="tabsData3 == 1">
+                    <div class="ul_4 clearfix">
+                        <Nuxtlink class="ul_4_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[4].data2" :key="index">
+                            {{ item.title }}
+                        </Nuxtlink>
+                    </div>
+                    <div class="img_ul_4 clearfix">
+                        <div class="img_li_4" v-for="(item, index) in pageData[4].data" :key="index">
+                            <NuxtLink class="img_li_4_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_4_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_4_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="index_4_in clearfix" v-if="tabsData3 == 2">
+                    <div class="ul_4 clearfix">
+                        <Nuxtlink class="ul_4_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[5].data2" :key="index">
+                            {{ item.title }}
+                        </Nuxtlink>
+                    </div>
+                    <div class="img_ul_4 clearfix">
+                        <div class="img_li_4" v-for="(item, index) in pageData[5].data" :key="index">
+                            <NuxtLink class="img_li_4_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_4_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_4_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!-- 第四部分 -->
+            <div class="index_5 clearfix">
+                <div class="index_5_head  clearfix">
+                    <NuxtLink class="index_5_head_a" :class="{ 'index_5_head_a_only': tabsData4 == 1 }"
+                        :href="getLinkPath(pageData[6])" @mouseenter="tabsData4 = 1" v-if="pageData[6]"
+                        :title="pageData[6].alias">
+                        {{ pageData[6].alias }}
+                    </NuxtLink>
+                    <span class="index_5_head_a">/ </span>
+                    <NuxtLink class="index_5_head_a" :class="{ 'index_5_head_a_only': tabsData4 == 2 }"
+                        :href="getLinkPath(pageData[7])" @mouseenter="tabsData4 = 2" v-if="pageData[7]"
+                        :title="pageData[7].alias">
+                        {{ pageData[7].alias }}
+                    </NuxtLink>
+                </div>
+                <div class="index_5_in clearfix" v-if="tabsData4 == 1">
+                    <div class="ul_5 clearfix">
+                        <NuxtLink class="ul_5_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[6].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_5 clearfix">
+                        <div class="img_li_5" v-for="(item, index) in pageData[6].data" :key="index">
+                            <NuxtLink class="img_li_5_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_5_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_5_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="index_5_in clearfix" v-if="tabsData4 == 2">
+                    <div class="ul_5 clearfix">
+                        <NuxtLink class="ul_5_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[7].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_5 clearfix">
+                        <div class="img_li_5" v-for="(item, index) in pageData[7].data" :key="index">
+                            <NuxtLink class="img_li_5_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_5_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_5_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!-- 第五部分 -->
+            <div class="index_5 clearfix">
+                <div class="index_5_head clearfix">
+                    <NuxtLink class="index_5_head_a" :class="{ 'index_5_head_a_only': tabsData5 == 1 }"
+                        :href="getLinkPath(pageData[8])" @mouseenter="tabsData5 = 1" v-if="pageData[8]"
+                        :title="pageData[8].alias">
+                        {{ pageData[8].alias }}
+                    </NuxtLink>
+                    <span class="index_5_head_a" v-if="pageData[9]">/ </span>
+                    <NuxtLink class="index_5_head_a" :class="{ 'index_5_head_a_only': tabsData5 == 2 }"
+                        :href="getLinkPath(pageData[9])" @mouseenter="tabsData5 = 2" v-if="pageData[9]"
+                        :title="pageData[9].alias">
+                        {{ pageData[9].alias }}
+                    </NuxtLink>
+                </div>
+                <div class="index_5_in clearfix" v-if="tabsData5 == 1">
+                    <div class="ul_5 clearfix">
+                        <NuxtLink class="ul_5_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[8].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_5 clearfix">
+                        <div class="img_li_5" v-for="(item, index) in pageData[8].data" :key="index">
+                            <NuxtLink class="img_li_5_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_5_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_5_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="index_5_in clearfix" v-if="tabsData5 == 2">
+                    <div class="ul_5 clearfix">
+                        <NuxtLink class="ul_5_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[9].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_5 clearfix">
+                        <div class="img_li_5" v-for="(item, index) in pageData[9].data" :key="index">
+                            <NuxtLink class="img_li_5_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_5_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_5_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <aside class="index_aside clearfix">
+            <!-- 最新资讯 -->
+            <div class="clearfix">
+                <div class="index_aside_head_1 clearfix">
+                    <span class="index_aside_head_1_a" title="最新资讯">
+                        最新资讯
+                    </span>
+                </div>
+                <div class="index_aside_img_ul_1 clearfix">
+                    <div class="index_aside_img_li_1 clearfix" v-for="(item, index) in hotNewsListdata1" :key="index">
+                        <NuxtLink class="index_aside_img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title"
+                            :target="item.islink == 1 ? '_blank' : '_self'">
+                            <div class="index_aside_img_li_1_a_img_box">
+                                <img class="" :src="item.imgurl" :title="item.title" :alt="item.title">
+                            </div>
+                            <div class="index_aside_img_li_1_dot3 dot3">{{ item.title }}</div>
+                        </NuxtLink>
+                    </div>
+                </div>
+                <div class="index_aside_ul_1 clearfix">
+                    <NuxtLink class="index_aside_ul_1_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                        v-for="(item, index) in hotNewsListdata2" :key="index">
+                        {{ item.title }}
+                    </NuxtLink>
+                </div>
+            </div>
+            <!-- 热点精选 -->
+            <div class="">
+                <div class="index_aside_head_2 clearfix">
+                    <span class="index_aside_head_2_a" title="热点精选">
+                        热点精选
+                    </span>
+                </div>
+                <div class="index_aside_img_ul_2 clearfix">
+                    <div class="index_aside_img_li_2 clearfix" v-for="(item, index) in hotNewsList_img" :key="index">
+                        <NuxtLink class="index_aside_img_li_2_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <div class="index_aside_img_li_2_a_img_box">
+                                <img class="" :src="item.imgurl" :title="item.title" :alt="item.title">
+                            </div>
+                            <div class="index_aside_img_li_2_dot3 dot3">{{ item.title }}</div>
+                        </NuxtLink>
+                    </div>
+                </div>
+                <div class="index_aside_ul_2 clearfix">
+                    <NuxtLink class="index_aside_ul_2_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                        v-for="(item, index) in hotNewsList_text" :key="index">
+                        {{ item.title }}
+                    </NuxtLink>
+                </div>
+            </div>
+            <!-- 加盟连锁 -->
+        </aside>
+        <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
+    </main>
+    <HomeFoot></HomeFoot>
+</template>
+<script setup>
+//0.加载页面依赖 start ---------------------------------------->
+import { ref, onMounted } from 'vue';
+import { ElMessage } from 'element-plus';
+import { NuxtLink } from '#components';
+//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,
+    },
+});
+if (getRouteId.code == 200) {
+    routeId = getRouteId.data.category_id
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.获得路由id end ---------------------------------------->
+
+//2.选项卡 start ---------------------------------------->
+const tabsData1 = ref(1)
+const tabsData2 = ref(1)
+const tabsData3 = ref(1)
+const tabsData4 = ref(1)
+const tabsData5 = ref(1)
+//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=nmgw_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=nmgw_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=nmgw_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=nmgw_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);
+            }
+        }
+        //导航池加载完毕,开始申请模块数据
+        let getJson = []
+        for (let i = 0; i < pageData.value.length; i++) {
+            if (i == 0) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 1) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 2) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 3) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 4) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 5) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 6) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 7) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 8) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 9) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            }
+        }
+        let jsonString = JSON.stringify(getJson);
+        getPageAllData(jsonString);
+
+        let getJson1 = [
+            { "level": "2,6,0" },
+            { "level": "1,0,10" },
+        ]
+        let jsonString1 = JSON.stringify(getJson1);
+        getPageHotData(jsonString1);
+
+
+    } else {
+        console.log("错误:渲染8个模块环节出错,请检查是否存在没有数据的模块!")
+    }
+} catch (error) {
+    console.log("错误:导航池渲染执行接口出错!请检查频道页渲染的模块数据是否完整!")
+}
+
+// 获取所有模块数据
+async function getPageAllData(jsonString) {
+    const mkdata = await requestDataPromise('/web/getWebsiteProject', {
+        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].img_num;
+            pageData.value[0].data2 = mkdata.data[0].text_num;
+        }
+
+        if (mkdata.data.length > 1) {
+            //模块2
+            pageData.value[1].data = mkdata.data[1].img_num;
+            pageData.value[1].data2 = mkdata.data[1].text_num;
+        }
+
+        if (mkdata.data.length > 2) {
+            pageData.value[2].data = mkdata.data[2].img_num;
+            pageData.value[2].data2 = mkdata.data[2].text_num;
+        }
+
+        if (mkdata.data.length > 3) {
+            pageData.value[3].data = mkdata.data[3].img_num;
+            pageData.value[3].data2 = mkdata.data[3].text_num;
+        }
+
+        if (mkdata.data.length > 4) {
+            pageData.value[4].data = mkdata.data[4].img_num;
+            pageData.value[4].data2 = mkdata.data[4].text_num;
+        }
+
+        if (mkdata.data.length > 5) {
+            pageData.value[5].data = mkdata.data[5].img_num;
+            pageData.value[5].data2 = mkdata.data[5].text_num;
+
+        }
+
+        if (mkdata.data.length > 6) {
+            pageData.value[6].data = mkdata.data[6].img_num;
+            pageData.value[6].data2 = mkdata.data[6].text_num;
+        }
+
+        if (mkdata.data.length > 7) {
+            pageData.value[7].data = mkdata.data[7].img_num;
+            pageData.value[7].data2 = mkdata.data[7].text_num;
+        }
+
+        if (mkdata.data.length > 8) {
+            pageData.value[8].data = mkdata.data[8].img_num;
+            pageData.value[8].data2 = mkdata.data[8].text_num;
+        }
+
+        if (mkdata.data.length > 9) {
+            pageData.value[9].data = mkdata.data[9].img_num;
+            pageData.value[9].data2 = mkdata.data[9].text_num;
+        }
+
+
+    } else {
+        ElMessage.error(mkdata.message)
+    }
+}
+
+// 获取最新模块数据
+let newest = ref([]);
+let recommend = ref([]);
+async function getPageHotData(jsonString1) {
+    const mkdata = await requestDataPromise('/web/getWebsiteProject', {
+        method: 'GET',
+        query: {
+            'id': jsonString1
+        },
+    });
+    console.log('mkdata_HotData', mkdata.data)
+    if (mkdata.code == 200) {
+        if (mkdata.data.length > 0) {
+            newest.value = mkdata.data[0].img_num;
+            recommend.value = mkdata.data[1].text_num;
+        }
+    } else {
+        ElMessage.error(mkdata.message)
+    }
+}
+
+//4.页面数据 end ---------------------------------------->
+
+// 5.获取最新资讯和热点精选 start---------------------------------->
+// 5.1 最新资讯
+const hotNewsListdata1 = ref([])
+const hotNewsListdata2 = ref([])
+
+async function getPageData() {
+    const mkdata = await requestDataPromise('/web/getWebsiteArticlett', {
+        method: 'GET',
+        query: {
+            'imgnum': 2,
+            'textnum': 4,
+            'placeid': 0,
+            'level': 4,
+            'id': 0,
+        },
+    });
+    // console.log('mkdata1111111', mkdata.data);
+    if (mkdata.code == 200) {
+        hotNewsListdata1.value = mkdata.data.img;
+        hotNewsListdata2.value = mkdata.data.text;
+    } else {
+        console.log("错误位置:获取最新资讯")
+    }
+}
+getPageData();
+
+// 5.2 热点精选
+const hotNewsList_img = ref([])
+const hotNewsList_text = ref([])
+async function getPageData2() {
+    const mkdata = await requestDataPromise('/web/getWebsiteArticlett', {
+        method: 'GET',
+        query: {
+            'imgnum': 2,
+            'textnum': 4,
+            'level': 5,
+            'placeid': 0,
+            'id': 0
+        },
+    });
+    // console.log('mkdata111111222222', mkdata.data);
+    if (mkdata.code == 200) {
+        hotNewsList_img.value = mkdata.data.img;
+        hotNewsList_text.value = mkdata.data.text;
+    } else {
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+        console.log("错误位置:获取热点精选")
+        console.log("后端错误反馈:", mkdata.message)
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    }
+}
+getPageData2();
+
+// 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---------------------------------------->
+</script>
+<style lang="less" scoped>
+@import url(@/assets/css/project/class.less);
+</style>

+ 266 - 0
pages/nongmingongzhifuxinxi/list-[id].vue

@@ -0,0 +1,266 @@
+<template>
+    <div id="newsList">
+        <!-- 页面头部 -->
+        <HomePageHead></HomePageHead>
+        <!-- 导航栏 -->
+        <HomePageNavigation></HomePageNavigation>
+        <!-- 列表页广告一 -->
+        <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
+        <!-- 二级标题-->
+        <HomeListSecondaryHeading v-if="parent_name != ''" :name="parent_name" :nav="secondNav" :pinyin="parent_pinyin">
+        </HomeListSecondaryHeading>
+        <!-- 资讯列表 -->
+        <main class="index_main">
+            <!-- 面包屑导航 -->
+            <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>
+            <section class="img_ul_box clearfix">
+                <div class="img_li slow_6" v-for="(item, index) in newsList" :key="index">
+                    <NuxtLink class="img_li_a clearfix" :href="getLinkPathDetail(item)" :title="item.title">
+                        <h4 class="img_li_h4 dot1">{{ item.title }}</h4>
+                        <div class="img_li_in clearfix">
+                            <div class="img_li_left">
+                                <div class="img_li_left_foto_box">
+                                    <img class="img_li_left_foto" :src="item.imgurl" :title="item.title"
+                                        :alt="item.title">
+                                </div>
+                                <div class="img_li_left_dot1 dot1">{{ item.title }}</div>
+                            </div>
+                            <div class="img_li_right">
+                                <div class="img_li_right_dot5 dot5">
+                                    {{ item.description }}
+                                </div>
+                                <div class="img_li_right_detail">【查看详情】</div>
+                            </div>
+                        </div>
+                    </NuxtLink>
+                </div>
+                <div class="empty" v-if="newsList == false">
+                    <img src="@/public/topic/empty.png" alt="" class="empty_img">
+                    <span class="empty_text">当前暂无数据</span>
+                </div>
+            </section>
+            <!-- 分页器 -->
+            <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>
+        </main>
+        <!-- 列表页广告二 -->
+        <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
+let routeName;
+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
+    routeName = getRouteId.data.alias
+} else {
+    console.log("后端错误反馈:", getRouteId.message)
+}
+pageNum.value = parseInt(route.params.id);
+//2.路径 end---------------------------------------->
+
+//3.列表 start ---------------------------------------->
+let total = ref(0);
+let pageSize = ref(15);
+
+const newsList = ref([]);
+let newslists = async () => {
+    const listData = await requestDataPromise('/web/getWebsiteProjectList', {
+        method: 'GET',
+        query: {
+            'page': pageNum.value,
+            'pageSize': pageSize.value,
+            'category_id': articleId
+        },
+    });
+    console.log("listData1111", listData);
+
+
+    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=nmgw_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=nmgw_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/project/list.less');
+</style>

+ 316 - 0
pages/zhifuxinxi/[dir]/[id].vue

@@ -0,0 +1,316 @@
+<template>
+    <!-- 页面头部 -->
+    <HomePageHead></HomePageHead>
+    <!-- 导航栏 -->
+    <HomePageNavigation></HomePageNavigation>
+    <!-- 列表页广告一 -->
+    <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
+    <!-- 资讯列表 -->
+    <main class="index_main">
+        <!-- 面包屑导航 -->
+        <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>
+                        <NuxtLink :to="`list-1.html`"> {{ routLevelTitle }}</NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item>{{ routeNewsTtitle }}</el-breadcrumb-item>
+                </el-breadcrumb>
+            </div>
+        </div>
+        <section class="index_2 clearfix">
+            <img class="index_2_img" :src="img_one" :title="newsDetail.title" :alt="newsDetail.title">
+            <div class="index_2_right">
+                <h4 class="index_2_h4">{{ newsDetail.title }}</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">{{ newsDetail.business_name }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">联 系 人</label>
+                        <span class="index_2_li_text">{{ newsDetail.content_person }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">电 &nbsp;&nbsp;&nbsp;&nbsp; 话</label>
+                        <span class="index_2_li_text">{{ newsDetail.telephone }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">手 &nbsp;&nbsp;&nbsp;&nbsp; 机</label>
+                        <span class="index_2_li_text">{{ newsDetail.mobile }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">传 &nbsp;&nbsp;&nbsp;&nbsp; 真</label>
+                        <span class="index_2_li_text">{{ newsDetail.fax }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">邮 &nbsp;&nbsp;&nbsp;&nbsp; 箱</label>
+                        <span class="index_2_li_text">{{ newsDetail.email }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">邮 &nbsp;&nbsp;&nbsp;&nbsp; 编</label>
+                        <span class="index_2_li_text">{{ newsDetail.post_code }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">地 &nbsp;&nbsp;&nbsp;&nbsp; 址</label>
+                        <span class="index_2_li_text">{{ newsDetail.address }}</span>
+                    </div>
+                </div>
+            </div>
+        </section>
+        <section class="index_3 clearfix">
+            <div class="show_head_box clearfix">
+                <span class="show_head_a show_head_a_only">项目介绍</span>
+            </div>
+            <article class="show_article" v-html="newsDetail.introduce">
+            </article>
+        </section>
+        <section class="index_4 clearfix">
+            <div class="show_head_box_2 clearfix">
+                <span class="show_head_a_2 show_head_a_only_2">加盟详情</span>
+            </div>
+            <article class="show_article_2" v-html="newsDetail.franchise_details">
+            </article>
+        </section>
+        <section class="index_4 clearfix">
+            <div class="show_head_box_3 clearfix">
+                <span class="show_head_a_3 show_head_a_only_3">图片展示</span>
+            </div>
+            <div class="img_ul_1 clearfix">
+                <div class="img_li_1" title="" v-for="(item, index) in imgList" :key="index">
+                    <img class="img_li_1_img" :src="item" :title="newsDetail.title" :alt="newsDetail.title">
+                </div>
+            </div>
+        </section>
+        <section class="index_5 clearfix">
+            <div class="index_2_head clearfix">
+                <span class="index_2_head_a index_2_head_a_only" title="">精品项目推荐</span>
+            </div>
+            <div class="categ_ul_img_1">
+                <div class="categ_li_img_1" v-for="(item, index) in recommend" :key="index">
+                    <a class="categ_li_img_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                        <img class="categ_li_img_1_img" :src="item.imgurl" :title="item.title" :alt="item.title">
+                        <div class="categ_li_img_1_dot2 dot2">
+                            {{ item.title }}
+                        </div>
+                    </a>
+                </div>
+            </div>
+        </section>
+    </main>
+    <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 route = useRoute();
+const articleId = parseInt(route.params.id);
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+
+const parent_name = ref("");
+const parent_id = ref("");
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+if (getRouteId.code == 200) {
+    parent_name.value = getRouteId.data.alias;
+    parent_id.value = 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 routLevelTitle = ref("");
+const routLevelId = ref("");
+const getRouteId1 = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+if (getRouteId1.code == 200) {
+    routLevelTitle.value = getRouteId1.data.alias;
+    routLevelId.value = getRouteId1.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 ---------->")
+}
+//3.面包屑 end ---------------------------------------->
+
+//4.新闻详情 start ---------------------------------------->
+//4.1 资讯详情
+const newsDetail = ref({})
+const routeNewsTtitle = ref("");
+//4.2 发布日期
+const time = ref("");
+// 图片列表
+const imgList = ref([]);
+const img_one = ref("");
+//4.3 获取详情
+let seoTitle;
+let seoDescription;
+let seoKeywords;
+async function getPageData() {
+    const mkdata = await requestDataPromise('/web/getWebsiteProjectInfo', {
+        method: 'GET',
+        query: {
+            'id': articleId
+        },
+    });
+
+    if (mkdata.code == 200) {
+        //获取内容
+        newsDetail.value = mkdata.data;
+        //获取发布时间
+        time.value = newsDetail.value.updated_at.split(' ')[0];
+        //修正标题长度
+        if (newsDetail.value.title.length >= 20) {
+            routeNewsTtitle.value = newsDetail.value.title.substr(0, 20) + "...";
+        } else {
+            routeNewsTtitle.value = newsDetail.value.title
+        }
+        // 图片列表
+        imgList.value = JSON.parse(mkdata.data.imgurl);
+        img_one.value = imgList.value[0];
+        seoTitle = newsDetail.value.title;
+        seoDescription = newsDetail.value.description;
+        seoKeywords = newsDetail.value.keyword;
+    } 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 ---------------------------------------->
+
+// 推荐
+let getJson1 = [
+    { "level": "1,12,0" },
+]
+let jsonString1 = JSON.stringify(getJson1);
+getPageHotData(jsonString1);
+
+// 获取推荐数据
+let recommend = ref([]);
+async function getPageHotData(jsonString1) {
+    const mkdata = await requestDataPromise('/web/getWebsiteProject', {
+        method: 'GET',
+        query: {
+            'id': jsonString1
+        },
+    });
+    console.log('mkdata_HotData', mkdata.data)
+    if (mkdata.code == 200) {
+        if (mkdata.data.length > 0) {
+            recommend.value = mkdata.data[0].img_num;
+        }
+    } else {
+        ElMessage.error(mkdata.message)
+    }
+}
+
+//5.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': parent_id.value
+    },
+});
+
+if (setData.code == 200) {
+    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("设置频道页SEO出错!", setData.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=nmgw_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=nmgw_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];
+})
+//6.广告 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/project/detail.less');
+</style>

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

@@ -0,0 +1,266 @@
+<template>
+    <div id="newsList">
+        <!-- 页面头部 -->
+        <HomePageHead></HomePageHead>
+        <!-- 导航栏 -->
+        <HomePageNavigation></HomePageNavigation>
+        <!-- 列表页广告一 -->
+        <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
+        <!-- 二级标题-->
+        <HomeListSecondaryHeading v-if="parent_name != ''" :name="parent_name" :nav="secondNav" :pinyin="parent_pinyin">
+        </HomeListSecondaryHeading>
+        <!-- 资讯列表 -->
+        <main class="index_main">
+            <!-- 面包屑导航 -->
+            <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>
+            <section class="img_ul_box clearfix">
+                <div class="img_li slow_6" v-for="(item, index) in newsList" :key="index">
+                    <NuxtLink class="img_li_a clearfix" :href="getLinkPathDetail(item)" :title="item.title">
+                        <h4 class="img_li_h4 dot1">{{ item.title }}</h4>
+                        <div class="img_li_in clearfix">
+                            <div class="img_li_left">
+                                <div class="img_li_left_foto_box">
+                                    <img class="img_li_left_foto" :src="item.imgurl" :title="item.title"
+                                        :alt="item.title">
+                                </div>
+                                <div class="img_li_left_dot1 dot1">{{ item.title }}</div>
+                            </div>
+                            <div class="img_li_right">
+                                <div class="img_li_right_dot5 dot5">
+                                    {{ item.description }}
+                                </div>
+                                <div class="img_li_right_detail">【查看详情】</div>
+                            </div>
+                        </div>
+                    </NuxtLink>
+                </div>
+                <div class="empty" v-if="newsList == false">
+                    <img src="@/public/topic/empty.png" alt="" class="empty_img">
+                    <span class="empty_text">当前暂无数据</span>
+                </div>
+            </section>
+            <!-- 分页器 -->
+            <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>
+        </main>
+        <!-- 列表页广告二 -->
+        <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
+let routeName;
+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
+    routeName = getRouteId.data.alias
+} else {
+    console.log("后端错误反馈:", getRouteId.message)
+}
+pageNum.value = parseInt(route.params.id);
+//2.路径 end---------------------------------------->
+
+//3.列表 start ---------------------------------------->
+let total = ref(0);
+let pageSize = ref(15);
+
+const newsList = ref([]);
+let newslists = async () => {
+    const listData = await requestDataPromise('/web/getWebsiteProjectList', {
+        method: 'GET',
+        query: {
+            'page': pageNum.value,
+            'pageSize': pageSize.value,
+            'category_id': articleId
+        },
+    });
+    console.log("listData1111", listData);
+
+
+    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=nmgw_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=nmgw_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/project/list.less');
+</style>

+ 313 - 0
pages/zhifuxinxi/[id].vue

@@ -0,0 +1,313 @@
+<template>
+    <!-- 页面头部 -->
+    <HomePageHead></HomePageHead>
+    <!-- 导航栏 -->
+    <HomePageNavigation></HomePageNavigation>
+    <!-- 列表页广告一 -->
+    <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
+    <!-- 资讯列表 -->
+    <main class="index_main">
+        <!-- 面包屑导航 -->
+        <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>{{ routeNewsTtitle }}</el-breadcrumb-item>
+                </el-breadcrumb>
+            </div>
+        </div>
+        <section class="index_2 clearfix">
+            <img class="index_2_img" :src="img_one" :title="newsDetail.title" :alt="newsDetail.title">
+            <div class="index_2_right">
+                <h4 class="index_2_h4">{{ newsDetail.title }}</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">{{ newsDetail.business_name }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">联 系 人</label>
+                        <span class="index_2_li_text">{{ newsDetail.content_person }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">电 &nbsp;&nbsp;&nbsp;&nbsp; 话</label>
+                        <span class="index_2_li_text">{{ newsDetail.telephone }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">手 &nbsp;&nbsp;&nbsp;&nbsp; 机</label>
+                        <span class="index_2_li_text">{{ newsDetail.mobile }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">传 &nbsp;&nbsp;&nbsp;&nbsp; 真</label>
+                        <span class="index_2_li_text">{{ newsDetail.fax }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">邮 &nbsp;&nbsp;&nbsp;&nbsp; 箱</label>
+                        <span class="index_2_li_text">{{ newsDetail.email }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">邮 &nbsp;&nbsp;&nbsp;&nbsp; 编</label>
+                        <span class="index_2_li_text">{{ newsDetail.post_code }}</span>
+                    </div>
+                    <div class="index_2_li clearfix">
+                        <label class="index_2_li_label">地 &nbsp;&nbsp;&nbsp;&nbsp; 址</label>
+                        <span class="index_2_li_text">{{ newsDetail.address }}</span>
+                    </div>
+                </div>
+            </div>
+        </section>
+        <section class="index_3 clearfix">
+            <div class="show_head_box clearfix">
+                <span class="show_head_a show_head_a_only">项目介绍</span>
+            </div>
+            <article class="show_article" v-html="newsDetail.introduce">
+            </article>
+        </section>
+        <section class="index_4 clearfix">
+            <div class="show_head_box_2 clearfix">
+                <span class="show_head_a_2 show_head_a_only_2">加盟详情</span>
+            </div>
+            <article class="show_article_2" v-html="newsDetail.franchise_details">
+            </article>
+        </section>
+        <section class="index_4 clearfix">
+            <div class="show_head_box_3 clearfix">
+                <span class="show_head_a_3 show_head_a_only_3">图片展示</span>
+            </div>
+            <div class="img_ul_1 clearfix">
+                <div class="img_li_1" title="" v-for="(item, index) in imgList" :key="index">
+                    <img class="img_li_1_img" :src="item" :title="newsDetail.title" :alt="newsDetail.title">
+                </div>
+            </div>
+        </section>
+        <section class="index_5 clearfix">
+            <div class="index_2_head clearfix">
+                <span class="index_2_head_a index_2_head_a_only" title="">精品项目推荐</span>
+            </div>
+            <div class="categ_ul_img_1">
+                <div class="categ_li_img_1" v-for="(item, index) in recommend" :key="index">
+                    <a class="categ_li_img_1_a" :href="getLinkPathDetail(item)" :title="item.title">
+                        <img class="categ_li_img_1_img" :src="item.imgurl" :title="item.title" :alt="item.title">
+                        <div class="categ_li_img_1_dot2 dot2">
+                            {{ item.title }}
+                        </div>
+                    </a>
+                </div>
+            </div>
+        </section>
+    </main>
+    <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 route = useRoute();
+const articleId = parseInt(route.params.id);
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+
+const parent_name = ref("");
+const parent_id = ref("");
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+if (getRouteId.code == 200) {
+    parent_name.value = getRouteId.data.alias;
+    parent_id.value = 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 routLevelTitle = ref("");
+const routLevelId = ref("");
+const getRouteId1 = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+if (getRouteId1.code == 200) {
+    routLevelTitle.value = getRouteId1.data.alias;
+    routLevelId.value = getRouteId1.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 ---------->")
+}
+//3.面包屑 end ---------------------------------------->
+
+//4.新闻详情 start ---------------------------------------->
+//4.1 资讯详情
+const newsDetail = ref({})
+const routeNewsTtitle = ref("");
+//4.2 发布日期
+const time = ref("");
+// 图片列表
+const imgList = ref([]);
+const img_one = ref("");
+//4.3 获取详情
+let seoTitle;
+let seoDescription;
+let seoKeywords;
+async function getPageData() {
+    const mkdata = await requestDataPromise('/web/getWebsiteProjectInfo', {
+        method: 'GET',
+        query: {
+            'id': articleId
+        },
+    });
+
+    if (mkdata.code == 200) {
+        //获取内容
+        newsDetail.value = mkdata.data;
+        //获取发布时间
+        time.value = newsDetail.value.updated_at.split(' ')[0];
+        //修正标题长度
+        if (newsDetail.value.title.length >= 20) {
+            routeNewsTtitle.value = newsDetail.value.title.substr(0, 20) + "...";
+        } else {
+            routeNewsTtitle.value = newsDetail.value.title
+        }
+        // 图片列表
+        imgList.value = JSON.parse(mkdata.data.imgurl);
+        img_one.value = imgList.value[0];
+        seoTitle = newsDetail.value.title;
+        seoDescription = newsDetail.value.description;
+        seoKeywords = newsDetail.value.keyword;
+    } 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 ---------------------------------------->
+
+// 推荐
+let getJson1 = [
+    { "level": "1,12,0" },
+]
+let jsonString1 = JSON.stringify(getJson1);
+getPageHotData(jsonString1);
+
+// 获取推荐数据
+let recommend = ref([]);
+async function getPageHotData(jsonString1) {
+    const mkdata = await requestDataPromise('/web/getWebsiteProject', {
+        method: 'GET',
+        query: {
+            'id': jsonString1
+        },
+    });
+    console.log('mkdata_HotData', mkdata.data)
+    if (mkdata.code == 200) {
+        if (mkdata.data.length > 0) {
+            recommend.value = mkdata.data[0].img_num;
+        }
+    } else {
+        ElMessage.error(mkdata.message)
+    }
+}
+
+//5.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': parent_id.value
+    },
+});
+
+if (setData.code == 200) {
+    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("设置频道页SEO出错!", setData.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=nmgw_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=nmgw_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];
+})
+//6.广告 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/project/detail.less');
+</style>

+ 696 - 0
pages/zhifuxinxi/index.html.vue

@@ -0,0 +1,696 @@
+<template>
+    <HomePageHead></HomePageHead>
+    <HomePageNavigation></HomePageNavigation>
+    <div class="adPlace">
+        <HomeAdvertising :imgurl="adImg1"></HomeAdvertising>
+    </div>
+    <HomeSecondaryHeading :titleData="pageData" :pinyinid="routeId"></HomeSecondaryHeading>
+    <section class="index_1 clearfix index_main">
+        <!-- 最新 -->
+        <div class="img_ul_1 clearfix">
+            <NuxtLink class="img_li_1" :href="getLinkPathDetail(item)" :title="item.title"
+                v-for="(item, index) in newest" :key="index">
+                <img class="img_li_1_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+            </NuxtLink>
+        </div>
+        <!-- 推荐 -->
+        <div class="ul_1 clearfix">
+            <NuxtLink class="ul_1_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                v-for="(item, index) in recommend" :key="index">
+                {{ item.title }}
+            </NuxtLink>
+        </div>
+    </section>
+    <main class="index_main clearfix">
+        <div class="index_left">
+            <!-- 第一部分 -->
+            <div class="index_2 clearfix">
+                <div class="index_2_head  clearfix">
+                    <NuxtLink class="index_2_head_a" :class="{ 'index_2_head_a_only': tabsData1 == 1 }"
+                        @mouseenter="tabsData1 = 1" :href="getLinkPath(pageData[0])" v-if="pageData[0]"
+                        :title="pageData[0].alias">
+                        {{ pageData[0].alias }}
+                    </NuxtLink>
+                    <span class="index_2_head_a">/ </span>
+                    <NuxtLink class="index_2_head_a" :class="{ 'index_2_head_a_only': tabsData1 == 2 }"
+                        @mouseenter="tabsData1 = 2" :href="getLinkPath(pageData[1])" v-if="pageData[1]"
+                        :title="pageData[1].alias">
+                        {{ pageData[1].alias }}
+                    </NuxtLink>
+                </div>
+                <div class="index_2_in clearfix" v-if="tabsData1 === 1">
+                    <div class="ul_2 clearfix">
+                        <NuxtLink class="ul_2_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[0].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_2 clearfix">
+                        <div class="img_li_2" v-for="(item, index) in pageData[0].data" :key="index">
+                            <NuxtLink class="img_li_2_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_2_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_2_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="index_2_in clearfix" v-if="tabsData1 === 2">
+                    <div class="ul_2 clearfix">
+                        <NuxtLink class="ul_2_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[1].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_2 clearfix">
+                        <div class="img_li_2" v-for="(item, index) in pageData[1].data" :key="index">
+                            <NuxtLink class="img_li_2_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_2_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_2_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!-- 第二部分 -->
+            <div class="index_3 clearfix">
+                <div class="index_3_head  clearfix">
+                    <NuxtLink class="index_3_head_a" :class="{ 'index_3_head_a_only': tabsData2 == 1 }"
+                        :href="getLinkPath(pageData[2])" @mouseenter="tabsData2 = 1" v-if="pageData[2]"
+                        :title="pageData[2].alias">
+                        {{ pageData[2].alias }}
+                    </NuxtLink>
+                    <span class="index_3_head_a">/ </span>
+                    <NuxtLink class="index_3_head_a" :class="{ 'index_3_head_a_only': tabsData2 == 2 }"
+                        :href="getLinkPath(pageData[3])" @mouseenter="tabsData2 = 2" v-if="pageData[3]"
+                        :title="pageData[3].alias">
+                        {{ pageData[3].alias }}
+                    </NuxtLink>
+                </div>
+                <div class="index_3_in clearfix" v-if="tabsData2 == 1">
+                    <div class="ul_3 clearfix">
+                        <NuxtLink class="ul_3_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[2].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_3 clearfix">
+                        <div class="img_li_3" v-for="(item, index) in pageData[2].data" :key="index">
+                            <NuxtLink class="img_li_3_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_3_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_3_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="index_3_in clearfix" v-if="tabsData2 == 2">
+                    <div class="ul_3 clearfix">
+                        <NuxtLink class="ul_3_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[3].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_3 clearfix">
+                        <div class="img_li_3" v-for="(item, index) in pageData[3].data" :key="index">
+                            <NuxtLink class="img_li_3_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_3_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_3_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!-- 第三部分 -->
+            <div class="index_4 clearfix">
+                <div class="index_4_head  clearfix">
+                    <NuxtLink class="index_4_head_a" :class="{ 'index_4_head_a_only': tabsData3 == 1 }"
+                        :href="getLinkPath(pageData[4])" @mouseenter="tabsData3 = 1" v-if="pageData[4]"
+                        :title="pageData[4].alias">
+                        {{ pageData[4].alias }}
+                    </NuxtLink>
+                    <span class="index_4_head_a">/ </span>
+                    <NuxtLink class="index_4_head_a" :class="{ 'index_4_head_a_only': tabsData3 == 2 }"
+                        :href="getLinkPath(pageData[5])" @mouseenter="tabsData3 = 2" v-if="pageData[5]"
+                        :title="pageData[5].alias">
+                        {{ pageData[5].alias }}
+                    </NuxtLink>
+                </div>
+                <div class="index_4_in clearfix" v-if="tabsData3 == 1">
+                    <div class="ul_4 clearfix">
+                        <Nuxtlink class="ul_4_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[4].data2" :key="index">
+                            {{ item.title }}
+                        </Nuxtlink>
+                    </div>
+                    <div class="img_ul_4 clearfix">
+                        <div class="img_li_4" v-for="(item, index) in pageData[4].data" :key="index">
+                            <NuxtLink class="img_li_4_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_4_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_4_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="index_4_in clearfix" v-if="tabsData3 == 2">
+                    <div class="ul_4 clearfix">
+                        <Nuxtlink class="ul_4_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[5].data2" :key="index">
+                            {{ item.title }}
+                        </Nuxtlink>
+                    </div>
+                    <div class="img_ul_4 clearfix">
+                        <div class="img_li_4" v-for="(item, index) in pageData[5].data" :key="index">
+                            <NuxtLink class="img_li_4_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_4_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_4_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!-- 第四部分 -->
+            <div class="index_5 clearfix">
+                <div class="index_5_head  clearfix">
+                    <NuxtLink class="index_5_head_a" :class="{ 'index_5_head_a_only': tabsData4 == 1 }"
+                        :href="getLinkPath(pageData[6])" @mouseenter="tabsData4 = 1" v-if="pageData[6]"
+                        :title="pageData[6].alias">
+                        {{ pageData[6].alias }}
+                    </NuxtLink>
+                    <span class="index_5_head_a">/ </span>
+                    <NuxtLink class="index_5_head_a" :class="{ 'index_5_head_a_only': tabsData4 == 2 }"
+                        :href="getLinkPath(pageData[7])" @mouseenter="tabsData4 = 2" v-if="pageData[7]"
+                        :title="pageData[7].alias">
+                        {{ pageData[7].alias }}
+                    </NuxtLink>
+                </div>
+                <div class="index_5_in clearfix" v-if="tabsData4 == 1">
+                    <div class="ul_5 clearfix">
+                        <NuxtLink class="ul_5_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[6].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_5 clearfix">
+                        <div class="img_li_5" v-for="(item, index) in pageData[6].data" :key="index">
+                            <NuxtLink class="img_li_5_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_5_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_5_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="index_5_in clearfix" v-if="tabsData4 == 2">
+                    <div class="ul_5 clearfix">
+                        <NuxtLink class="ul_5_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[7].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_5 clearfix">
+                        <div class="img_li_5" v-for="(item, index) in pageData[7].data" :key="index">
+                            <NuxtLink class="img_li_5_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_5_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_5_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </div>
+            <!-- 第五部分 -->
+            <div class="index_5 clearfix">
+                <div class="index_5_head clearfix">
+                    <NuxtLink class="index_5_head_a" :class="{ 'index_5_head_a_only': tabsData5 == 1 }"
+                        :href="getLinkPath(pageData[8])" @mouseenter="tabsData5 = 1" v-if="pageData[8]"
+                        :title="pageData[8].alias">
+                        {{ pageData[8].alias }}
+                    </NuxtLink>
+                    <span class="index_5_head_a" v-if="pageData[9]">/ </span>
+                    <NuxtLink class="index_5_head_a" :class="{ 'index_5_head_a_only': tabsData5 == 2 }"
+                        :href="getLinkPath(pageData[9])" @mouseenter="tabsData5 = 2" v-if="pageData[9]"
+                        :title="pageData[9].alias">
+                        {{ pageData[9].alias }}
+                    </NuxtLink>
+                </div>
+                <div class="index_5_in clearfix" v-if="tabsData5 == 1">
+                    <div class="ul_5 clearfix">
+                        <NuxtLink class="ul_5_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[8].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_5 clearfix">
+                        <div class="img_li_5" v-for="(item, index) in pageData[8].data" :key="index">
+                            <NuxtLink class="img_li_5_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_5_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_5_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+                <div class="index_5_in clearfix" v-if="tabsData5 == 2">
+                    <div class="ul_5 clearfix">
+                        <NuxtLink class="ul_5_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                            v-for="(item, index) in pageData[9].data2" :key="index">
+                            {{ item.title }}
+                        </NuxtLink>
+                    </div>
+                    <div class="img_ul_5 clearfix">
+                        <div class="img_li_5" v-for="(item, index) in pageData[9].data" :key="index">
+                            <NuxtLink class="img_li_5_a" :href="getLinkPathDetail(item)" :title="item.title">
+                                <img class="img_li_5_a_photo" :src="item.imgurl" :title="item.title" :alt="item.title">
+                                <div class="img_li_5_dot1 dot1">{{ item.title }}</div>
+                            </NuxtLink>
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+        <aside class="index_aside clearfix">
+            <!-- 最新资讯 -->
+            <div class="clearfix">
+                <div class="index_aside_head_1 clearfix">
+                    <span class="index_aside_head_1_a" title="最新资讯">
+                        最新资讯
+                    </span>
+                </div>
+                <div class="index_aside_img_ul_1 clearfix">
+                    <div class="index_aside_img_li_1 clearfix" v-for="(item, index) in hotNewsListdata1" :key="index">
+                        <NuxtLink class="index_aside_img_li_1_a" :href="getLinkPathDetail(item)" :title="item.title"
+                            :target="item.islink == 1 ? '_blank' : '_self'">
+                            <div class="index_aside_img_li_1_a_img_box">
+                                <img class="" :src="item.imgurl" :title="item.title" :alt="item.title">
+                            </div>
+                            <div class="index_aside_img_li_1_dot3 dot3">{{ item.title }}</div>
+                        </NuxtLink>
+                    </div>
+                </div>
+                <div class="index_aside_ul_1 clearfix">
+                    <NuxtLink class="index_aside_ul_1_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                        v-for="(item, index) in hotNewsListdata2" :key="index">
+                        {{ item.title }}
+                    </NuxtLink>
+                </div>
+            </div>
+            <!-- 热点精选 -->
+            <div class="">
+                <div class="index_aside_head_2 clearfix">
+                    <span class="index_aside_head_2_a" title="热点精选">
+                        热点精选
+                    </span>
+                </div>
+                <div class="index_aside_img_ul_2 clearfix">
+                    <div class="index_aside_img_li_2 clearfix" v-for="(item, index) in hotNewsList_img" :key="index">
+                        <NuxtLink class="index_aside_img_li_2_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <div class="index_aside_img_li_2_a_img_box">
+                                <img class="" :src="item.imgurl" :title="item.title" :alt="item.title">
+                            </div>
+                            <div class="index_aside_img_li_2_dot3 dot3">{{ item.title }}</div>
+                        </NuxtLink>
+                    </div>
+                </div>
+                <div class="index_aside_ul_2 clearfix">
+                    <NuxtLink class="index_aside_ul_2_a dot1" :href="getLinkPathDetail(item)" :title="item.title"
+                        v-for="(item, index) in hotNewsList_text" :key="index">
+                        {{ item.title }}
+                    </NuxtLink>
+                </div>
+            </div>
+            <!-- 加盟连锁 -->
+        </aside>
+        <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
+    </main>
+    <HomeFoot></HomeFoot>
+</template>
+<script setup>
+//0.加载页面依赖 start ---------------------------------------->
+import { ref, onMounted } from 'vue';
+import { ElMessage } from 'element-plus';
+import { NuxtLink } from '#components';
+//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,
+    },
+});
+if (getRouteId.code == 200) {
+    routeId = getRouteId.data.category_id
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.获得路由id end ---------------------------------------->
+
+//2.选项卡 start ---------------------------------------->
+const tabsData1 = ref(1)
+const tabsData2 = ref(1)
+const tabsData3 = ref(1)
+const tabsData4 = ref(1)
+const tabsData5 = ref(1)
+//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=nmgw_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=nmgw_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=nmgw_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=nmgw_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);
+            }
+        }
+        //导航池加载完毕,开始申请模块数据
+        let getJson = []
+        for (let i = 0; i < pageData.value.length; i++) {
+            if (i == 0) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 1) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 2) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 3) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 4) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 5) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 6) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 7) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 8) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            } else if (i == 9) {
+                getJson.push({ "id": pageData.value[i].cid + ",2,10" });
+            }
+        }
+        let jsonString = JSON.stringify(getJson);
+        getPageAllData(jsonString);
+
+        let getJson1 = [
+            { "level": "2,6,0" },
+            { "level": "1,0,10" },
+        ]
+        let jsonString1 = JSON.stringify(getJson1);
+        getPageHotData(jsonString1);
+
+
+    } else {
+        console.log("错误:渲染8个模块环节出错,请检查是否存在没有数据的模块!")
+    }
+} catch (error) {
+    console.log("错误:导航池渲染执行接口出错!请检查频道页渲染的模块数据是否完整!")
+}
+
+// 获取所有模块数据
+async function getPageAllData(jsonString) {
+    const mkdata = await requestDataPromise('/web/getWebsiteProject', {
+        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].img_num;
+            pageData.value[0].data2 = mkdata.data[0].text_num;
+        }
+
+        if (mkdata.data.length > 1) {
+            //模块2
+            pageData.value[1].data = mkdata.data[1].img_num;
+            pageData.value[1].data2 = mkdata.data[1].text_num;
+        }
+
+        if (mkdata.data.length > 2) {
+            pageData.value[2].data = mkdata.data[2].img_num;
+            pageData.value[2].data2 = mkdata.data[2].text_num;
+        }
+
+        if (mkdata.data.length > 3) {
+            pageData.value[3].data = mkdata.data[3].img_num;
+            pageData.value[3].data2 = mkdata.data[3].text_num;
+        }
+
+        if (mkdata.data.length > 4) {
+            pageData.value[4].data = mkdata.data[4].img_num;
+            pageData.value[4].data2 = mkdata.data[4].text_num;
+        }
+
+        if (mkdata.data.length > 5) {
+            pageData.value[5].data = mkdata.data[5].img_num;
+            pageData.value[5].data2 = mkdata.data[5].text_num;
+
+        }
+
+        if (mkdata.data.length > 6) {
+            pageData.value[6].data = mkdata.data[6].img_num;
+            pageData.value[6].data2 = mkdata.data[6].text_num;
+        }
+
+        if (mkdata.data.length > 7) {
+            pageData.value[7].data = mkdata.data[7].img_num;
+            pageData.value[7].data2 = mkdata.data[7].text_num;
+        }
+
+        if (mkdata.data.length > 8) {
+            pageData.value[8].data = mkdata.data[8].img_num;
+            pageData.value[8].data2 = mkdata.data[8].text_num;
+        }
+
+        if (mkdata.data.length > 9) {
+            pageData.value[9].data = mkdata.data[9].img_num;
+            pageData.value[9].data2 = mkdata.data[9].text_num;
+        }
+
+
+    } else {
+        ElMessage.error(mkdata.message)
+    }
+}
+
+// 获取最新模块数据
+let newest = ref([]);
+let recommend = ref([]);
+async function getPageHotData(jsonString1) {
+    const mkdata = await requestDataPromise('/web/getWebsiteProject', {
+        method: 'GET',
+        query: {
+            'id': jsonString1
+        },
+    });
+    console.log('mkdata_HotData', mkdata.data)
+    if (mkdata.code == 200) {
+        if (mkdata.data.length > 0) {
+            newest.value = mkdata.data[0].img_num;
+            recommend.value = mkdata.data[1].text_num;
+        }
+    } else {
+        ElMessage.error(mkdata.message)
+    }
+}
+
+//4.页面数据 end ---------------------------------------->
+
+// 5.获取最新资讯和热点精选 start---------------------------------->
+// 5.1 最新资讯
+const hotNewsListdata1 = ref([])
+const hotNewsListdata2 = ref([])
+
+async function getPageData() {
+    const mkdata = await requestDataPromise('/web/getWebsiteArticlett', {
+        method: 'GET',
+        query: {
+            'imgnum': 2,
+            'textnum': 4,
+            'placeid': 0,
+            'level': 4,
+            'id': 0,
+        },
+    });
+    // console.log('mkdata1111111', mkdata.data);
+    if (mkdata.code == 200) {
+        hotNewsListdata1.value = mkdata.data.img;
+        hotNewsListdata2.value = mkdata.data.text;
+    } else {
+        console.log("错误位置:获取最新资讯")
+    }
+}
+getPageData();
+
+// 5.2 热点精选
+const hotNewsList_img = ref([])
+const hotNewsList_text = ref([])
+async function getPageData2() {
+    const mkdata = await requestDataPromise('/web/getWebsiteArticlett', {
+        method: 'GET',
+        query: {
+            'imgnum': 2,
+            'textnum': 4,
+            'level': 5,
+            'placeid': 0,
+            'id': 0
+        },
+    });
+    // console.log('mkdata111111222222', mkdata.data);
+    if (mkdata.code == 200) {
+        hotNewsList_img.value = mkdata.data.img;
+        hotNewsList_text.value = mkdata.data.text;
+    } else {
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+        console.log("错误位置:获取热点精选")
+        console.log("后端错误反馈:", mkdata.message)
+        console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    }
+}
+getPageData2();
+
+// 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---------------------------------------->
+</script>
+<style lang="less" scoped>
+@import url(@/assets/css/project/class.less);
+</style>

+ 266 - 0
pages/zhifuxinxi/list-[id].vue

@@ -0,0 +1,266 @@
+<template>
+    <div id="newsList">
+        <!-- 页面头部 -->
+        <HomePageHead></HomePageHead>
+        <!-- 导航栏 -->
+        <HomePageNavigation></HomePageNavigation>
+        <!-- 列表页广告一 -->
+        <HomeTopTen :imgurl="adImg1" v-if="adImg1"></HomeTopTen>
+        <!-- 二级标题-->
+        <HomeListSecondaryHeading v-if="parent_name != ''" :name="parent_name" :nav="secondNav" :pinyin="parent_pinyin">
+        </HomeListSecondaryHeading>
+        <!-- 资讯列表 -->
+        <main class="index_main">
+            <!-- 面包屑导航 -->
+            <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>
+            <section class="img_ul_box clearfix">
+                <div class="img_li slow_6" v-for="(item, index) in newsList" :key="index">
+                    <NuxtLink class="img_li_a clearfix" :href="getLinkPathDetail(item)" :title="item.title">
+                        <h4 class="img_li_h4 dot1">{{ item.title }}</h4>
+                        <div class="img_li_in clearfix">
+                            <div class="img_li_left">
+                                <div class="img_li_left_foto_box">
+                                    <img class="img_li_left_foto" :src="item.imgurl" :title="item.title"
+                                        :alt="item.title">
+                                </div>
+                                <div class="img_li_left_dot1 dot1">{{ item.title }}</div>
+                            </div>
+                            <div class="img_li_right">
+                                <div class="img_li_right_dot5 dot5">
+                                    {{ item.description }}
+                                </div>
+                                <div class="img_li_right_detail">【查看详情】</div>
+                            </div>
+                        </div>
+                    </NuxtLink>
+                </div>
+                <div class="empty" v-if="newsList == false">
+                    <img src="@/public/topic/empty.png" alt="" class="empty_img">
+                    <span class="empty_text">当前暂无数据</span>
+                </div>
+            </section>
+            <!-- 分页器 -->
+            <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>
+        </main>
+        <!-- 列表页广告二 -->
+        <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
+let routeName;
+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
+    routeName = getRouteId.data.alias
+} else {
+    console.log("后端错误反馈:", getRouteId.message)
+}
+pageNum.value = parseInt(route.params.id);
+//2.路径 end---------------------------------------->
+
+//3.列表 start ---------------------------------------->
+let total = ref(0);
+let pageSize = ref(15);
+
+const newsList = ref([]);
+let newslists = async () => {
+    const listData = await requestDataPromise('/web/getWebsiteProjectList', {
+        method: 'GET',
+        query: {
+            'page': pageNum.value,
+            'pageSize': pageSize.value,
+            'category_id': articleId
+        },
+    });
+    console.log("listData1111", listData);
+
+
+    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=nmgw_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=nmgw_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/project/list.less');
+</style>