Browse Source

求职招聘功能完成

Jing 1 day ago
parent
commit
f0f6874b94

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

@@ -33,6 +33,12 @@ interface _GlobalComponents {
     'HomePageHead': typeof import("../components/home/pageHead.vue")['default']
     'HomePageNavigation': typeof import("../components/home/pageNavigation.vue")['default']
     'HomePageNavigation1': typeof import("../components/home/pageNavigation1.vue")['default']
+    'JobClass': typeof import("../components/job/class.vue")['default']
+    'JobDetailJobHunting': typeof import("../components/job/detail_jobHunting.vue")['default']
+    'JobDetailRecruit': typeof import("../components/job/detail_recruit.vue")['default']
+    'JobList': typeof import("../components/job/list.vue")['default']
+    'JobListJobHunting': typeof import("../components/job/list_jobHunting.vue")['default']
+    'JobListRecruit': typeof import("../components/job/list_recruit.vue")['default']
     'NewsClass': typeof import("../components/news/class.vue")['default']
     'NewsDetail': typeof import("../components/news/detail.vue")['default']
     'NewsDetailSec': typeof import("../components/news/detail_sec.vue")['default']
@@ -90,6 +96,12 @@ interface _GlobalComponents {
     'LazyHomePageHead': typeof import("../components/home/pageHead.vue")['default']
     'LazyHomePageNavigation': typeof import("../components/home/pageNavigation.vue")['default']
     'LazyHomePageNavigation1': typeof import("../components/home/pageNavigation1.vue")['default']
+    'LazyJobClass': typeof import("../components/job/class.vue")['default']
+    'LazyJobDetailJobHunting': typeof import("../components/job/detail_jobHunting.vue")['default']
+    'LazyJobDetailRecruit': typeof import("../components/job/detail_recruit.vue")['default']
+    'LazyJobList': typeof import("../components/job/list.vue")['default']
+    'LazyJobListJobHunting': typeof import("../components/job/list_jobHunting.vue")['default']
+    'LazyJobListRecruit': typeof import("../components/job/list_recruit.vue")['default']
     'LazyNewsClass': typeof import("../components/news/class.vue")['default']
     'LazyNewsDetail': typeof import("../components/news/detail.vue")['default']
     'LazyNewsDetailSec': typeof import("../components/news/detail_sec.vue")['default']
@@ -153,6 +165,12 @@ export const HomeKefu: typeof import("../components/home/kefu.vue")['default']
 export const HomePageHead: typeof import("../components/home/pageHead.vue")['default']
 export const HomePageNavigation: typeof import("../components/home/pageNavigation.vue")['default']
 export const HomePageNavigation1: typeof import("../components/home/pageNavigation1.vue")['default']
+export const JobClass: typeof import("../components/job/class.vue")['default']
+export const JobDetailJobHunting: typeof import("../components/job/detail_jobHunting.vue")['default']
+export const JobDetailRecruit: typeof import("../components/job/detail_recruit.vue")['default']
+export const JobList: typeof import("../components/job/list.vue")['default']
+export const JobListJobHunting: typeof import("../components/job/list_jobHunting.vue")['default']
+export const JobListRecruit: typeof import("../components/job/list_recruit.vue")['default']
 export const NewsClass: typeof import("../components/news/class.vue")['default']
 export const NewsDetail: typeof import("../components/news/detail.vue")['default']
 export const NewsDetailSec: typeof import("../components/news/detail_sec.vue")['default']
@@ -210,6 +228,12 @@ export const LazyHomeKefu: typeof import("../components/home/kefu.vue")['default
 export const LazyHomePageHead: typeof import("../components/home/pageHead.vue")['default']
 export const LazyHomePageNavigation: typeof import("../components/home/pageNavigation.vue")['default']
 export const LazyHomePageNavigation1: typeof import("../components/home/pageNavigation1.vue")['default']
+export const LazyJobClass: typeof import("../components/job/class.vue")['default']
+export const LazyJobDetailJobHunting: typeof import("../components/job/detail_jobHunting.vue")['default']
+export const LazyJobDetailRecruit: typeof import("../components/job/detail_recruit.vue")['default']
+export const LazyJobList: typeof import("../components/job/list.vue")['default']
+export const LazyJobListJobHunting: typeof import("../components/job/list_jobHunting.vue")['default']
+export const LazyJobListRecruit: typeof import("../components/job/list_recruit.vue")['default']
 export const LazyNewsClass: typeof import("../components/news/class.vue")['default']
 export const LazyNewsDetail: typeof import("../components/news/detail.vue")['default']
 export const LazyNewsDetailSec: typeof import("../components/news/detail_sec.vue")['default']

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

@@ -1 +1 @@
-{"id":"54c9526e-38e1-4dd6-bfe1-46a6a29483b2","timestamp":1752569761416}
+{"id":"d19c34dd-ac34-4094-9894-59efeb49f139","timestamp":1753257069775}

+ 0 - 1
.nuxt/manifest/meta/54c9526e-38e1-4dd6-bfe1-46a6a29483b2.json

@@ -1 +0,0 @@
-{"id":"54c9526e-38e1-4dd6-bfe1-46a6a29483b2","timestamp":1752569761416,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}

+ 1 - 0
.nuxt/manifest/meta/d19c34dd-ac34-4094-9894-59efeb49f139.json

@@ -0,0 +1 @@
+{"id":"d19c34dd-ac34-4094-9894-59efeb49f139","timestamp":1753257069775,"matcher":{"static":{},"wildcard":{},"dynamic":{}},"prerendered":[]}

+ 1 - 1
.nuxt/tsconfig.json

@@ -102,7 +102,7 @@
         "./imports"
       ],
       "#app-manifest": [
-        "./manifest/meta/54c9526e-38e1-4dd6-bfe1-46a6a29483b2.json"
+        "./manifest/meta/d19c34dd-ac34-4094-9894-59efeb49f139.json"
       ],
       "#components": [
         "./components"

+ 479 - 0
assets/css/job/class.less

@@ -0,0 +1,479 @@
+@charset "utf-8";
+
+//导航条
+.breadcrumb {
+    width: 100%;
+    height: 22px;
+    padding-bottom: 20px;
+    border-bottom: 1px solid #ccc;
+    font-family: Microsoft YaHei, Microsoft YaHei;
+    font-weight: 400;
+    font-size: 20px;
+    color: #666666;
+    line-height: 23px;
+    text-align: left;
+    font-style: normal;
+    text-transform: none;
+    margin-top: 30px;
+
+    :deep(.el-breadcrumb) {
+        display: inline-block;
+        vertical-align: -4px;
+    }
+
+    :deep(.el-breadcrumb__inner a),
+    :deep(.el-breadcrumb__inner.is-link) {
+        color: #666666;
+        font-weight: 400;
+        text-decoration: none;
+        transition: var(--el-transition-color);
+    }
+
+    span {
+        font-family: Microsoft YaHei, Microsoft YaHei;
+        font-weight: 400;
+        font-size: 20px;
+        color: #666666;
+        line-height: 23px;
+        text-align: left;
+        font-style: normal;
+        text-transform: none;
+    }
+
+    span:hover {
+        color: #666666;
+    }
+
+    .location {
+        margin-right: 20px;
+        width: 100px;
+        height: 22px;
+        font-family: Microsoft YaHei, Microsoft YaHei;
+        font-weight: 400;
+        font-size: 20px;
+        color: #666666;
+        line-height: 23px;
+        text-align: left;
+        font-style: normal;
+        text-transform: none;
+    }
+}
+
+.shop_head_1 {
+    height: 29px;
+    position: relative;
+
+    .shop_head_1_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+}
+
+.categ_color_box {
+    border: solid 1px #E9E9E9;
+    background: #F8F8F8;
+    margin-top: 30px;
+    box-sizing: border-box;
+
+    .categ_color_name {
+        width: 1160px;
+        margin: 0px auto;
+        height: 60px;
+        line-height: 60px;
+        color: #333;
+        font-size: 18px;
+        border-bottom: dashed 1px #E9E9E9;
+    }
+
+    .categ_color_in {
+        padding: 6px 0px 0px;
+    }
+
+    .categ_color_a {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #333;
+        margin: 10px 10px 16px;
+        font-size: 16px;
+        padding: 0px 10px;
+    }
+
+    .categ_color_a_only {
+        color: #fff;
+        background: #255590;
+    }
+}
+
+* {
+    font-family: "微软雅黑", "microsoft yahei";
+}
+
+ul,
+ol {
+    list-style: none;
+}
+
+a:active {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: none;
+}
+
+a:visited {
+    text-decoration: none;
+}
+
+a:link {
+    text-decoration: none;
+}
+
+a:focus {
+    text-decoration: none;
+}
+
+body {
+    position: relative;
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.clearfix_2::after {
+    content: '';
+    display: block;
+    height: 0;
+    visibility: hidden;
+    clear: both;
+}
+
+.hiddenColor {
+    visibility: hidden;
+}
+
+.hand {
+    cursor: pointer;
+}
+
+.aTag_parent {
+    position: relative;
+}
+
+.aTag_parent>a,
+.aTag {
+    display: block;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    z-index: 99;
+    border: 0px;
+    top: 0px;
+    left: 0px;
+    background: rgba(0, 0, 0, 0);
+}
+
+.dot1 {
+    display: block;
+    word-break: keep-all;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+.dot2 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+}
+
+input,
+img {
+    border: none;
+}
+
+.cover100 img {
+    display: block;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+
+.back100 {
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+}
+
+article,
+aside,
+footer,
+header,
+time,
+video,
+main,
+nav,
+h4,
+h3,
+section {
+    display: block;
+}
+
+.index_main {
+    margin: 0 auto;
+}
+
+.slow_6 {
+    -webkit-transition: all .6s;
+    -moz-transition: all .6s;
+    -ms-transition: all .6s;
+    -o-transition: all .6s;
+    transition: all .6s;
+}
+
+.index_main {
+    width: 1200px;
+}
+
+.index_1 {
+    margin-top: 30px;
+}
+
+.index_2 {
+    margin-top: 30px;
+}
+
+.box_1 {
+    border: solid 1px #ddd;
+    width: 588px;
+}
+
+.box_1:nth-of-type(odd) {
+    float: left;
+}
+
+.box_1:nth-of-type(even) {
+    float: right;
+}
+
+.box_1_head {
+    height: 67px;
+    background: #F7FBFE;
+    border-bottom: solid 1px #ddd;
+    position: relative;
+
+    .box_1_head_name {
+        float: left;
+        height: 67px;
+        line-height: 67px;
+        margin-left: 20px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+    }
+}
+
+.box_2 {
+    border: solid 1px #ddd;
+}
+
+.box_2_head {
+    height: 67px;
+    background: #F7FBFE;
+    border-bottom: solid 1px #ddd;
+    position: relative;
+
+    .box_2_head_name {
+        float: left;
+        height: 67px;
+        line-height: 67px;
+        margin-left: 20px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+    }
+}
+
+.box_2 {
+    border: solid 1px #ddd;
+}
+
+.ul_1 {
+    width: 555px;
+    height: 168px;
+    margin: 30px auto 0;
+
+    .ul_1_li {
+        height: 26px;
+        line-height: 26px;
+        margin-bottom: 30px;
+    }
+
+    .ul_1_li_a {
+        display: block;
+        width: 100%;
+        height: 100%;
+        display: flex;
+        justify-content: space-between;
+        /* 两端对齐 */
+    }
+
+    .ul_1_li_h4 {
+        flex: 1;
+        /* 优先扩展 */
+        white-space: nowrap;
+        /* 不换行 */
+        line-height: 26px;
+        height: 26px;
+        color: #333;
+        font-size: 20px;
+        font-weight: bold;
+        margin-right: 11px;
+    }
+
+    .ul_1_li_text {
+        line-height: 26px;
+        height: 26px;
+        color: #333;
+        font-size: 16px;
+        width: 100%;
+        text-align: right;
+    }
+
+    .ul_1_li_a:hover * {
+        color: #255590;
+    }
+}
+
+.ul_2 {
+    width: 1170px;
+    height: 168px;
+    margin: 30px auto 0;
+
+    .ul_2_li {
+        height: 26px;
+        line-height: 26px;
+        margin-bottom: 30px;
+        width: 48%;
+    }
+
+    .ul_2_li:nth-of-type(odd) {
+        float: left;
+    }
+
+    .ul_2_li:nth-of-type(even) {
+        float: right;
+    }
+
+    .ul_2_li_a {
+        display: block;
+        width: 100%;
+        height: 100%;
+        display: flex;
+        justify-content: space-between;
+        /* 两端对齐 */
+    }
+
+    .ul_2_li_h4 {
+        flex: 1;
+        /* 优先扩展 */
+        white-space: nowrap;
+        /* 不换行 */
+        line-height: 26px;
+        height: 26px;
+        color: #333;
+        font-size: 20px;
+        font-weight: bold;
+        margin-right: 11px;
+    }
+
+    .ul_2_li_text {
+        line-height: 26px;
+        height: 26px;
+        color: #333;
+        font-size: 16px;
+        width: 100%;
+        text-align: right;
+    }
+
+    .ul_2_li_a:hover * {
+        color: #255590;
+    }
+}
+
+// .index_main .color_bule_box a div {
+//     color: #255590;
+// }
+
+@media screen and (max-width:800px) {
+    .index_main {
+        width: 99%;
+        margin: 0px auto;
+    }
+
+    .box_1 {
+        width: 99%;
+        margin: 0px auto 11px;
+    }
+
+    .box_1_head {
+        box-sizing: border-box;
+        width: 100%;
+    }
+
+    .box_1:nth-of-type(odd) {
+        float: none;
+    }
+
+    .box_1:nth-of-type(even) {
+        float: none;
+    }
+
+    .ul_1 {
+        width: 96%;
+        margin: 30px auto 0;
+    }
+
+    .ul_2 {
+        width: 96%;
+        margin: 30px auto 0;
+    }
+
+    .ul_2_li:nth-of-type(odd) {
+        float: none;
+        width: 100%;
+    }
+
+    .ul_2_li:nth-of-type(even) {
+        float: none;
+        width: 100%;
+    }
+
+    .index_2 {
+        margin-bottom: 22px;
+    }
+}
+
+@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) {}

+ 452 - 0
assets/css/job/detail_jianli.less

@@ -0,0 +1,452 @@
+* {
+      font-family: "微软雅黑", "microsoft yahei";
+}
+
+//导航条
+.breadcrumb {
+      width: 100%;
+      height: 22px;
+      margin-top: 30px;
+      margin-bottom: 20px;
+      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;
+      }
+}
+
+a {
+      color: #666666;
+}
+
+.jianli {
+      margin: auto;
+}
+
+.gerenjianli {
+      width: 100%;
+      height: 250px;
+      background-color: #fbfbfb;
+}
+.index_1{
+      width: 1200px;
+      margin: 0 auto;
+}
+
+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;
+}
+
+.jianli {
+      margin: 0 auto;
+}
+
+.slow_6 {
+      -webkit-transition: all .6s;
+      -moz-transition: all .6s;
+      -ms-transition: all .6s;
+      -o-transition: all .6s;
+      transition: all .6s;
+}
+
+.jianli {
+      width: 1200px;
+}
+
+.seek_head_box {
+      border-bottom: solid 1px #D9D9D9;
+}
+
+.seek_head_left {
+      float: left;
+}
+
+.seek_head_a {
+      float: left;
+      height: 55px;
+      line-height: 55px;
+      color: #333;
+      font-weight: bold;
+      font-size: 22px;
+      border-bottom: solid 3px rgba(0, 0, 0, 0);
+      margin-right: 40px;
+}
+
+.seek_head_only {
+      float: left;
+      height: 55px;
+      line-height: 55px;
+      color: #255590;
+      font-weight: bold;
+      font-size: 22px;
+      border-bottom: solid 3px #255590;
+}
+
+.seek_head_right_box {
+      float: right;
+      margin-top: 19px;
+}
+
+.seek_head_right_text {
+      float: left;
+      height: 21px;
+      line-height: 21px;
+      color: #999;
+      font-size: 16px;
+      margin-left: 22px;
+}
+
+.seek_introduce_box {
+      margin-top: 29px;
+}
+
+.seek_introduce_left {
+      float: left;
+      width: 77%;
+}
+
+
+.seek_introduce_h4 {
+      height: 37px;
+      line-height: 37px;
+      color: #333;
+      font-size: 28px;
+      margin-right: 15px;
+      float: left;
+}
+
+.seek_introduce_tag {
+      float: left;
+      height: 25px;
+      line-height: 25px;
+      padding: 0px 8px 0px 36px;
+      background: url(@/public/image/06.png) no-repeat 10px center #f2f7ed;
+      background-size: 16px 16px;
+      border: solid 1px #9CD26B;
+      color: #ADCF8B;
+      font-size: 16px;
+      border-radius: 3px;
+      margin: 10px 5px 0px 0px;
+}
+
+.seek_introduce_text {
+      height: 25px;
+      line-height: 25px;
+      color: #999;
+      font-size: 16px;
+      margin-top: 10px;
+      float: left;
+}
+
+.seek_introduce_num {
+      color: #9CD26B;
+}
+
+.seek_introduce_title_box {
+      margin-top: 29px;
+}
+
+.seek_introduce_label {
+      margin-right: 11px;
+      line-height: 21px;
+      color: #333;
+      font-size: 16px;
+      font-weight: bold;
+}
+
+.seek_introduce_title {
+      margin-right: 40px;
+      line-height: 21px;
+      color: #333;
+      font-size: 16px;
+      font-weight: bold;
+}
+
+.seek_introduce_foot {
+      margin-top: 32px;
+}
+
+.seek_introduce_foot_text {
+      height: 16px;
+      line-height: 16px;
+      float: left;
+      color: #999;
+      font-size: 16px;
+      padding-right: 10px;
+      margin-right: 10px;
+      border-right: solid 1px #999;
+}
+
+.seek_introduce_foot_text:nth-last-of-type(1) {
+      border: 0px;
+}
+
+.index_1_left {
+      float: left;
+      width: 70%;
+}
+
+.index_1_right {
+      float: right;
+      width: 28%;
+}
+
+.index_1_right_img {
+      float: right;
+      width: 130px;
+      height: 130px;
+      margin-top: 28px;
+      // opacity: .6;
+}
+
+.index_2 {
+      margin-top: 56px;
+}
+
+.index_3 {
+      margin-top: 16px;
+}
+
+.index_4 {
+      margin-top: 10px;
+}
+
+.index_5 {
+      margin-top: 10px;
+}
+
+.index_5 .seek_in {
+      margin-top: 33px;
+}
+
+.index_6 {
+      margin-top: 10px;
+      margin-bottom: 40px;
+}
+
+.index_6 .seek_in {
+      margin-top: 33px;
+}
+
+.seek_article {
+      margin-top: 33px;
+}
+
+
+
+.seek_in_head {
+      margin: 31px 0px 10px;
+}
+
+.seek_in_head_text {
+      float: left;
+      height: 35px;
+      line-height: 35px;
+      color: #333;
+      font-size: 18px;
+      margin-right: 40px;
+}
+
+
+.seek_in_li {
+      display: flex;
+      margin-bottom: 10px;
+}
+
+.seek_in_label {
+      height: 35px;
+      line-height: 35px;
+      color: #333;
+      font-size: 18px;
+      word-break: keep-all;
+      white-space: nowrap;
+}
+
+.seek_in_li_text {
+      height: 35px;
+      line-height: 35px;
+      color: #333;
+      font-size: 18px;
+}
+
+.seek_in_li:nth-last-of-type(1) {
+      margin-bottom: 0px;
+}
+
+.seek_article_2 {
+      color: #333;
+      font-size: 18px;
+}
+
+.seek_article {
+      color: #333;
+      font-size: 18px;
+}
+
+@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) {}

+ 373 - 0
assets/css/job/detail_zhaopin.less

@@ -0,0 +1,373 @@
+* {
+    font-family: "微软雅黑", "microsoft yahei";
+}
+
+.gangwei {
+    margin: 30px auto;
+}
+
+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;
+}
+
+.color_main {
+    box-sizing: border-box;
+    background: #fbfbfb;
+    border: solid 1px #fbfbfb;
+    /* background:pink; */
+}
+
+.cruit_head_box {
+    border-bottom: solid 1px #D9D9D9;
+}
+
+.cruit_head_left {
+    float: left;
+}
+
+.cruit_head_a {
+    float: left;
+    height: 55px;
+    line-height: 55px;
+    color: #333;
+    font-weight: bold;
+    font-size: 22px;
+    border-bottom: solid 3px rgba(0, 0, 0, 0);
+    margin-right: 40px;
+}
+
+.cruit_head_only {
+    float: left;
+    height: 55px;
+    line-height: 55px;
+    color: #255590;
+    font-weight: bold;
+    font-size: 22px;
+    border-bottom: solid 3px #255590;
+}
+
+.demand_head_box {}
+
+.demand_head_name {
+    float: left;
+    color: #333;
+    font-size: 28px;
+    margin-top: 30px;
+    font-weight: bold;
+}
+
+.demand_head_btn {
+    float: right;
+    height: 45px;
+    line-height: 45px;
+    color: #fff;
+    font-size: 16px;
+    border-radius: 4px;
+    overflow: hidden;
+    padding: 0px 20px 0px 43px;
+    margin-top: 30px;
+    background: url(@/public/image/05.png) no-repeat 14px center #255590;
+    background-size: 18px 18px;
+}
+.demand_head_btn1 {
+    float: right;
+    height: 45px;
+    line-height: 45px;
+    color: #fff;
+    font-size: 16px;
+    border-radius: 4px;
+    overflow: hidden;
+    padding: 0px 20px 0px 43px;
+    margin-top: 30px;
+    background: url(@/public/image/05.png) no-repeat 14px center #ccc;
+    background-size: 18px 18px;
+    cursor: not-allowed;
+}
+
+.cruit_li_2_foot {
+    margin: 20px 0px 30px;
+}
+
+.cruit_li_2_foot_tag {
+    float: left;
+    margin-right: 30px;
+    height: 24px;
+    line-height: 24px;
+    color: #999;
+    font-size: 16px;
+    padding-left: 34px;
+    background: no-repeat left center;
+    background-size: 24px 100%;
+}
+
+.cruit_li_2_foot_addres {
+    background-image: url(@/public/image/01.png);
+}
+
+.cruit_li_2_foot_exper {
+    background-image: url(@/public/image/04.png);
+}
+
+.cruit_li_2_foot_educat {}
+
+.cruit_li_2_foot_tag_in {
+    height: 24px;
+    line-height: 24px;
+    color: #999;
+    font-size: 16px;
+    float: left;
+}
+
+.cruit_li_2_foot_tag_in:nth-of-type(2) {
+    padding-left: 24px;
+    position: relative;
+}
+
+.cruit_li_2_foot_tag_in:nth-of-type(2)::after {
+    content: '';
+    display: block;
+    position: absolute;
+    width: 2px;
+    height: 2px;
+    background: #999;
+    left: 11px;
+    top: 11px;
+}
+
+.index_2 {
+    margin-top: 11px;
+}
+
+.demand_1 {
+    float: left;
+    width: 790px;
+}
+
+.demand_2 {
+    float: right;
+    width: 380px;
+}
+
+.demand_right_2 {
+    margin-top: 11px;
+}
+
+.demand_left_1 {}
+
+.demand_left_2 {
+    margin-top: 30px;
+}
+
+.demand_left_3 {
+    margin-top: 30px;
+}
+
+.demand_left_4 {
+    margin-top: 30px;
+}
+
+.demand_left_5 {
+    margin-top: 11px;
+}
+
+.demand_ul_1 {
+    margin-top: 32px;
+}
+
+.demand_ul_1_span {
+    height: 21px;
+    line-height: 21px;
+    color: #333;
+    font-size: 18px;
+    margin-bottom: 33px;
+}
+
+.demand_ul_1_a {
+    height: 21px;
+    line-height: 21px;
+    color: #333;
+    font-size: 18px;
+    margin-bottom: 33px;
+}
+
+.demand_ul_1_a:nth-last-of-type(1) {
+    margin-bottom: 0px;
+}
+
+.demand_ul_1_a:hover {
+    color: #255590;
+}
+
+.demand_ul_2 {
+    margin-top: 30px;
+}
+
+.demand_li_2 {
+    display: flex;
+    margin-bottom: 30px;
+}
+
+.demand_li_2_label {
+    word-break: keep-all;
+    white-space: nowrap;
+    height: 24px;
+    line-height: 24px;
+    margin-right: 16px;
+    color: #333;
+    font-size: 18px;
+}
+
+.demand_li_2_text {
+    line-height: 24px;
+    color: #333;
+    font-size: 18px;
+}
+
+.demand_article_1 {
+    margin-top: 30px;
+    color: #333;
+    font-size: 18px;
+}
+
+.demand_li_2:nth-last-of-type(1) {
+    margin-bottom: 0px;
+}
+
+@media screen and (min-width:1200px) {
+    /*pc_1440*/
+    @media screen and (max-width:1440px) {
+        /*1200*/
+    }
+
+    .pc_none {
+        display: none;
+    }
+}
+
+@media screen and (max-width:599px) {}
+
+@media screen and (max-width:320px) {}

+ 120 - 0
assets/css/job/list.less

@@ -0,0 +1,120 @@
+.jobList {
+    width: 1200px;
+    margin: 0 auto;
+}
+
+//导航条
+.breadcrumb {
+    width: 100%;
+    height: 22px;
+    padding-bottom: 20px;
+    border-bottom: 1px solid #ccc;
+    font-family: Microsoft YaHei, Microsoft YaHei;
+    font-weight: 400;
+    font-size: 20px;
+    color: #666666;
+    line-height: 23px;
+    text-align: left;
+    font-style: normal;
+    text-transform: none;
+    margin-top: 30px;
+
+    :deep(.el-breadcrumb) {
+        display: inline-block;
+        vertical-align: -4px;
+    }
+
+    :deep(.el-breadcrumb__inner a),
+    :deep(.el-breadcrumb__inner.is-link) {
+        color: #666666;
+        font-weight: 400;
+        text-decoration: none;
+        transition: var(--el-transition-color);
+    }
+
+    span {
+        font-family: Microsoft YaHei, Microsoft YaHei;
+        font-weight: 400;
+        font-size: 20px;
+        color: #666666;
+        line-height: 23px;
+        text-align: left;
+        font-style: normal;
+        text-transform: none;
+    }
+
+    span:hover {
+        color: #666666;
+    }
+
+    .location {
+        margin-right: 20px;
+        width: 100px;
+        height: 22px;
+        font-family: Microsoft YaHei, Microsoft YaHei;
+        font-weight: 400;
+        font-size: 20px;
+        color: #666666;
+        line-height: 23px;
+        text-align: left;
+        font-style: normal;
+        text-transform: none;
+    }
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.shop_head_1 {
+    height: 29px;
+    position: relative;
+
+    .shop_head_1_name {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #255590;
+        font-size: 22px;
+        font-weight: bold;
+        padding-left: 22px;
+        background: url(@/public/img/3.png) no-repeat left center;
+        background-size: 12px 18px;
+    }
+}
+
+.categ_color_box {
+    border: solid 1px #E9E9E9;
+    background: #F8F8F8;
+    margin-top: 30px;
+    box-sizing: border-box;
+
+    .categ_color_name {
+        width: 1160px;
+        margin: 0px auto;
+        height: 60px;
+        line-height: 60px;
+        color: #333;
+        font-size: 18px;
+        border-bottom: dashed 1px #E9E9E9;
+    }
+
+    .categ_color_in {
+        padding: 6px 0px 0px;
+    }
+
+    .categ_color_a {
+        float: left;
+        height: 29px;
+        line-height: 29px;
+        color: #333;
+        margin: 10px 10px 16px;
+        font-size: 16px;
+        padding: 0px 10px;
+    }
+
+    .categ_color_a_only {
+        color: #fff;
+        background: #255590;
+    }
+}

+ 402 - 0
assets/css/job/list_qiuzhi.less

@@ -0,0 +1,402 @@
+@charset "utf-8";
+
+.empty {
+    width: 100%;
+    height: 350px;
+    line-height: 350px;
+    text-align: center;
+
+    .empty_img {
+        vertical-align: -30px;
+        margin-right: 20px;
+    }
+
+    .empty_text {
+        font-size: 26px;
+        color: #999;
+    }
+}
+
+.pagination11 {
+    width: 1200px;
+    margin: 50px auto;
+}
+
+//分页
+.pagination {
+    width: 1200px;
+    height: 34px;
+    margin-left: 141px;
+    display: flex;
+    justify-content: center;
+    margin: 0;
+
+    // 鼠标移入后字体颜色
+    .el-pagination::v-deep :hover {
+        color: #255590;
+    }
+
+    .el-pagination.is-background::v-deep .btn-next,
+    .el-pagination.is-background::v-deep .btn-prev {
+        width: 70px;
+        height: 34px;
+        margin: 0px 10px;
+        border-radius: 4px;
+    }
+
+    .el-pagination.is-background::v-deep .el-pager li {
+        margin: 0px 10px;
+        width: 38px;
+        height: 34px;
+        border-radius: 4px;
+    }
+
+    .el-pagination.is-background::v-deep .btn-next.is-active,
+    .el-pagination.is-background::v-deep .btn-prev.is-active,
+    .el-pagination.is-background::v-deep .el-pager li.is-active {
+        background-color: #255590;
+        color: #fff;
+    }
+}
+
+* {
+    font-family: "微软雅黑", "microsoft yahei";
+}
+
+ul,
+ol {
+    list-style: none;
+}
+
+a:active {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: none;
+}
+
+a:visited {
+    text-decoration: none;
+}
+
+a:link {
+    text-decoration: none;
+}
+
+a:focus {
+    text-decoration: none;
+}
+
+body {
+    position: relative;
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.clearfix_2::after {
+    content: '';
+    display: block;
+    height: 0;
+    visibility: hidden;
+    clear: both;
+}
+
+.hiddenColor {
+    visibility: hidden;
+}
+
+.hand {
+    cursor: pointer;
+}
+
+.aTag_parent {
+    position: relative;
+}
+
+.aTag_parent>a,
+.aTag {
+    display: block;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    z-index: 99;
+    border: 0px;
+    top: 0px;
+    left: 0px;
+    background: rgba(0, 0, 0, 0);
+}
+
+.dot1 {
+    display: block;
+    word-break: keep-all;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+.dot2 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+}
+
+input,
+img {
+    border: none;
+}
+
+.cover100 img {
+    display: block;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+
+.back100 {
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+}
+
+article,
+aside,
+footer,
+header,
+time,
+video,
+main,
+nav,
+h4,
+h3,
+section {
+    display: block;
+}
+
+.index_main {
+    width: 1200px;
+    margin: 0 auto;
+    min-height: 400px;
+}
+
+.slow_6 {
+    -webkit-transition: all .6s;
+    -moz-transition: all .6s;
+    -ms-transition: all .6s;
+    -o-transition: all .6s;
+    transition: all .6s;
+}
+
+.table_head {
+    border-bottom: solid 1px #E9E9E9;
+
+    .table_head_name {
+        width: 140px;
+    }
+
+    .table_head_job {
+        width: 220px;
+    }
+
+    .table_head_sex {
+        width: 82px;
+        margin-left: 4px;
+    }
+
+    .table_head_experience {
+        width: 100px;
+        margin-left: 4px;
+    }
+
+    .table_head_native {
+        width: 157px;
+        margin-left: 20px;
+    }
+
+    .table_head_industry {
+        width: 180px;
+    }
+
+    .table_head_address {
+        width: 140px;
+        margin-left: 18px;
+    }
+
+    .table_head_time {
+        width: 125px;
+        float: right;
+    }
+}
+
+.table_ul {
+    .table_li {
+        border-bottom: solid 1px #E9E9E9;
+    }
+
+    .table_li_a {
+        display: block;
+    }
+}
+
+.table_li_in {}
+
+@media screen and (min-width:801px) {
+
+    /*pc_1440*/
+    .table_li div {
+        float: left;
+        height: 86px;
+        line-height: 86px;
+        box-sizing: border-box;
+        padding-right: 8px;
+    }
+
+    .table_li_text {
+        width: 100%;
+    }
+
+    .table_head div {
+        float: left;
+        height: 61px;
+        line-height: 61px;
+        font-size: 16px;
+        color: #666;
+        box-sizing: border-box;
+        padding-right: 8px;
+    }
+
+    .table_li_name {
+        width: 140px;
+    }
+
+    .table_li_name_in {
+        width: 140px;
+        font-size: 20px;
+        font-weight: bold;
+        color: #333;
+    }
+
+    .table_li_in {
+        float: left;
+        line-height: 25px;
+        height: 25px;
+        color: #999;
+        font-size: 14px;
+        background: #F8F8F8;
+        margin-top: 33px;
+        max-width: 100%;
+        padding: 0px 10px;
+        box-sizing: border-box;
+    }
+
+    .table_li_job {
+        width: 220px;
+        font-size: 16px;
+        color: #255590;
+        padding-right: 10px;
+        margin-right: 5px;
+    }
+
+    .table_li_sex {
+        width: 86px;
+        font-size: 16px;
+        color: #333;
+    }
+
+    .table_li_experience {
+        width: 110px;
+        font-size: 16px;
+        color: #333;
+        margin-right: 5px;
+    }
+
+    .table_li_native {
+        width: 150px;
+        font-size: 16px;
+        color: #333;
+        margin-right: 5px;
+    }
+
+    .table_li_industry {
+        width: 180px;
+        font-size: 16px;
+        color: #333;
+    }
+
+    .table_li_address {
+        width: 140px;
+        margin-left: 20px;
+    }
+
+    .table_li_time {
+        width: 110px;
+        float: right;
+    }
+
+    .table_li_a:hover {
+        background: #F6F6F6;
+    }
+
+    .table_li_a:hover .table_li_in {
+        background: #F6F6F6;
+    }
+
+    @media screen and (max-width:1440px) {
+        /*1200*/
+    }
+
+    .pc_none {
+        display: none;
+    }
+}
+
+@media screen and (max-width:800px) {
+    .index_main {
+        width: 98%;
+        margin: 6px auto;
+    }
+
+    .table_li_label {
+        float: left;
+        font-size: 20px;
+        color: #333;
+        height: 33px;
+        margin-right: 8px;
+        word-break: keep-all;
+        white-space: nowrap;
+    }
+
+    .table_li {
+        margin-bottom: 33px;
+    }
+
+    .table_li_a>div {
+        width: 98%;
+        margin: 6px auto;
+        height: 33px;
+        display: flex;
+    }
+
+    .table_li_name_in {
+        font-weight: bold;
+        width: 100%;
+    }
+
+    .table_li_in,
+    .table_li_a>div>div {
+        float: left;
+        font-size: 20px;
+        color: #333;
+        height: 33px;
+    }
+
+    .phone_none {
+        display: none;
+    }
+}
+
+@media screen and (max-width:599px) {}
+
+@media screen and (max-width:320px) {}

+ 407 - 0
assets/css/job/list_zhaopin.less

@@ -0,0 +1,407 @@
+@charset "utf-8";
+
+.empty {
+    width: 100%;
+    height: 350px;
+    line-height: 350px;
+    text-align: center;
+
+    .empty_img {
+        vertical-align: -30px;
+        margin-right: 20px;
+    }
+
+    .empty_text {
+        font-size: 26px;
+        color: #999;
+    }
+}
+
+.pagination11 {
+    width: 1200px;
+    margin: 50px auto;
+}
+
+//分页
+.pagination {
+    width: 1200px;
+    height: 34px;
+    margin-left: 141px;
+    display: flex;
+    justify-content: center;
+    margin: 0;
+
+    // 鼠标移入后字体颜色
+    .el-pagination::v-deep :hover {
+        color: #255590;
+    }
+
+    .el-pagination.is-background::v-deep .btn-next,
+    .el-pagination.is-background::v-deep .btn-prev {
+        width: 70px;
+        height: 34px;
+        margin: 0px 10px;
+        border-radius: 4px;
+    }
+
+    .el-pagination.is-background::v-deep .el-pager li {
+        margin: 0px 10px;
+        width: 38px;
+        height: 34px;
+        border-radius: 4px;
+    }
+
+    .el-pagination.is-background::v-deep .btn-next.is-active,
+    .el-pagination.is-background::v-deep .btn-prev.is-active,
+    .el-pagination.is-background::v-deep .el-pager li.is-active {
+        background-color: #255590;
+        color: #fff;
+    }
+}
+
+* {
+    font-family: "微软雅黑", "microsoft yahei";
+}
+
+ul,
+ol {
+    list-style: none;
+}
+
+a:active {
+    text-decoration: none;
+}
+
+a:hover {
+    text-decoration: none;
+}
+
+a:visited {
+    text-decoration: none;
+}
+
+a:link {
+    text-decoration: none;
+}
+
+a:focus {
+    text-decoration: none;
+}
+
+body {
+    position: relative;
+}
+
+.clearfix {
+    overflow: hidden;
+}
+
+.clearfix_2::after {
+    content: '';
+    display: block;
+    height: 0;
+    visibility: hidden;
+    clear: both;
+}
+
+.hiddenColor {
+    visibility: hidden;
+}
+
+.hand {
+    cursor: pointer;
+}
+
+.aTag_parent {
+    position: relative;
+}
+
+.aTag_parent>a,
+.aTag {
+    display: block;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    z-index: 99;
+    border: 0px;
+    top: 0px;
+    left: 0px;
+    background: rgba(0, 0, 0, 0);
+}
+
+.dot1 {
+    display: block;
+    word-break: keep-all;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+
+.dot2 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+}
+
+input,
+img {
+    border: none;
+}
+
+.cover100 img {
+    display: block;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+
+.back100 {
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+}
+
+article,
+aside,
+footer,
+header,
+time,
+video,
+main,
+nav,
+h4,
+h3,
+section {
+    display: block;
+}
+
+.index_main {
+    width: 1200px;
+    margin: 0 auto;
+    min-height: 400px;
+}
+
+.slow_6 {
+    -webkit-transition: all .6s;
+    -moz-transition: all .6s;
+    -ms-transition: all .6s;
+    -o-transition: all .6s;
+    transition: all .6s;
+}
+
+.table_head {
+    border-bottom: solid 1px #E9E9E9;
+
+    .table_head_masg {
+        width: 154px;
+    }
+
+    .table_head_company {
+        width: 340px;
+        padding: 0px 8px;
+        box-sizing: border-box;
+        margin-left: 80px;
+    }
+
+    .table_head_job {
+        width: 265px;
+        padding: 0px 8px;
+        box-sizing: border-box;
+        margin-left: 20px;
+    }
+
+    .table_head_address {
+        width: 140px;
+        margin-left: 6px;
+    }
+}
+
+.table_head div {
+    float: left;
+    height: 61px;
+    line-height: 61px;
+    font-size: 16px;
+    color: #666;
+    box-sizing: border-box;
+}
+
+.table_head .table_head_time {
+    width: 174px;
+    float: right;
+}
+
+.table_ul {
+    .table_li {
+        border-bottom: solid 1px #E9E9E9;
+    }
+
+    .table_li_a {
+        display: block;
+    }
+
+    .table_li div {
+        float: left;
+        box-sizing: border-box;
+    }
+
+    .table_li_masg {
+        width: 177px;
+        font-size: 20px;
+        color: #333;
+        font-weight: bold;
+    }
+
+    .table_li_company {
+        width: 340px;
+        padding: 0px 8px;
+        box-sizing: border-box;
+        margin-left: 53px;
+        font-size: 16px;
+        color: #333;
+    }
+
+    .table_li_job {
+        width: 275px;
+        padding: 0px 8px;
+        box-sizing: border-box;
+        font-size: 14px;
+        color: #999;
+        margin-left: 20px;
+    }
+
+    .table_li_job_in {
+        float: left;
+        line-height: 25px;
+        height: 25px;
+        color: #999;
+        font-size: 14px;
+        background: #F8F8F8;
+        margin-top: 33px;
+        max-width: 100%;
+        padding: 0px 10px;
+        box-sizing: border-box;
+    }
+
+    .table_li_address {
+        width: 131px;
+        color: #999;
+        font-size: 16px;
+        text-indent: 33px;
+        background: url(@/public/img/25.png) no-repeat left center;
+        background-size: 22px auto;
+    }
+
+    .table_li_a .table_li_time {
+        width: 174px;
+        float: right;
+        color: #999;
+        font-size: 16px;
+        text-indent: 31px;
+        background: url(@/public/img/26.png) no-repeat left center;
+        background-size: 22px auto;
+    }
+
+    .table_li_a:hover {
+        background: #F6F6F6;
+    }
+
+    .table_li_a:hover .table_li_job_in {
+        background: #F6F6F6;
+    }
+}
+
+@media screen and (min-width:1200px) {
+
+    /*pc_1440*/
+    .table_li div {
+        height: 86px;
+        line-height: 86px;
+        // text-align: center;
+    }
+
+    @media screen and (max-width:1440px) {
+        /*1200*/
+    }
+
+    .pc_none {
+        display: none;
+    }
+}
+
+@media screen and (min-width:801px) {
+    .table_li_masg .table_li_text {
+        width: 100%;
+    }
+
+    .table_li_company .table_li_text {
+        width: 100%;
+    }
+
+    .table_li_address .table_li_text {
+        width: 100%;
+    }
+}
+
+@media screen and (max-width:800px) {
+    .index_main {
+        width: 98%;
+        margin: 6px auto;
+    }
+
+    .table_li {
+        margin-bottom: 22px;
+    }
+
+    .table_li_a {
+        display: block;
+        overflow: hidden;
+    }
+
+    .table_li_a>div {
+        height: 33px;
+        line-height: 33px;
+        width: 100%;
+        float: none;
+        display: flex;
+        width: 100% !important;
+        margin: 0 !important;
+        padding: 0px !important;
+        background: rgba(0, 0, 0, 0) !important;
+        text-indent: 0px !important;
+    }
+
+    .table_li div {
+        height: 33px;
+        line-height: 33px;
+        overflow: hidden;
+    }
+
+    .table_li_label {
+        height: 33px;
+        line-height: 33px;
+        float: left;
+        margin-right: 8px;
+        font-size: 20px;
+        color: #333;
+        word-break: keep-all;
+        white-space: nowrap;
+    }
+
+    .table_li_text {
+        font-size: 20px !important;
+        color: #333 !important;
+        height: 33px !important;
+        line-height: 33px !important;
+        margin-top: 0px !important;
+        background: rgba(0, 0, 0, 0) !important;
+        padding: 0px !important;
+    }
+
+    .phone_none {
+        display: none;
+    }
+}
+
+@media screen and (max-width:599px) {}
+
+@media screen and (max-width:320px) {}

+ 426 - 0
components/job/class.vue

@@ -0,0 +1,426 @@
+<template>
+    <main class="index_main">
+        <section class="index_0 clearfix">
+            <div class="shop_head_1 clearfix">
+                <div class="shop_head_1_name" :title="secNavTitle">{{ secNavTitle }}</div>
+            </div>
+            <div class="categ_color_box clearfix">
+                <div class="categ_color_name clearfix">直达:</div>
+                <div class="categ_color_in clearfix">
+                    <NuxtLink class="categ_color_a" :href="`/${item.aLIas_pinyin}/list-1.html`" :title="item.title"
+                        v-for="(item, index) in pageData" :key="index">
+                        {{ item.alias }}
+                    </NuxtLink>
+                </div>
+            </div>
+        </section>
+        <!-- 面包屑导航 -->
+        <div class="breadcrumb">
+            <div class="inner">
+                <span class="location">当前位置 :</span>
+                <el-breadcrumb :separator-icon="ArrowRight">
+                    <el-breadcrumb-item>
+                        <NuxtLink to="/">首页</NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item v-if="parent_name != ''">
+                        <NuxtLink :to="`/${parent_pinyin}/index.html`"> {{ parent_name }}</NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item>
+                        <NuxtLink :to="`list-1.html`"> {{ secNavTitle }}</NuxtLink>
+                    </el-breadcrumb-item>
+                </el-breadcrumb>
+            </div>
+        </div>
+        <!-- 模块1,模块2 -->
+        <section class="index_1 clearfix">
+            <div class="box_1 clearfix" v-if="jobData.length > 0">
+                <div class="box_1_head">
+                    <NuxtLink class="box_1_head_name" :href="getLinkPath(jobData[0])" :title="jobData[0].title">
+                        {{ jobData[0].title }}
+                    </NuxtLink>
+                </div>
+                <div class="ul_1">
+                    <div class="ul_1_li" v-for="(item, index) in jobData[0].data" :key="index">
+                        <NuxtLink class="ul_1_li_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <h4 class="ul_1_li_h4 ">{{ item.title }}</h4>
+                            <div class="ul_1_li_text dot1">{{ item.business_name }}</div>
+                        </NuxtLink>
+                    </div>
+                </div>
+            </div>
+            <div class="box_1 clearfix" v-if="jobData.length > 1">
+                <div class="box_1_head">
+                    <NuxtLink class="box_1_head_name" :href="getLinkPath(jobData[1])" :title="jobData[1].title">
+                        {{ jobData[1].title }}
+                    </NuxtLink>
+                </div>
+                <div class="ul_1 clearfix">
+                    <div class="ul_1_li" v-for="(item, index) in jobData[1].data" :key="index">
+                        <NuxtLink class="ul_1_li_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <h4 class="ul_1_li_h4 ">{{ item.title }}</h4>
+                            <div class="ul_1_li_text dot1">{{ item.business_name }}</div>
+                        </NuxtLink>
+                    </div>
+                </div>
+            </div>
+        </section>
+        <!-- 模块3 -->
+        <section class="index_2 clearfix" v-if="jobData.length > 2">
+            <div class="box_2 clearfix">
+                <div class="box_2_head">
+                    <NuxtLink class="box_2_head_name" :href="getLinkPath(jobData[2])" :title="jobData[2].title">
+                        {{ jobData[2].title }}
+                    </NuxtLink>
+                </div>
+                <div class="ul_2 clearfix">
+                    <div class="ul_2_li" v-for="(item, index) in jobData[2].data" :key="index">
+                        <NuxtLink class="ul_2_li_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <h4 class="ul_2_li_h4 ">{{ item.title }}</h4>
+                            <div class="ul_2_li_text dot1">{{ item.business_name }}</div>
+                        </NuxtLink>
+                    </div>
+                </div>
+            </div>
+        </section>
+        <!-- 模块4,模块5 -->
+        <section class="index_1 clearfix" v-if="jobData.length > 4">
+            <div class="box_1 clearfix" v-if="jobData.length > 3">
+                <div class="box_1_head">
+                    <NuxtLink class="box_1_head_name" :href="getLinkPath(jobData[3])" :title="jobData[3].title">
+                        {{ jobData[3].title }}
+                    </NuxtLink>
+                </div>
+                <div class="ul_1">
+                    <div class="ul_1_li" v-for="(item, index) in jobData[3].data" :key="index">
+                        <NuxtLink class="ul_1_li_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <h4 class="ul_1_li_h4 ">{{ item.title }}</h4>
+                            <div class="ul_1_li_text dot1">{{ item.business_name }}</div>
+                        </NuxtLink>
+                    </div>
+                </div>
+            </div>
+            <div class="box_1 clearfix" v-if="jobData.length > 4">
+                <div class="box_1_head">
+                    <NuxtLink class="box_1_head_name" :href="getLinkPath(jobData[4])" :title="jobData[4].title">
+                        {{ jobData[4].title }}
+                    </NuxtLink>
+                </div>
+                <div class="ul_1 clearfix color_bule_box">
+                    <div class="ul_1_li" v-for="(item, index) in jobData[4].data" :key="index">
+                        <NuxtLink class="ul_1_li_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <h4 class="ul_1_li_h4 ">{{ item.title }}</h4>
+                            <div class="ul_1_li_text dot1 color_bule">{{ item.business_name }}</div>
+                        </NuxtLink>
+                    </div>
+                </div>
+            </div>
+        </section>
+        <!-- 模块6 -->
+        <section class="index_2 clearfix" v-if="jobData.length > 5">
+            <div class="box_2 clearfix">
+                <div class="box_2_head">
+                    <NuxtLink class="box_2_head_name" :href="getLinkPath(jobData[5])" :title="jobData[5].title">
+                        {{ jobData[5].title }}
+                    </NuxtLink>
+                </div>
+                <div class="ul_2 clearfix">
+                    <div class="ul_2_li" v-for="(item, index) in jobData[5].data" :key="index">
+                        <NuxtLink class="ul_2_li_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <h4 class="ul_2_li_h4 ">{{ item.title }}</h4>
+                            <div class="ul_2_li_text dot1">{{ item.business_name }}</div>
+                        </NuxtLink>
+                    </div>
+                </div>
+            </div>
+        </section>
+        <!-- 模块7,模块8 -->
+        <section class="index_1 clearfix">
+            <div class="box_1 clearfix">
+                <div class="box_1_head">
+                    <NuxtLink class="box_1_head_name" :href="getLinkPath(jobData[6])" :title="jobData[6].title">
+                        {{ jobData[6].title }}
+                    </NuxtLink>
+                </div>
+                <div class="ul_1">
+                    <div class="ul_1_li" v-for="(item, index) in jobData[6].data" :key="index">
+                        <NuxtLink class="ul_1_li_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <h4 class="ul_1_li_h4 ">{{ item.title }}</h4>
+                            <div class="ul_1_li_text dot1">{{ item.business_name }}</div>
+                        </NuxtLink>
+                    </div>
+                </div>
+            </div>
+            <!-- 求职 -->
+            <div class="box_1 clearfix" v-if="jobHunting.length > 0">
+                <div class="box_1_head">
+                    <NuxtLink class="box_1_head_name" :href="getLinkPath(jobHunting[0])" :title="jobHunting[0].title">
+                        {{ jobHunting[0].title }}
+                    </NuxtLink>
+                </div>
+                <div class="ul_1 clearfix color_bule_box">
+                    <div class="ul_1_li" v-for="(item, index) in jobHunting[0].data" :key="index">
+                        <NuxtLink class="ul_1_li_a" :href="getLinkPathDetail(item)" :title="item.title">
+                            <h4 class="ul_1_li_h4 ">{{ item.name }}</h4>
+                            <div class="ul_1_li_text dot1 color_bule">{{ item.job_name }}</div>
+                        </NuxtLink>
+                    </div>
+                </div>
+            </div>
+        </section>
+    </main>
+</template>
+
+
+<script setup>
+//0.加载页面依赖 start ---------------------------------------->
+import { ref, onMounted } from 'vue';
+import { ElMessage, ElBreadcrumb, ElBreadcrumbItem } from 'element-plus';
+import { ArrowRight } from '@element-plus/icons-vue'
+import { NuxtLink } from '#components';
+//0.加载页面依赖 end ---------------------------------------->
+
+//1.获得路由id start ---------------------------------------->
+const targetSegment = getRoutePath(2);
+const targetSegment1 = getRoutePath(1);
+//1.1 获得当前的路由id
+let routeId;
+let routeType;
+let secNavTitle = ref('')//二级导航标题
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    routeId = getRouteId.data.category_id
+    secNavTitle.value = getRouteId.data.alias
+    routeType = getRouteId.data.type
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.2 获得父级栏目
+let parent_name = ref('');//父级名称
+let parent_id = ref('');//父级id
+let parent_pinyin = ref('');//父级拼音
+const getRoutePName = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+// console.log("getRoutePName", getRoutePName);
+
+if (getRoutePName.code == 200) {
+    parent_id.value = getRoutePName.data.category_id
+    parent_name.value = getRoutePName.data.alias
+} else {
+    console.log("获得路由id出错!", getRoutePName.message)
+}
+const getParentId = await requestDataPromise('/web/getOneWebsiteCategory', {
+    method: 'GET',
+    query: {
+        'catid': parent_id.value,
+    },
+});
+// console.log("getParentId", getParentId);
+
+if (getParentId.code == 200) {
+    parent_pinyin.value = getParentId.data.aLIas_pinyin
+} else {
+    console.log("获得路由id出错!", getParentId.message)
+}
+//1.获得路由id end ---------------------------------------->
+
+//2.选项卡 start ---------------------------------------->
+let showTabs = ref(1)
+let qhtabs = function (number) {
+    console.log(number)
+    showTabs.value = number
+}
+//2.选项卡 end ---------------------------------------->
+
+//4.页面数据 start ---------------------------------------->
+const pageData = ref([
+    //示例:
+    // {
+    //     id: 1, 
+    //     title: "", //该导航的标题
+    //     data: [], //数据1
+    //     data1: [], //数据2
+    //     data2: [], //数据3
+    //     data3: [], //数据4
+    //     data4: [], //数据5
+    //     category_id1: "",  //子导航id1
+    //     category_id2: "", 
+    //     category_id3: "",
+    //     category_id4: "",
+    //     title1: "", //子导航标题1
+    //     title2: "",
+    //     title3: "",
+    //     title4: "",
+    //     cid: "" //该导航的id
+    // },
+])
+const jobData = ref([])
+const jobHunting = ref([])
+
+//4.1 获取所有导航
+try {
+    const navigateData = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            'placeid': 1,
+            'pid': routeId,
+            'num': 8,
+            'type': 1
+        },
+    });
+    // console.log('获取三级导航1111111', navigateData);
+
+    if (navigateData.code == 200) {
+        // 遍历可用的导航池放到页面中
+        for (let index in navigateData.data) {
+            let data = {
+                title: navigateData.data[index].name,
+                cid: navigateData.data[index].category_id,
+                children_count: navigateData.data[index].children_count,
+                alias: navigateData.data[index].alias,
+                aLIas_pinyin: targetSegment1 + "/" + targetSegment + "/" + navigateData.data[index].aLIas_pinyin,
+                type: navigateData.data[index].type,
+                data: [],
+                data1: [],
+                data2: [],
+                data3: [],
+                data4: [],
+                category_id1: "",
+                category_id2: "",
+                category_id3: "",
+                category_id4: "",
+                title1: "",
+                title2: "",
+                title3: "",
+                title4: ""
+            };
+            if (navigateData.data[index].is_url == 1) {
+                // 处理 URL 的逻辑
+            } else {
+                if (navigateData.data[index].type == 4) {
+                    jobData.value.push(data);
+                }
+                if (navigateData.data[index].type == 5) {
+                    jobHunting.value.push(data);
+                }
+                //每个页面最多8个模块
+                pageData.value.push(data);
+            }
+        }
+        // console.log('获取三级导航pageData', pageData.value);
+        // console.log('获取三级导航jobData', jobData.value);
+        // console.log('获取三级导航jobHunting', jobHunting.value);
+
+        //导航池加载完毕,开始申请模块数据
+        let getJson = []
+        for (let i = 0; i < jobData.value.length; i++) {
+            if (i == 0) {
+                getJson.push({ "id": jobData.value[0].cid + ",4,3" })
+            } else if (i == 1) {
+                getJson.push({ "id": jobData.value[1].cid + ",4,3" })
+            } else if (i == 2) {
+                getJson.push({ "id": jobData.value[2].cid + ",4,6" })
+            } else if (i == 3) {
+                getJson.push({ "id": jobData.value[3].cid + ",4,3" })
+            } else if (i == 4) {
+                getJson.push({ "id": jobData.value[4].cid + ",4,3" })
+            } else if (i == 5) {
+                getJson.push({ "id": jobData.value[5].cid + ",4,6" })
+            } else if (i == 6) {
+                getJson.push({ "id": jobData.value[6].cid + ",4,3" })
+            }
+        }
+        for (let i = 0; i < jobHunting.value.length; i++) {
+            if (i == 0) {
+                getJson.push({ "id": jobHunting.value[0].cid + ",5,3" })
+            }
+        }
+        if (jobData.value.length > 0) {
+            let jsonString = JSON.stringify(getJson);
+            console.log("jsonString", jsonString);
+            getPageAllData(jsonString);
+        }
+
+
+    } else {
+        console.log("错误:渲染8个模块环节出错,请检查是否存在没有数据的模块!")
+    }
+} catch (error) {
+    console.log("错误:导航池渲染执行接口出错!请检查频道页渲染的模块数据是否完整!")
+}
+
+async function getPageAllData(jsonString) {
+    const mkdata = await requestDataPromise('/web/getWebsiteCategoryJob', {
+        method: 'GET',
+        query: {
+            'id': jsonString
+        },
+    });
+    // console.log('获取模块数据', mkdata);
+
+    if (mkdata.code == 200) {
+        //模块1
+        jobData.value[0].data = mkdata.data[0]
+        //模块2
+        jobData.value[1].data = mkdata.data[1]
+        //模块3
+        jobData.value[2].data = mkdata.data[2]
+        //模块4
+        jobData.value[3].data = mkdata.data[3]
+        //模块5
+        jobData.value[4].data = mkdata.data[4]
+        //模块6
+        jobData.value[5].data = mkdata.data[5]
+        //模块7
+        jobData.value[6].data = mkdata.data[6]
+        //模块8
+        jobHunting.value[0].data = mkdata.data[7]
+    } else {
+        ElMessage.error(mkdata.message)
+    }
+}
+//4.页面数据 end ---------------------------------------->
+
+//5.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': routeId
+    },
+});
+
+if (setData.code == 200) {
+    let seoTitle = setData.data.seo_title;
+    let seoDescription = setData.data.seo_description;
+    let seoKeywords = setData.data.seo_keywords;
+    let seoSuffix = setData.data.suffix;
+    let seoName = setData.data.website_name;
+
+    useSeoMeta({
+        title: seoTitle + "_" + seoSuffix,
+        meta: [
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("设置频道页SEO出错!", setData.message)
+}
+//5.设置seo信息 end---------------------------------------->
+</script>
+
+
+<style lang="less" scoped>
+@import url('@/assets/css/job/class.less');
+</style>

+ 438 - 0
components/job/detail_jobHunting.vue

@@ -0,0 +1,438 @@
+<template>
+    <div>
+        <!-- 面包屑导航 -->
+        <div class="breadcrumb">
+            <div class="inner">
+                <span class="location">当前位置:</span>
+                <el-breadcrumb :separator-icon="ArrowRight">
+                    <el-breadcrumb-item>
+                        <NuxtLink to="/">首页</NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item v-if="p_parent_name != ''">
+                        <NuxtLink :to="`/${targetSegment}/index.html`"> {{ p_parent_name }}</NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item v-if="parent_name != ''">
+                        <NuxtLink :to="`/${targetSegment}/${targetSegment1}/index.html`"> {{ parent_name }}
+                        </NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item>
+                        <NuxtLink :to="`/${targetSegment}/${targetSegment1}/${targetSegment2}/list-1.html`">
+                            {{ navTitle }}
+                        </NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item>简历详情</el-breadcrumb-item>
+                </el-breadcrumb>
+            </div>
+        </div>
+        <!-- 简历 -->
+        <main class="gerenjianli" v-if="type == 2">
+            <!-- 个人简历 -->
+            <section class="index_1 clearfix">
+                <div class="seek_head_box clearfix">
+                    <div class="seek_head_left">
+                        <a class="seek_head_a seek_head_only" title="">个人简历</a>
+                    </div>
+                    <div class="seek_head_right_box clearfix">
+                        <span class="seek_head_right_text">更新时间:{{ jobInfo.created_at }}</span>
+                    </div>
+                </div>
+                <div class="index_1_left clearfix">
+                    <div class="seek_introduce_box clearfix">
+                        <div class="seek_introduce_left clearfix">
+                            <div class="seek_introduce_head clearfix">
+                                <h4 class="seek_introduce_h4">{{ jobInfo.name }}</h4>
+                                <div class="seek_introduce_tag clearfix" v-if="resume">此简历已被推荐</div>
+                                <div class="seek_introduce_text clearfix" v-if="resume">
+                                    (已有单位把本简历加入人才库)
+                                </div>
+                            </div>
+                            <div class="seek_introduce_title_box clearfix">
+                                <span class="seek_introduce_label">期望岗位:</span>
+                                <span class="seek_introduce_title">{{ jobInfo.jtzw_name }}</span>
+                                <span class="seek_introduce_label">薪资待遇:</span>
+                                <span class="seek_introduce_title">{{ jobInfo.salary_name }}</span>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="seek_introduce_foot clearfix">
+                        <span class="seek_introduce_foot_text" v-if="jobInfo.sexy">
+                            {{ jobInfo.sexy == 1 ? '男' : '女' }}
+                        </span>
+                        <span class="seek_introduce_foot_text" v-if="jobInfo.birth">
+                            {{ getTime(jobInfo.birth, 'year', 0) }}
+                        </span>
+                        <span class="seek_introduce_foot_text" v-if="jobInfo.origin">
+                            籍贯:{{ jobInfo.origin }}
+                        </span>
+                        <span class="seek_introduce_foot_text" v-if="jobInfo.education_name">
+                            {{ jobInfo.education_name }}
+                        </span>
+                        <span class="seek_introduce_foot_text" v-if="jobInfo.experience_name">
+                            {{ jobInfo.experience_name }}
+                        </span>
+                        <span class="seek_introduce_foot_text" v-if="jobInfo.hunt_cityname">
+                            工作地点:{{ jobInfo.hunt_cityname }}
+                        </span>
+                        <span class="seek_introduce_foot_text" v-if="jobInfo.language_name">
+                            {{ jobInfo.language_name }}
+                        </span>
+                    </div>
+                </div>
+                <div class="index_1_right clearfix">
+                    <img class="index_1_right_img" src="@/public/image/touxiang.png" title="" alt=""
+                        v-if="!jobInfo.imgurl">
+                    <img class="index_1_right_img" :src="jobInfo.imgurl" title="" alt="" v-if="jobInfo.imgurl">
+
+                </div>
+            </section>
+            <!-- 个人简历 -->
+        </main>
+
+        <main class="jianli" v-if="type == 2">
+            <!-- 自我介绍 -->
+            <section class="index_2 clearfix">
+                <div class="seek_head_box clearfix">
+                    <div class="seek_head_left">
+                        <a class="seek_head_a seek_head_only" title="">自我介绍</a>
+                    </div>
+                </div>
+                <article class="seek_article">
+                    {{ jobInfo.self_evaluation }}
+                </article>
+            </section>
+            <!-- 自我介绍 -->
+            <!-- 工作经历 -->
+            <section class="index_3 clearfix">
+                <div class="seek_head_box clearfix">
+                    <div class="seek_head_left">
+                        <a class="seek_head_a seek_head_only" title="">工作经历</a>
+                    </div>
+                </div>
+                <div class="seek_in clearfix" v-for="(item, index) in experienceInfo" :key="index">
+                    <div class="seek_in_head clearfix">
+                        <span class="seek_in_head_text">{{ index + 1 }}.{{ item.company_name }}</span>
+                        <span class="seek_in_head_text">
+                            职位类别:
+                            {{ item.zw_name }}
+                        </span>
+                        <span class="seek_in_head_text">
+                            具体职位:
+                            {{ item.jtzw_name }}
+                        </span>
+                        <span class="seek_in_head_text" style="float: right;" v-if="item.job_timeList">
+                            {{ getTime(item.job_timeList[0], 'year', 0) }}
+                            -
+                            {{ getTime(item.job_timeList[1], 'year', 0) }}
+                        </span>
+                    </div>
+                    <div class="seek_in_ul clearfix">
+                        <div class="seek_in_li clearfix">
+                            <label class="seek_in_label">工作内容:</label>
+                            <div class="seek_in_li_text">{{ item.job_content }}</div>
+                        </div>
+                        <div class="seek_in_li clearfix">
+                            <label class="seek_in_label">工作业绩:</label>
+                            <div class="seek_in_li_text">{{ item.performance }}</div>
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 工作经历 -->
+            <!-- 教育背景 -->
+            <section class="index_4 clearfix">
+                <div class="seek_head_box clearfix">
+                    <div class="seek_head_left">
+                        <a class="seek_head_a seek_head_only" title="">教育背景</a>
+                    </div>
+                </div>
+                <div class="seek_in clearfix" v-for="(item, index) in education" :key="index">
+                    <div class="seek_in_head clearfix">
+                        <span class="seek_in_head_text"
+                            v-if="item.school_name || item.education_name || item.school_major || item.school_timeList">
+                            {{ index + 1 }}. {{ item.school_name }}
+                        </span>
+                        <span class="seek_in_head_text">
+                            {{ item.education_name }}
+                        </span>
+                        <span class="seek_in_head_text">{{ item.school_major }}</span>
+                        <span class="seek_in_head_text" style="float: right;" v-if="item.school_timeList">
+                            {{ getTime(item.school_timeList[0], 'year', 0) }}
+                            -
+                            {{ getTime(item.school_timeList[1], 'year', 0) }}
+                        </span>
+                    </div>
+                    <div class="seek_in_ul clearfix" v-if="item.school_experience">
+                        <div class="seek_in_li clearfix">
+                            <label class="seek_in_label">在校经历:</label>
+                            <div class="seek_in_li_text">{{ item.school_experience }}</div>
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 教育背景 -->
+            <!-- 专业技能 -->
+            <section class="index_5 clearfix">
+                <div class="seek_head_box clearfix">
+                    <div class="seek_head_left">
+                        <a class="seek_head_a seek_head_only" title="">专业技能</a>
+                    </div>
+                </div>
+                <div class="seek_in clearfix">
+                    <div class="seek_in_ul clearfix">
+                        <div class="seek_in_li clearfix" v-for="(item, index) in skillList">
+                            <label class="seek_in_label" v-if="item.skill">{{ index + 1 }}.</label>
+                            <div class="seek_in_li_text">{{ item.skill }}</div>
+                        </div>
+                    </div>
+                </div>
+            </section>
+            <!-- 专业技能 -->
+            <!-- 联系方式 -->
+            <section class="index_6 clearfix">
+                <div class="seek_head_box clearfix">
+                    <div class="seek_head_left">
+                        <a class="seek_head_a seek_head_only" title="">联系方式</a>
+                    </div>
+                </div>
+                <div class="seek_in clearfix" v-if="type_id == 10000 || type_id == 3">
+                    <article class="seek_article_2">
+                        {{ jobInfo.phone }}
+                    </article>
+                </div>
+                <div class="seek_in clearfix" v-else>
+                    <article class="seek_article_2">
+                        登录后可查看
+                    </article>
+                </div>
+            </section>
+            <!-- 联系方式 -->
+        </main>
+    </div>
+
+</template>
+<script setup>
+import { ref } from 'vue'
+import { ElBreadcrumb, ElBreadcrumbItem } from 'element-plus'
+import { ArrowRight } from '@element-plus/icons-vue'
+const route = useRoute();
+const type = ref(2);
+
+const nuxtApp = useNuxtApp();
+const axios = nuxtApp.$axios;
+
+//获取用户信息
+let type_id = ref('')
+let website_id = ref('')
+let getUserInfo = () => {
+    axios.get("/user/getUserInfo").then(response => {
+        console.log("gettypeid", response.data);
+        type_id.value = response.data.type_id
+        website_id.value = response.data.website_id
+    })
+}
+onMounted(() => {
+    getUserInfo()
+})
+
+
+//1.1 获得跳转过来的id
+const articleId = parseInt(route.params.id);  //获得该页面的id
+
+//1.2 获得路由
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+const targetSegment2 = getRoutePath(3);
+
+//1.1 获得当前的路由id
+let routeId;
+let routeType;
+let navTitle = ref('')//二级导航标题
+let navCid = ref('')//二级导航id
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment2,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    navTitle.value = getRouteId.data.alias
+    navCid.value = getRouteId.data.category_id
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.2 获取二级栏目
+let parent_name = ref('');//父级名称
+let parent_id = ref('');//父级id
+let parent_pinyin = ref('');//父级拼音
+const getRoutePName = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+console.log("getRoutePName", getRoutePName);
+
+if (getRoutePName.code == 200) {
+    routeId = getRoutePName.data.category_id
+    parent_id.value = getRoutePName.data.category_id
+    parent_name.value = getRoutePName.data.alias
+    routeType = getRoutePName.data.type
+} else {
+    console.log("获得路由id出错!", getRoutePName.message)
+}
+//1.3 获取一级栏目
+let p_parent_name = ref('');//父级名称
+let p_parent_id = ref('');//父级id
+const getRoutePName_parent = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRoutePName_parent", getRoutePName_parent);
+
+if (getRoutePName_parent.code == 200) {
+    p_parent_id.value = getRoutePName_parent.data.category_id
+    p_parent_name.value = getRoutePName_parent.data.alias
+} else {
+    console.log("获得路由id出错!", getRoutePName_parent.message)
+}
+
+
+//1.4 展示广告
+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];
+})
+
+// 2 获取详情
+let jobInfo = ref([]) //基本信息
+let companyInfo = ref([])// 公司介绍
+let category = ref([]) // 栏目
+let other_job = ref([]) // 岗位
+let experienceInfo = ref([]) // 工作经历
+let education = ref([]) // 教育背景
+let skillList = ref([]) // 专业技能
+let resume = ref(0)
+
+
+const getDetail = async () => {
+    const listData = await requestDataPromise('/web/getWebsiteJobInfo', {
+        method: 'GET',
+        query: {
+            'id': articleId,
+            'type': type.value,
+            'pageSize': 10,
+        },
+    });
+
+    if (listData.code == 200) {
+        // console.log("详情1111", listData.data);
+        // console.log("详情1111222", listData.data.job[0].job_experience);
+        // console.log("详情111122233", JSON.parse(listData.data.job[0].job_experience));
+        // console.log("详情1111222233344", JSON.parse(listData.data.job[0].education_experience));
+        // jobInfo.value = listData.data.job[0];
+        // category.value = listData.data.category;
+        if (type.value == 1) {
+            jobInfo.value = listData.data.job[0];
+            category.value = listData.data.category;
+            companyInfo.value = listData.data.company[0];
+            other_job.value = listData.data.other_job;
+        }
+        if (type.value == 2) {
+            jobInfo.value = listData.data.job[0];
+            category.value = listData.data.category;
+            experienceInfo.value = listData.data.job_experience;
+            education.value = listData.data.education_experience;
+            skillList.value = JSON.parse(listData.data.job[0].skillList);
+            resume.value = listData.data.resume;
+        }
+    }
+
+}
+getDetail();
+
+//获取行业 职位 具体职位
+const industry_categoryList = ref([])  //行业类别列表
+const position_categoryList = ref([])  //职位类别列表
+const positionList = ref([])  //具体职位列表
+
+const getData = async () => {
+    const getData = await requestDataPromise('/web/getWebsiteJobSelect', {
+        method: 'GET',
+        query: {},
+    });
+    if (getData.code == 200) {
+        // console.log("获取到的分类数据:", getData.data);
+        industry_categoryList.value = getData.data.hy; //行业
+        position_categoryList.value = getData.data.zw; //职位
+        positionList.value = getData.data.jtzw; //具体职位
+    }
+}
+getData()
+
+
+//4.设置seo信息 start---------------------------------------->
+//4.1 设置seo信息
+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 + "_" + seoName + "_" + seoSuffix,
+        meta: [
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    console.log("错误位置:设置列表页面SEO数据")
+    console.log("后端错误反馈:", setData.message)
+    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+}
+//4.设置seo信息 end---------------------------------------->
+</script>
+
+<style scoped lang="less">
+@import "@/assets/css/job/detail_jianli.less";
+@import "@/assets/css/job/detail_zhaopin.less";
+</style>

+ 438 - 0
components/job/detail_recruit.vue

@@ -0,0 +1,438 @@
+<template>
+    <div>
+        <!-- 面包屑导航 -->
+        <div class="breadcrumb">
+            <div class="inner">
+                <span class="location">当前位置:</span>
+                <el-breadcrumb :separator-icon="ArrowRight">
+                    <el-breadcrumb-item>
+                        <NuxtLink to="/">首页</NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item v-if="p_parent_name != ''">
+                        <NuxtLink :to="`/${targetSegment}/index.html`"> {{ p_parent_name }}</NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item v-if="parent_name != ''">
+                        <NuxtLink :to="`/${targetSegment}/${targetSegment1}/index.html`"> {{ parent_name }}
+                        </NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item>
+                        <NuxtLink :to="`/${targetSegment}/${targetSegment1}/${targetSegment2}/list-1.html`">
+                            {{ navTitle }}
+                        </NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item>简历详情</el-breadcrumb-item>
+                </el-breadcrumb>
+            </div>
+        </div>
+
+        <!-- 岗位 -->
+        <div class="gangwei" v-if="type == 1">
+            <main class="color_main">
+                <main class="index_main">
+                    <section class="index_1 clearfix">
+                        <div class="cruit_head_box clearfix">
+                            <div class="cruit_head_left">
+                                <a class="cruit_head_a cruit_head_only" title="">基本信息</a>
+                            </div>
+                        </div>
+                        <div class="index_1_box clearfix">
+                            <div class="demand_head_box clearfix">
+                                <div class="demand_head_name">{{ jobInfo.title }}</div>
+                                <div class="demand_head_btn hand" v-if="type_id == 1" @click="applyJob">申请该职位</div>
+                                <div class="demand_head_btn1" v-if="type_id != 1">申请该职位</div>
+                            </div>
+                            <div class="cruit_li_2_foot clearfix">
+                                <span class="cruit_li_2_foot_tag cruit_li_2_foot_exper">
+                                    {{ jobInfo.hy_name }}
+                                    &gt;
+                                    {{ jobInfo.zw_name }}
+                                </span>
+                                <span class="cruit_li_2_foot_tag cruit_li_2_foot_addres">{{ jobInfo.city_name }}</span>
+                            </div>
+                        </div>
+                    </section>
+                </main>
+            </main>
+
+            <main class="index_main">
+                <section class="index_2 clearfix">
+                    <div class="demand_1 clearfix">
+                        <div class="demand_left_1 clearfix">
+                            <div class="cruit_head_box clearfix">
+                                <div class="cruit_head_left">
+                                    <a class="cruit_head_a cruit_head_only" title="">基本要求</a>
+                                </div>
+                            </div>
+                            <div class="demand_ul_2">
+                                <div class="demand_li_2 clearfix">
+                                    <div class="demand_li_2_label">工作性质:</div>
+                                    <div class="demand_li_2_text clearfix">{{ jobInfo.job_nature_name }}</div>
+                                </div>
+                                <div class="demand_li_2 clearfix">
+                                    <div class="demand_li_2_label">工作经验:</div>
+                                    <div class="demand_li_2_text clearfix">{{ jobInfo.experience_name }}</div>
+                                </div>
+                                <div class="demand_li_2 clearfix">
+                                    <div class="demand_li_2_label">学历文凭:</div>
+                                    <div class="demand_li_2_text clearfix">{{ jobInfo.education_name }}</div>
+                                </div>
+                                <div class="demand_li_2 clearfix">
+                                    <div class="demand_li_2_label">语言选择:</div>
+                                    <div class="demand_li_2_text clearfix">{{ jobInfo.language_name }}</div>
+                                </div>
+                                <div class="demand_li_2 clearfix">
+                                    <div class="demand_li_2_label">薪资待遇:</div>
+                                    <div class="demand_li_2_text clearfix">{{ jobInfo.salary_name }}</div>
+                                </div>
+                                <div class="demand_li_2 clearfix">
+                                    <div class="demand_li_2_label">截止日期:</div>
+                                    <div class="demand_li_2_text clearfix">
+                                        {{ getTime(jobInfo.created_at, 'year', 1) }}
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="demand_left_2 clearfix">
+                            <div class="cruit_head_box clearfix">
+                                <div class="cruit_head_left">
+                                    <a class="cruit_head_a cruit_head_only" title="">岗位职责</a>
+                                </div>
+                            </div>
+                            <article class="demand_article_1">
+                                {{ jobInfo.description }}
+                            </article>
+                        </div>
+                        <div class="demand_left_3 clearfix">
+                            <div class="cruit_head_box clearfix">
+                                <div class="cruit_head_left">
+                                    <a class="cruit_head_a cruit_head_only" title="">具体要求</a>
+                                </div>
+                            </div>
+                            <article class="demand_article_1">
+                                {{ jobInfo.jt_description }}
+                            </article>
+                        </div>
+                        <div class="demand_left_4 clearfix">
+                            <div class="cruit_head_box clearfix">
+                                <div class="cruit_head_left">
+                                    <a class="cruit_head_a cruit_head_only" title="">联系方式</a>
+                                </div>
+                            </div>
+                            <div class="demand_ul_2">
+                                <div class="demand_li_2 clearfix">
+                                    <div class="demand_li_2_label">地址:</div>
+                                    <div class="demand_li_2_text clearfix">{{ companyInfo.address_name }}</div>
+                                </div>
+                                <div class="demand_li_2 clearfix">
+                                    <div class="demand_li_2_label">邮箱:</div>
+                                    <div class="demand_li_2_text clearfix">{{ companyInfo.email }}</div>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="demand_left_5 clearfix">
+                            <div class="cruit_head_box clearfix">
+                                <div class="cruit_head_left">
+                                    <a class="cruit_head_a cruit_head_only" title="">公司介绍</a>
+                                </div>
+                            </div>
+                            <div class="demand_ul_2">
+                                <div class="demand_li_2 clearfix">
+                                    <div class="demand_li_2_label">公司规模:</div>
+                                    <div class="demand_li_2_text clearfix">{{ companyInfo.company_size_name }}</div>
+                                </div>
+                                <div class="demand_li_2 clearfix">
+                                    <div class="demand_li_2_label">公司性质:</div>
+                                    <div class="demand_li_2_text clearfix">{{ companyInfo.company_nature_name }}</div>
+                                </div>
+                                <div class="demand_li_2 clearfix">
+                                    <div class="demand_li_2_label">公司行业:</div>
+                                    <div class="demand_li_2_text clearfix">{{ companyInfo.hy_name }}</div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+                    <div class="demand_2 clearfix">
+                        <div class="demand_right_1 clearfix">
+                            <div class="cruit_head_box clearfix">
+                                <div class="cruit_head_left">
+                                    <a class="cruit_head_a cruit_head_only" title="">招聘单位</a>
+                                </div>
+                            </div>
+                            <div class="demand_ul_1">
+                                <span class="demand_ul_1_span dot1">
+                                    {{ companyInfo.business_name }}
+                                </span>
+                            </div>
+                        </div>
+                        <div class="demand_right_2 clearfix">
+                            <div class="cruit_head_box clearfix">
+                                <div class="cruit_head_left">
+                                    <a class="cruit_head_a cruit_head_only" title="">其他职位</a>
+                                </div>
+                            </div>
+                            <div class="demand_ul_1">
+                                <NuxtLink class="demand_ul_1_a dot1" :href="`/${item.pinyin}/${item.id}.html`" title=""
+                                    v-for="(item, index) in other_job" :key="item.id">
+                                    {{ item.title }}
+                                </NuxtLink>
+                            </div>
+                        </div>
+                    </div>
+                </section>
+            </main>
+        </div>
+    </div>
+
+</template>
+<script setup>
+import { ref, reactive } from 'vue'
+import { ElBreadcrumb, ElBreadcrumbItem, ElMessage } from 'element-plus'
+import { ArrowRight } from '@element-plus/icons-vue'
+const route = useRoute();
+const type = ref(1);
+
+const nuxtApp = useNuxtApp();
+const axios = nuxtApp.$axios;
+
+//获取用户信息
+let type_id = ref('')
+let website_id = ref('')
+let getUserInfo = () => {
+    axios.get("/user/getUserInfo").then(response => {
+        console.log("gettypeid", response.data);
+        type_id.value = response.data.type_id
+        website_id.value = response.data.website_id
+    })
+}
+onMounted(() => {
+    getUserInfo()
+})
+
+
+//1.1 获得跳转过来的id
+const articleId = parseInt(route.params.id);  //获得该页面的id
+const articleIdArr = reactive([articleId]);
+
+//1.2 获得路由
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+const targetSegment2 = getRoutePath(3);
+
+//1.1 获得当前的路由id
+let routeId;
+let routeType;
+let navTitle = ref('')//二级导航标题
+let navCid = ref('')//二级导航id
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment2,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    navTitle.value = getRouteId.data.alias
+    navCid.value = getRouteId.data.category_id
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.2 获取二级栏目
+let parent_name = ref('');//父级名称
+let parent_id = ref('');//父级id
+let parent_pinyin = ref('');//父级拼音
+const getRoutePName = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+console.log("getRoutePName", getRoutePName);
+
+if (getRoutePName.code == 200) {
+    routeId = getRoutePName.data.category_id
+    parent_id.value = getRoutePName.data.category_id
+    parent_name.value = getRoutePName.data.alias
+    routeType = getRoutePName.data.type
+} else {
+    console.log("获得路由id出错!", getRoutePName.message)
+}
+//1.3 获取一级栏目
+let p_parent_name = ref('');//父级名称
+let p_parent_id = ref('');//父级id
+const getRoutePName_parent = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRoutePName_parent", getRoutePName_parent);
+
+if (getRoutePName_parent.code == 200) {
+    p_parent_id.value = getRoutePName_parent.data.category_id
+    p_parent_name.value = getRoutePName_parent.data.alias
+} else {
+    console.log("获得路由id出错!", getRoutePName_parent.message)
+}
+
+
+//1.4 展示广告
+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];
+})
+
+// 2 获取详情
+let jobInfo = ref([]) //基本信息
+let companyInfo = ref([])// 公司介绍
+let category = ref([]) // 栏目
+let other_job = ref([]) // 岗位
+let experienceInfo = ref([]) // 工作经历
+let education = ref([]) // 教育背景
+let skillList = ref([]) // 专业技能
+let resume = ref(0)
+
+
+const getDetail = async () => {
+    const listData = await requestDataPromise('/web/getWebsiteJobInfo', {
+        method: 'GET',
+        query: {
+            'id': articleId,
+            'type': type.value,
+            'pageSize': 10,
+        },
+    });
+
+    if (listData.code == 200) {
+        console.log("详情1111", listData.data);
+        // console.log("详情1111222", listData.data.job[0].job_experience);
+        // console.log("详情111122233", JSON.parse(listData.data.job[0].job_experience));
+        // console.log("详情1111222233344", JSON.parse(listData.data.job[0].education_experience));
+        // jobInfo.value = listData.data.job[0];
+        // category.value = listData.data.category;
+        if (type.value == 1) {
+            jobInfo.value = listData.data.job[0];
+            category.value = listData.data.category;
+            companyInfo.value = listData.data.company[0];
+            other_job.value = listData.data.other_job;
+        }
+        if (type.value == 2) {
+            jobInfo.value = listData.data.job[0];
+            category.value = listData.data.category;
+            experienceInfo.value = listData.data.job_experience;
+            education.value = listData.data.education_experience;
+            skillList.value = JSON.parse(listData.data.job[0].skillList);
+            resume.value = listData.data.resume;
+        }
+    }
+
+}
+getDetail();
+
+//获取行业 职位 具体职位
+const industry_categoryList = ref([])  //行业类别列表
+const position_categoryList = ref([])  //职位类别列表
+const positionList = ref([])  //具体职位列表
+
+const getData = async () => {
+    const getData = await requestDataPromise('/web/getWebsiteJobSelect', {
+        method: 'GET',
+        query: {},
+    });
+    if (getData.code == 200) {
+        // console.log("获取到的分类数据:", getData.data);
+        industry_categoryList.value = getData.data.hy; //行业
+        position_categoryList.value = getData.data.zw; //职位
+        positionList.value = getData.data.jtzw; //具体职位
+    }
+}
+getData()
+
+// 3 申请该职位
+const applyJob = () => {
+    // console.log("点击了申请该职位", typeof website_id.value);
+    // console.log("点击了申请该职位", articleIdArr);
+
+    axios.post('/web/getWebsiteJobApply', {
+        website_id: website_id.value,
+        recruit_id: articleIdArr,
+    }).then(response => {
+        // console.log("申请该职位11111111", response);
+        if (response.code == 200) {
+            ElMessage({
+                message: '申请成功',
+                type: 'success',
+            });
+        } else {
+            ElMessage({
+                message: response.message,
+                type: 'error',
+            });
+        }
+    }).catch(error => {
+        console.error('Error:', error);
+    });
+}
+
+//4.设置seo信息 start---------------------------------------->
+//4.1 设置seo信息
+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 + "_" + seoName + "_" + seoSuffix,
+        meta: [
+            { name: 'description', content: seoDescription + "_" + seoName + "_" + seoSuffix, tagPriority: 10 },
+            { name: 'keywords', content: seoKeywords + "_" + seoName + "_" + seoSuffix, tagPriority: 10 }
+        ]
+    });
+} else {
+    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+    console.log("错误位置:设置列表页面SEO数据")
+    console.log("后端错误反馈:", setData.message)
+    console.log("SSR waring ---------- SSR waring ---------- SSR waring ---------->")
+}
+//4.设置seo信息 end---------------------------------------->
+</script>
+
+<style scoped lang="less">
+@import "@/assets/css/job/detail_jianli.less";
+@import "@/assets/css/job/detail_zhaopin.less";
+</style>

+ 183 - 0
components/job/list.vue

@@ -0,0 +1,183 @@
+<template>
+    <div class="jobList">
+        <section class="index_1 clearfix">
+            <div class="shop_head_1 clearfix">
+                <div class="shop_head_1_name">{{ parent_name }}</div>
+            </div>
+            <div class="categ_color_box clearfix">
+                <div class="categ_color_name clearfix">直达:</div>
+                <div class="categ_color_in clearfix">
+                    <NuxtLink class="categ_color_a" :href="`/${item.aLIas_pinyin}/list-1.html`" :title="item.title"
+                        v-for="(item, index) in pageData" :key="index"
+                        :class="{ categ_color_a_only: navCid == item.cid }">
+                        {{ item.alias }}
+                    </NuxtLink>
+                </div>
+            </div>
+        </section>
+        <div class="breadcrumb">
+            <div class="inner">
+                <span class="location">当前位置 :</span>
+                <el-breadcrumb :separator-icon="ArrowRight">
+                    <el-breadcrumb-item>
+                        <NuxtLink to="/">首页</NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item v-if="p_parent_name != ''">
+                        <NuxtLink :to="`/${targetSegment}/index.html`"> {{ p_parent_name }}</NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item v-if="parent_name != ''">
+                        <NuxtLink :to="`/${targetSegment}/${targetSegment1}/index.html`"> {{ parent_name }}
+                        </NuxtLink>
+                    </el-breadcrumb-item>
+                    <el-breadcrumb-item>{{ navTitle }}</el-breadcrumb-item>
+                </el-breadcrumb>
+            </div>
+        </div>
+    </div>
+    <JobListRecruit v-if="routeType == 4"></JobListRecruit>
+    <JobListJobHunting v-if="routeType == 5"></JobListJobHunting>
+</template>
+
+<script setup>
+//0.加载页面依赖 start ---------------------------------------->
+import { ref } from 'vue';
+import { ElBreadcrumb, ElBreadcrumbItem } from 'element-plus';
+import { ArrowRight } from '@element-plus/icons-vue'
+//0.加载页面依赖 end ---------------------------------------->
+
+//1.获得路由id start ---------------------------------------->
+const targetSegment = getRoutePath(1);
+const targetSegment1 = getRoutePath(2);
+const targetSegment2 = getRoutePath(3);
+//1.1 获得当前的路由id
+let routeId;
+let routeType;
+let navTitle = ref('')//二级导航标题
+let navCid = ref('')//二级导航id
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment2,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    navTitle.value = getRouteId.data.alias
+    navCid.value = getRouteId.data.category_id
+    routeType = getRouteId.data.type
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+//1.2 获取二级栏目
+let parent_name = ref('');//父级名称
+let parent_id = ref('');//父级id
+const getRoutePName = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment1,
+    },
+});
+console.log("getRoutePName", getRoutePName);
+
+if (getRoutePName.code == 200) {
+    routeId = getRoutePName.data.category_id
+    parent_id.value = getRoutePName.data.category_id
+    parent_name.value = getRoutePName.data.alias
+} else {
+    console.log("获得路由id出错!", getRoutePName.message)
+}
+//1.3 获取一级栏目
+let p_parent_name = ref('');//父级名称
+let p_parent_id = ref('');//父级id
+const getRoutePName_parent = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRoutePName_parent", getRoutePName_parent);
+
+if (getRoutePName_parent.code == 200) {
+    p_parent_id.value = getRoutePName_parent.data.category_id
+    p_parent_name.value = getRoutePName_parent.data.alias
+} else {
+    console.log("获得路由id出错!", getRoutePName_parent.message)
+}
+//1.获得路由id end ---------------------------------------->
+
+
+//2.页面数据 start ---------------------------------------->
+const pageData = ref([])
+
+//2.1 获取所有导航
+try {
+    const navigateData = await requestDataPromise('/web/getWebsiteModelCategory', {
+        method: 'GET',
+        query: {
+            'placeid': 1,
+            'pid': routeId,
+            'num': 20,
+            'type': 1
+        },
+    });
+
+    if (navigateData.code == 200) {
+        // 遍历可用的导航池放到页面中
+        for (let index in navigateData.data) {
+            let data = {
+                title: navigateData.data[index].name,
+                cid: navigateData.data[index].category_id,
+                children_count: navigateData.data[index].children_count,
+                alias: navigateData.data[index].alias,
+                aLIas_pinyin: targetSegment + "/" + targetSegment1 + "/" + navigateData.data[index].aLIas_pinyin,
+                type: navigateData.data[index].type,
+            };
+            if (navigateData.data[index].is_url == 1) {
+                // 处理 URL 的逻辑
+            } else {
+                //每个页面最多8个模块
+                pageData.value.push(data);
+            }
+        }
+
+    } else {
+        console.log("错误:渲染8个模块环节出错,请检查是否存在没有数据的模块!")
+    }
+} catch (error) {
+    console.log("错误:导航池渲染执行接口出错!请检查频道页渲染的模块数据是否完整!")
+}
+//2.页面数据 end ---------------------------------------->
+
+//3.设置seo信息 start---------------------------------------->
+const setData = await requestDataPromise('/web/getWebsiteCategoryHead', {
+    method: 'GET',
+    query: {
+        'catid': navCid.value
+    },
+});
+
+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)
+}
+//3.设置seo信息 end---------------------------------------->
+</script>
+
+<style lang="less" scoped>
+@import url('@/assets/css/job/list.less');
+</style>

+ 141 - 0
components/job/list_jobHunting.vue

@@ -0,0 +1,141 @@
+<template>
+    <!-- 求职列表页 -->
+    <main class="index_main">
+        <section class="table_out clearfix">
+            <div class="table_head clearfix phone_none">
+                <div class="table_head_name">姓名</div>
+                <div class="table_head_job">岗位</div>
+                <div class="table_head_sex">性别</div>
+                <div class="table_head_experience">工作经验</div>
+                <div class="table_head_native">籍贯</div>
+                <div class="table_head_industry">所属行业</div>
+                <div class="table_head_address">地区</div>
+                <div class="table_head_time">时间</div>
+            </div>
+            <div class="table_ul clearfix">
+                <div class="table_li clearfix" v-for="(item, index) in jobList" :key="index">
+                    <NuxtLink class="table_li_a clearfix" :href="getLinkPathDetail(item)" :title="item.name">
+                        <div class="table_li_name dot1">
+                            <label class="table_li_label pc_none">姓名:</label>
+                            <div class="table_li_name_in dot1">
+                                {{ item.name }}
+                            </div>
+                        </div>
+                        <div class="table_li_job dot1">
+                            <label class="table_li_label pc_none">岗位:</label>
+                            <div class="table_li_text dot1">
+                                {{ item.jtzw_name }}
+                            </div>
+                        </div>
+                        <div class="table_li_sex dot1">
+                            <label class="table_li_label pc_none">性别:</label>
+                            <div class="table_li_text dot1">
+                                {{ item.sexy ? '男' : '女' }}
+                            </div>
+                        </div>
+                        <div class="table_li_experience dot1">
+                            <label class="table_li_label pc_none">工作经验:</label>
+                            <div class="table_li_text dot1">
+                                {{ item.experience_name }}
+                            </div>
+                        </div>
+                        <div class="table_li_native dot1">
+                            <label class="table_li_label pc_none">籍贯:</label>
+                            <div class="table_li_text dot1">
+                                {{ item.origin }}
+                            </div>
+                        </div>
+                        <div class="table_li_industry dot1">
+                            <label class="table_li_label pc_none">所属行业:</label>
+                            <div class="table_li_text dot1">
+                                {{ item.hy_name }}
+                            </div>
+                        </div>
+                        <div class="table_li_address">
+                            <label class="table_li_label pc_none">地区:</label>
+                            <span class="table_li_in dot1">
+                                {{ item.city_name }}
+                            </span>
+                        </div>
+                        <div class="table_li_time dot1">
+                            <label class="table_li_label pc_none">时间:</label>
+                            <span class="table_li_in dot1">
+                                {{ getTime(item.updated_at, 'year', 1) }}
+                            </span>
+                        </div>
+                    </NuxtLink>
+                </div>
+            </div>
+            <div class="empty" v-if="jobList == false">
+                <img src="@/public/topic/empty.png" alt="" class="empty_img">
+                <span class="empty_text">当前暂无数据</span>
+            </div>
+        </section>
+    </main>
+    <!-- 分页器 -->
+    <div class="pagination11" v-if="jobList != false">
+        <div class="pagination">
+            <el-pagination background layout="prev, pager, next" :total="total" :page-size="pageSize" prev-text="上一页"
+                next-text="下一页" @current-change="changePage" />
+        </div>
+    </div>
+</template>
+
+
+<script setup>
+//0.加载页面依赖 start ---------------------------------------->
+import { ref, onMounted } from 'vue';
+import { ElMessage, ElPagination } from 'element-plus';
+import { NuxtLink } from '#components';
+//0.加载页面依赖 end ---------------------------------------->
+
+//1.获得路由id start ---------------------------------------->
+const targetSegment = getRoutePath(3);
+//1.1 获得当前的路由id
+let navTitle = ref('')//二级导航标题
+let navCid = ref('')//二级导航id
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+if (getRouteId.code == 200) {
+    navTitle.value = getRouteId.data.alias
+    navCid.value = getRouteId.data.category_id
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+
+//1.获得路由id end ---------------------------------------->
+
+// 获取商品数据列表 start--------------------------------------->
+const jobList = ref()
+const page = ref(1)
+const pageSize = ref(10)
+const total = ref()
+const getJobsList = await requestDataPromise('/web/getWebsiteJobList', {
+    method: 'GET',
+    query: {
+        'catid': navCid.value,
+        'page': page.value,
+        'pageSize': pageSize.value,
+        'type': 2
+    },
+});
+console.log("获取数据列表job", getJobsList.data.JobHunting);
+
+if (getJobsList.code == 200) {
+    jobList.value = getJobsList.data.JobHunting
+    total.value = getJobsList.data.hunt_count
+}
+// 获取商品数据 end----------------------------------------->
+
+//4.页面数据 end ---------------------------------------->
+
+</script>
+
+<style lang="less" scoped>
+@import url('@/assets/css/job/list_qiuzhi.less');
+</style>

+ 122 - 0
components/job/list_recruit.vue

@@ -0,0 +1,122 @@
+<template>
+    <main class="index_main">
+        <section class="table_out clearfix">
+            <div class="table_head clearfix phone_none">
+                <div class="table_head_masg">职位信息</div>
+                <div class="table_head_company">公司</div>
+                <div class="table_head_job">岗位</div>
+                <div class="table_head_address">地区</div>
+                <div class="table_head_time">时间</div>
+            </div>
+            <div class="table_ul clearfix">
+                <div class="table_li clearfix" v-for="(item, index) in jobList" :key="index">
+                    <NuxtLink class="table_li_a clearfix" :href="getLinkPathDetail(item)" :title="item.title">
+                        <div class="table_li_masg dot1">
+                            <label class="table_li_label pc_none">职位信息:</label>
+                            <div class="table_li_text dot1">
+                                {{ item.title }}
+                            </div>
+                        </div>
+                        <div class="table_li_company dot1">
+                            <label class="table_li_label pc_none">公司:</label>
+                            <div class="table_li_text dot1">
+                                {{ item.business_name }}
+                            </div>
+                        </div>
+                        <div class="table_li_job ">
+                            <label class="table_li_label pc_none">岗位:</label>
+                            <span class="table_li_job_in table_li_text dot1">
+                                {{ item.jtzw_name }}
+                            </span>
+                        </div>
+                        <div class="table_li_address dot1">
+                            <label class="table_li_label pc_none">地区:</label>
+                            <div class="table_li_text dot1">
+                                {{ item.city_name }}
+                            </div>
+                        </div>
+                        <div class="table_li_time">
+                            <label class="table_li_label pc_none">时间:</label>
+                            <div class="table_li_text dot1">
+                                {{ getTime(item.updated_at, 'year', 1) }}
+                            </div>
+                        </div>
+                    </NuxtLink>
+                </div>
+            </div>
+            <div class="empty" v-if="jobList == false">
+                <img src="@/public/topic/empty.png" alt="" class="empty_img">
+                <span class="empty_text">当前暂无数据</span>
+            </div>
+        </section>
+    </main>
+    <!-- 分页器 -->
+    <div class="pagination11" v-if="jobList != false">
+        <div class="pagination">
+            <el-pagination background layout="prev, pager, next" :total="total" :page-size="pageSize" prev-text="上一页"
+                next-text="下一页" @current-change="changePage" />
+        </div>
+    </div>
+</template>
+
+
+<script setup>
+//0.加载页面依赖 start ---------------------------------------->
+import { ref, onMounted } from 'vue';
+import { ElMessage, ElPagination } from 'element-plus';
+//0.加载页面依赖 end ---------------------------------------->
+
+//1.获得路由id start ---------------------------------------->
+const targetSegment = getRoutePath(3);
+//1.1 获得当前的路由id
+let navTitle = ref('')//二级导航标题
+let navCid = ref('')//二级导航id
+//通过导航路径反向查询导航id
+const getRouteId = await requestDataPromise('/web/getWebsiteRoute', {
+    method: 'GET',
+    query: {
+        'pinyin': targetSegment,
+    },
+});
+console.log("getRouteId", getRouteId);
+
+if (getRouteId.code == 200) {
+    navTitle.value = getRouteId.data.alias
+    navCid.value = getRouteId.data.category_id
+} else {
+    console.log("获得路由id出错!", getRouteId.message)
+}
+
+//1.获得路由id end ---------------------------------------->
+
+// 获取商品数据列表 start--------------------------------------->
+const jobList = ref()
+const page = ref(1)
+const pageSize = ref(10)
+const total = ref()
+const getJobsList = await requestDataPromise('/web/getWebsiteJobList', {
+    method: 'GET',
+    query: {
+        'catid': navCid.value,
+        'page': page.value,
+        'pageSize': pageSize.value,
+        'type': 1
+    },
+});
+// console.log("获取数据列表job", getJobsList);
+
+if (getJobsList.code == 200) {
+    jobList.value = getJobsList.data.JobRecruiting
+    total.value = getJobsList.data.recruit_count
+}
+// 获取商品数据 end----------------------------------------->
+
+//4.页面数据 end ---------------------------------------->
+
+</script>
+
+<style lang="less" scoped>
+@import url('@/assets/css/job/list_zhaopin.less');
+</style>
+
+

+ 4 - 7
pages/[dir]/[dir]/[dir]/[id].vue

@@ -6,9 +6,12 @@
     <NewsDetail v-if="routeType == 1"></NewsDetail>
     <!-- goods -->
     <GoodsDetail v-if="routeType == 2"></GoodsDetail>
+    <!-- job -->
+    <JobDetailRecruit v-if="routeType == 4"></JobDetailRecruit>
+    <JobDetailJobHunting v-if="routeType == 5"></JobDetailJobHunting>
     <!-- company -->
     <CompanyDetail v-if="routeType == 6"></CompanyDetail>
-    
+
     <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
     <HomeFoot></HomeFoot>
 </template>
@@ -21,20 +24,14 @@ let routeType;
 //通过导航路径反向查询导航id
 
 //1.2 获取二级栏目
-let parent_name = ref('');//父级名称
-let parent_id = ref('');//父级id
 const getRoutePName = await requestDataPromise('/web/getWebsiteRoute', {
     method: 'GET',
     query: {
         'pinyin': targetSegment,
     },
 });
-console.log("getRoutePName", getRoutePName);
 
 if (getRoutePName.code == 200) {
-    // routeId = getRoutePName.data.category_id
-    // parent_id.value = getRoutePName.data.category_id
-    // parent_name.value = getRoutePName.data.alias
     routeType = getRoutePName.data.type
 } else {
     console.log("获得路由id出错!", getRoutePName.message)

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

@@ -143,6 +143,7 @@
     </main>
 
     <CompanyList v-if="routeType == 6"></CompanyList>
+    <JobList v-if="routeType == 4 || routeType == 5"></JobList>
     <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
     <HomeFoot></HomeFoot>
 </template>

+ 6 - 30
pages/[dir]/[dir]/index.html.vue

@@ -1,6 +1,7 @@
 <template>
     <HomePageHead></HomePageHead>
     <HomePageNavigation></HomePageNavigation>
+    <HomeAdvertising :imgurl="adImg1"></HomeAdvertising>
     <!-- 新闻三级分类页 -->
     <div class="news" v-if="routeType == 1">
         <section class="index_1 clearfix">
@@ -335,14 +336,13 @@
                     </div>
                 </div>
             </section>
-            <div class="banner_2 clearfix">
-                <a class="banner_2_a" href="" title=""><img class="banner_2_img" src="@/public/img/16.png" title=""
-                        alt=""></a>
-            </div>
+            
         </section>
     </div>
 
     <CompanyClass v-if="routeType == 6"></CompanyClass>
+    <JobClass v-if="routeType == 4"></JobClass>
+    <HomeAdvertising :imgurl="adImg2"></HomeAdvertising>
     <HomeFoot></HomeFoot>
 </template>
 
@@ -427,7 +427,7 @@ onMounted(async () => {
     //从客户端获取行政职能部门 加快打开速度
     const { $webUrl, $CwebUrl } = useNuxtApp();
     //广告1
-    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=snzxw_category_0001`
+    let url = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=snscw_category_0001`
     const responseAd1 = await fetch(url, {
         headers: {
             'Content-Type': 'application/json',
@@ -439,7 +439,7 @@ onMounted(async () => {
     adImg1.value = resultAd1.data[0];
 
     //广告2
-    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=snzxw_category_0002`
+    let url2 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=snscw_category_0002`
     const responseAd2 = await fetch(url2, {
         headers: {
             'Content-Type': 'application/json',
@@ -449,30 +449,6 @@ onMounted(async () => {
     });
     const resultAd2 = await responseAd2.json();
     adImg2.value = resultAd2.data[0];
-
-    //广告3
-    let url3 = `${$webUrl}/web/getWebsiteAdvertisement?ad_tag=snzxw_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=snzxw_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 ---------------------------------------->
 

+ 2 - 2
pages/topic/[id].vue

@@ -235,7 +235,7 @@ const joinGroup = () => {
                     type: 'success',
                 })
                 setTimeout(() => {
-                    window.open($BwebUrl + '/#/hall?userurl=' + $webUrl, '_blank');
+                    window.open($BwebUrl + '/#/businessDistrict?userurl=' + $webUrl, '_blank');
                     //window.open('http://admindev.bjzxtw.org.cn/#/hall', '_blank');
                 }, 1000)
             } else if (res.code == 200) {
@@ -244,7 +244,7 @@ const joinGroup = () => {
                     type: 'success',
                 })
                 setTimeout(() => {
-                    window.open($BwebUrl + '/#/hall?userurl=' + $webUrl, '_blank');
+                    window.open($BwebUrl + '/#/businessDistrict?userurl=' + $webUrl, '_blank');
                     //window.open('http://admindev.bjzxtw.org.cn/#/hall', '_blank');
                 }, 1000)
             }

BIN
public/image/01.png


BIN
public/image/04.png


BIN
public/image/05.png


BIN
public/image/06.png


BIN
public/image/touxiang.png


BIN
public/img/25.png


BIN
public/img/26.png