guhongwei 5 vuotta sitten
vanhempi
commit
8a09a6aa69

+ 73 - 0
src/components/corp.vue

@@ -0,0 +1,73 @@
+<template>
+  <div id="jobfair">
+    <el-row>
+      <el-col :span="24" class="top">
+        <div class="w_1200">
+          <top :info="info" :Color="Color"></top>
+        </div>
+      </el-col>
+      <el-col :span="24" class="menu">
+        <menuInfo :menuList="menuList" :backColor="backColor"></menuInfo>
+      </el-col>
+      <el-col :span="24" class="main">
+        <div class="w_1200">
+          <corpDetail :corpDetails="corpDetails" :jobslist="jobslist"></corpDetail>
+        </div>
+      </el-col>
+      <el-col :span="24" class="foot">
+        <down :info="info" :backColor="backColor"></down>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/index/top.vue';
+import menuInfo from '@/layout/index/menuInfo.vue';
+import corpDetail from '@/layout/recuit/corpDetail.vue';
+import down from '@/layout/index/down.vue';
+export default {
+  name: 'jobfair',
+  props: {
+    info: null, //头部信息
+    Color: null, //头部电话字体颜色
+    backColor: null, //导航菜单背景颜色
+    corpDetails: null, //详情企业
+    jobslist: null,
+    menuList: null,
+  },
+  components: {
+    top, //头部
+    menuInfo, //导航
+    corpDetail, //企业详情
+    down, //底部信息
+  },
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.top {
+  height: 120px;
+  overflow: hidden;
+}
+.menu {
+  height: 40px;
+  overflow: hidden;
+}
+.main {
+  min-height: 1100px;
+  margin: 20px 0;
+}
+.foot {
+  height: 133px;
+  overflow: hidden;
+}
+</style>

+ 84 - 0
src/components/jobfair.vue

@@ -0,0 +1,84 @@
+<template>
+  <div id="jobfair">
+    <el-row>
+      <el-col :span="24" class="top">
+        <div class="w_1200">
+          <top :info="info" :Color="Color"></top>
+        </div>
+      </el-col>
+      <el-col :sapn="24" class="banner">
+        <banner :info="info"></banner>
+      </el-col>
+      <el-col :span="24" class="menu">
+        <menuInfo :menuList="menuList" :backColor="backColor"></menuInfo>
+      </el-col>
+      <el-col :span="24" class="main">
+        <div class="w_1200">
+          <jobfairInfo :jobfairInfo="jobfairInfo" :corpList="corpList" :jobsList="jobsList"></jobfairInfo>
+        </div>
+      </el-col>
+      <el-col :span="24" class="foot">
+        <down :info="info" :backColor="backColor"></down>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/index/top.vue';
+import banner from '@/layout/index/banner.vue';
+import menuInfo from '@/layout/index/menuInfo.vue';
+import jobfairInfo from '@/layout/recuit/jobfairInfo.vue';
+import down from '@/layout/index/down.vue';
+export default {
+  name: 'jobfair',
+  props: {
+    info: null, //头部信息
+    menuList: null, //菜单
+    Color: null, //头部电话字体颜色
+    backColor: null, //导航菜单背景颜色
+    jobfairInfo: null,
+    corpList: null,
+    jobsList: null,
+  },
+  components: {
+    top, //头部
+    banner, //banner
+    menuInfo, //导航
+    jobfairInfo, //宣讲会详情
+    down, //底部信息
+  },
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.top {
+  height: 120px;
+  overflow: hidden;
+}
+.banner {
+  height: 300px;
+  overflow: hidden;
+}
+.menu {
+  height: 50px;
+  overflow: hidden;
+}
+.main {
+  min-height: 1100px;
+  margin: 20px 0;
+  border: 1px solid #ccc;
+}
+.foot {
+  height: 133px;
+  overflow: hidden;
+}
+</style>

+ 82 - 0
src/components/jobinfo.vue

@@ -0,0 +1,82 @@
+<template>
+  <div id="jobinfo">
+    <el-row>
+      <el-col :span="24" class="top">
+        <div class="w_1200">
+          <top :info="info"></top>
+        </div>
+      </el-col>
+      <el-col :sapn="24" class="banner">
+        <banner :info="info"></banner>
+      </el-col>
+      <el-col :span="24" class="menu">
+        <menuInfo :menuList="menuList" :backColor="backColor"></menuInfo>
+      </el-col>
+      <el-col :span="24" class="main">
+        <div class="w_1200">
+          <jobinfoInfo :jobinfoInfo="jobinfoInfo" :jobslist="jobslist"></jobinfoInfo>
+        </div>
+      </el-col>
+      <el-col :span="24" class="foot">
+        <down :info="info" :backColor="backColor"></down>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/index/top.vue';
+import banner from '@/layout/index/banner.vue';
+import menuInfo from '@/layout/index/menuInfo.vue';
+import jobinfoInfo from '@/layout/recuit/jobinfoInfo.vue';
+import down from '@/layout/index/down.vue';
+export default {
+  name: 'jobinfo',
+  props: {
+    info: null, //头部信息
+    Color: null, //头部电话字体颜色
+    backColor: null, //导航菜单背景颜色
+    jobinfoInfo: null,
+    jobslist: null,
+    menuList: null,
+  },
+  components: {
+    top, //头部
+    banner, //banner
+    menuInfo, //导航
+    jobinfoInfo, //宣讲会详情
+    down, //底部信息
+  },
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.top {
+  height: 120px;
+  overflow: hidden;
+}
+.banner {
+  height: 300px;
+  overflow: hidden;
+}
+.menu {
+  height: 50px;
+  overflow: hidden;
+}
+.main {
+  min-height: 1100px;
+  margin: 20px 0;
+}
+.foot {
+  height: 133px;
+  overflow: hidden;
+}
+</style>

+ 89 - 0
src/components/jobs.vue

@@ -0,0 +1,89 @@
+<template>
+  <div id="jobs">
+    <el-row>
+      <el-col :span="24" class="top">
+        <div class="w_1200">
+          <top :info="info" :Color="Color"></top>
+        </div>
+      </el-col>
+      <el-col :sapn="24" class="banner">
+        <banner :info="info"></banner>
+      </el-col>
+      <el-col :span="24" class="menu">
+        <menuInfo :menuList="menuList" :backColor="backColor"></menuInfo>
+      </el-col>
+      <el-col :span="24" class="main">
+        <div class="w_1200">
+          <el-col :span="18">
+            <jobsInfo :jobInfo="jobInfo" :corpsInfo="corpsInfo"></jobsInfo>
+          </el-col>
+          <el-col :span="6">
+            <corpInfo :corpsInfo="corpsInfo"></corpInfo>
+          </el-col>
+        </div>
+      </el-col>
+      <el-col :span="24" class="foot">
+        <down :info="info" :backColor="backColor"></down>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/index/top.vue';
+import banner from '@/layout/index/banner.vue';
+import menuInfo from '@/layout/index/menuInfo.vue';
+import jobsInfo from '@/layout/recuit/jobsInfo.vue';
+import corpInfo from '@/layout/recuit/corpInfo.vue';
+import down from '@/layout/index/down.vue';
+export default {
+  name: 'jobs',
+  props: {
+    info: null, //头部信息
+    menuList: null, //菜单
+    Color: null, //头部电话字体颜色
+    backColor: null, //导航菜单背景颜色
+    jobInfo: null, //职位详情
+    corpsInfo: null, //企业详情
+  },
+  components: {
+    top, //头部
+    banner, //banner
+    menuInfo, //导航
+    jobsInfo, //职位
+    corpInfo, //企业
+    down, //底部信息
+  },
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.top {
+  height: 120px;
+  overflow: hidden;
+}
+.banner {
+  height: 300px;
+  overflow: hidden;
+}
+.menu {
+  height: 50px;
+  overflow: hidden;
+}
+.main {
+  min-height: 1100px;
+  margin: 20px 0;
+}
+.foot {
+  height: 133px;
+  overflow: hidden;
+}
+</style>

+ 36 - 53
src/components/list.vue

@@ -1,31 +1,28 @@
 <template>
   <div id="list">
     <el-row>
-      <el-col :sapn="24" class="top">
-        <top :info="info"></top>
+      <el-col :span="24" class="top">
+        <div class="w_1200">
+          <top :info="info" :Color="Color"></top>
+        </div>
       </el-col>
       <el-col :sapn="24" class="banner">
         <banner :info="info"></banner>
       </el-col>
-      <el-col :sapn="24" class="menu">
+      <el-col :span="24" class="menu">
         <menuInfo :menuList="menuList" :backColor="backColor"></menuInfo>
       </el-col>
-      <el-col :sapn="24" class="main">
-        <div class="w_1270">
-          <el-col :span="5" class="mainLeft">
-            <el-col :span="24" class="listMenu">
-              <listMenu></listMenu>
-            </el-col>
-            <el-col :span="24" class="listLogin">
-              <kuaisu></kuaisu>
-            </el-col>
+      <el-col :span="24" class="main">
+        <div class="w_1200">
+          <el-col :span="5" class="mainNav">
+            <listLeft :sideMenu="sideMenu" :Color="Color"></listLeft>
           </el-col>
-          <el-col :span="19" class="mainRight">
-            <mainRight :rightList="rightList" :backColor="backColor"></mainRight>
+          <el-col :span="18" class="mainList">
+            <listRight :rightList="rightList" :Color="Color" v-on="$listeners" v-bind="$attrs"></listRight>
           </el-col>
         </div>
       </el-col>
-      <el-col :sapn="24" class="down">
+      <el-col :span="24" class="foot">
         <down :info="info" :backColor="backColor"></down>
       </el-col>
     </el-row>
@@ -36,26 +33,26 @@
 import top from '@/layout/index/top.vue';
 import banner from '@/layout/index/banner.vue';
 import menuInfo from '@/layout/index/menuInfo.vue';
-import listMenu from '@/layout/list/listMenu.vue';
-import kuaisu from '@/layout/index/kuaisu.vue';
-import mainRight from '@/layout/list/mainRight.vue';
+import listLeft from '@/layout/list/listLeft.vue';
+import listRight from '@/layout/list/listRight.vue';
 import down from '@/layout/index/down.vue';
 export default {
   name: 'list',
   props: {
-    backColor: null, //背景颜色
-    info: null, //站点信息
-    menuList: null, //菜单
-    rightList: null, //右侧列表
+    info: null, //头部信息
+    Color: null, //头部电话字体颜色
+    backColor: null, //导航菜单背景颜色
+    rightList: null, //列表信息
+    menuList: null, //菜单列表
+    sideMenu: null, //侧菜单内容
   },
   components: {
     top, //头部
     banner, //banner
-    menuInfo, //菜单
-    listMenu, //列表左侧导航
-    kuaisu, //快速通道
-    mainRight, //列表页右侧列表
-    down, //底部
+    menuInfo, //导航
+    listLeft, //二级左侧导航
+    listRight, //二级右侧列表
+    down, //底部信息
   },
   data: () => ({}),
   created() {},
@@ -65,12 +62,12 @@ export default {
 </script>
 
 <style lang="less" scoped>
-.w_1270 {
-  width: 1270px;
+.w_1200 {
+  width: 1200px;
   margin: 0 auto;
 }
 .top {
-  height: 40px;
+  height: 120px;
   overflow: hidden;
 }
 .banner {
@@ -80,33 +77,19 @@ export default {
 .menu {
   height: 50px;
   overflow: hidden;
-  border-bottom: 1px solid #ccc;
 }
 .main {
-  min-height: 680px;
-  background: #f6f6f6;
-}
-.mainLeft {
-  width: 246px;
-  min-height: 600px;
-  margin: 40px 18px 0 0;
-  border: 1px solid #e6e6e6;
-}
-.listMenu {
-  min-height: 56px;
-  background-color: #f9f9f9;
-  border-bottom: 1px solid #ccc;
-  margin: 0 0 10px 0;
-}
-.listLogin {
-  min-height: 300px;
+  height: 1060px;
+  margin: 50px 0 0 0;
+  overflow: hidden;
 }
-.mainRight {
-  min-height: 600px;
-  margin: 40px 0 0 0;
+.mainList {
+  width: 746px;
+  margin: 0 0 0 20px;
 }
-.down {
-  height: 135px;
+.foot {
+  height: 133px;
+  background-color: #0457c7;
   overflow: hidden;
 }
 </style>

+ 82 - 0
src/components/talk.vue

@@ -0,0 +1,82 @@
+<template>
+  <div id="talk">
+    <el-row>
+      <el-col :span="24" class="top">
+        <div class="w_1200">
+          <top :info="info" :Color="Color"></top>
+        </div>
+      </el-col>
+      <el-col :sapn="24" class="banner">
+        <banner :info="info"></banner>
+      </el-col>
+      <el-col :span="24" class="menu">
+        <menuInfo :menuList="menuList" :backColor="backColor"></menuInfo>
+      </el-col>
+      <el-col :span="24" class="main">
+        <div class="w_1200">
+          <talkInfo :talkInfo="talkInfo" :jobList="jobList"></talkInfo>
+        </div>
+      </el-col>
+      <el-col :span="24" class="foot">
+        <down :info="info" :backColor="backColor"></down>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/index/top.vue';
+import banner from '@/layout/index/banner.vue';
+import menuInfo from '@/layout/index/menuInfo.vue';
+import talkInfo from '@/layout/recuit/talkInfo.vue';
+import down from '@/layout/index/down.vue';
+export default {
+  name: 'talk',
+  props: {
+    info: null, //头部信息
+    menuList: null, //菜单
+    Color: null, //头部电话字体颜色
+    backColor: null, //导航菜单背景颜色
+    talkInfo: null,
+    jobList: null,
+  },
+  components: {
+    top, //头部
+    banner, //banner
+    menuInfo, //导航
+    talkInfo, //宣讲会详情
+    down, //底部信息
+  },
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.top {
+  height: 120px;
+  overflow: hidden;
+}
+.banner {
+  height: 300px;
+  overflow: hidden;
+}
+.menu {
+  height: 50px;
+  overflow: hidden;
+}
+.main {
+  min-height: 1100px;
+  margin: 20px 0;
+}
+.foot {
+  height: 133px;
+  overflow: hidden;
+}
+</style>

+ 1 - 0
src/layout/index/menuInfo.vue

@@ -13,6 +13,7 @@
             :router="true"
           >
             <el-menu-item index="/">网站首页</el-menu-item>
+            <el-menu-item index="/member">党员之家</el-menu-item>
             <template>
               <el-submenu index="/jobs">
                 <template slot="title">

+ 40 - 26
src/layout/index/menuInfos.vue

@@ -1,25 +1,40 @@
 <template>
   <div id="menuInfo">
     <el-row>
-      <el-col :sapn="24" class="menu">
-        <div class="w_1270">
+      <el-col :span="24" :style="`background-color:${backColor}`">
+        <div class="w_1200">
           <el-menu
-            :default-active="activeIndex"
+            :default-active="activeIndex1"
             class="el-menu-demo"
             mode="horizontal"
-            @select="handleSelect"
-            background-color="#be0101"
+            background-color="#0457c7"
             text-color="#fff"
             active-text-color="#fff"
+            :router="true"
           >
-            <el-menu-item index="1">网站首页</el-menu-item>
-            <el-menu-item index="2">政策法规</el-menu-item>
-            <el-menu-item index="3">网上大厅</el-menu-item>
-            <el-menu-item index="4">招聘信息</el-menu-item>
-            <el-menu-item index="5">就业指导</el-menu-item>
-            <el-menu-item index="6">党员之家</el-menu-item>
-            <el-menu-item index="7">调查问卷</el-menu-item>
-            <el-menu-item index="8">关于我们</el-menu-item>
+            <el-menu-item index="/">网站首页</el-menu-item>
+            <template>
+              <el-submenu index="/jobs">
+                <template slot="title">
+                  {{ jobsMenu.title }}
+                </template>
+                <el-menu-item v-for="(sub, subIndex) in jobsMenu.children" :key="subIndex" :index="sub.path">{{ sub.title }}</el-menu-item>
+              </el-submenu>
+            </template>
+            <template v-for="(item, index) in menuList">
+              <el-submenu :index="`${index}`" :key="index" v-if="item.type !== 'url' && item.type !== 'content'">
+                <template slot="title">
+                  {{ item.title }}
+                </template>
+                <template v-for="(sub, subIndex) in item.children">
+                  <el-menu-item :index="sub.path" :key="subIndex" v-if="sub.type !== 'url'">{{ sub.title }}</el-menu-item>
+                  <el-menu-item :index="``" :key="subIndex" @click="turnTo(sub.url)" v-else> {{ sub.title }}</el-menu-item>
+                </template>
+              </el-submenu>
+              <el-menu-item v-else-if="item.type === 'content'" :index="item.path" :key="index">{{ item.title }}</el-menu-item>
+              <el-menu-item v-else :index="``" :key="index" @click="turnTo(item.url)">{{ item.title }}</el-menu-item>
+            </template>
+            <el-menu-item index="/member">党员之家</el-menu-item>
           </el-menu>
         </div>
       </el-col>
@@ -28,34 +43,33 @@
 </template>
 
 <script>
+import { masterMenu } from '@/config/jobs-menu';
 export default {
   name: 'menuInfo',
-  props: {},
+  props: {
+    menuList: null,
+    backColor: null,
+  },
   components: {},
   data: () => ({
-    activeIndex: '1',
+    activeIndex1: '1',
+    jobsMenu: masterMenu,
   }),
   created() {},
   computed: {},
   methods: {
-    handleSelect(key, keyPath) {
-      // eslint-disable-next-line no-console
-      console.log(key, keyPath);
+    turnTo(url) {
+      window.open(url);
     },
   },
 };
 </script>
 
 <style lang="less" scoped>
-.w_1270 {
-  width: 1270px;
+.w_1200 {
+  width: 1200px;
   margin: 0 auto;
 }
-.menu {
-  height: 50px;
-  line-height: 50px;
-  background: #be0101;
-}
 /deep/.el-menu--horizontal > .el-menu-item {
   height: 50px;
   line-height: 50px;
@@ -69,6 +83,6 @@ export default {
 }
 /deep/.el-menu--horizontal > .el-menu-item.is-active {
   border-bottom: none;
-  background-color: #8500005f !important;
+  background-color: #1b6edd5f !important;
 }
 </style>

+ 59 - 0
src/layout/jobs-list/jobfair.vue

@@ -0,0 +1,59 @@
+<template>
+  <div id="jobfair">
+    <el-col :span="24" @click.native="$router.push({ path: '/jobfairDetail', query: { id: data.id } })">
+      <el-col :span="20" class="title">
+        <p class="textOver"><span class="dian"></span>{{ data.title }}</p>
+        <p class="textOver"><span class="dian"></span>地址:{{ data.city }}{{ data.address }}</p>
+        <p class="textOver"><span class="dian"></span>举办方:{{ data.organizer }}</p>
+      </el-col>
+      <el-col :span="4" class="date">{{ data.time }}</el-col>
+    </el-col>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'jobfair',
+  props: {
+    data: null,
+  },
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.textOver {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.dian {
+  display: inline-block;
+  width: 4px;
+  height: 4px;
+  background-color: #4f4f4f;
+  border-radius: 90px;
+  margin: 5px 8px;
+}
+.title {
+  padding: 10px 0;
+}
+.title p {
+  font-size: 16px;
+  color: #4f4f4f;
+}
+.date {
+  font-size: 14px;
+  color: #323131;
+  text-align: right;
+  padding: 10px 0;
+}
+</style>

+ 59 - 0
src/layout/jobs-list/jobinfo.vue

@@ -0,0 +1,59 @@
+<template>
+  <div id="jobinfo">
+    <el-col :span="24" @click.native="$router.push({ path: '/jobinfoDetail', query: { id: data.id } })">
+      <el-col :span="20" class="title">
+        <p class="textOver"><span class="dian"></span>{{ data.title }}</p>
+        <p class="textOver"><span class="dian"></span>发布方:{{ data.corpname }}</p>
+        <p class="textOver"><span class="dian"></span>发布站点:{{ data.schname }}</p>
+      </el-col>
+      <el-col :span="4" class="date">{{ data.time }}</el-col>
+    </el-col>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'jobinfo',
+  props: {
+    data: null,
+  },
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.textOver {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.dian {
+  display: inline-block;
+  width: 4px;
+  height: 4px;
+  background-color: #4f4f4f;
+  border-radius: 90px;
+  margin: 5px 8px;
+}
+.title {
+  padding: 10px 0;
+}
+.title p {
+  font-size: 16px;
+  color: #4f4f4f;
+}
+.date {
+  font-size: 14px;
+  color: #323131;
+  text-align: right;
+  padding: 10px 0;
+}
+</style>

+ 61 - 0
src/layout/jobs-list/post.vue

@@ -0,0 +1,61 @@
+<template>
+  <div id="post">
+    <el-col :span="24" @click.native="$router.push({ path: '/jobsDetail', query: { id: data.id } })">
+      <el-col :span="20" class="title">
+        <p class="textOver"><span class="dian"></span>{{ data.job_name }}</p>
+        <p class="textOver"><span class="dian"></span>需求人数:{{ data.job_number }}</p>
+        <p class="textOver"><span class="dian"></span>薪资:{{ data.salary.text }}</p>
+        <p class="textOver"><span class="dian"></span>福利待遇:{{ data.welfare }}</p>
+        <p class="textOver"><span class="dian"></span>职位诱惑:{{ data.job_tag }}</p>
+      </el-col>
+      <el-col :span="4" class="date">{{ data.time }}</el-col>
+    </el-col>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'post',
+  props: {
+    data: null,
+  },
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.textOver {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.dian {
+  display: inline-block;
+  width: 4px;
+  height: 4px;
+  background-color: #4f4f4f;
+  border-radius: 90px;
+  margin: 5px 8px;
+}
+.title {
+  padding: 10px 0;
+}
+.title p {
+  font-size: 16px;
+  color: #4f4f4f;
+}
+.date {
+  font-size: 14px;
+  color: #323131;
+  text-align: right;
+  padding: 10px 0;
+}
+</style>

+ 59 - 0
src/layout/jobs-list/talk.vue

@@ -0,0 +1,59 @@
+<template>
+  <div id="talk">
+    <el-col :span="24" @click.native="$router.push({ path: '/talkDetail', query: { id: data.id } })">
+      <el-col :span="20" class="title">
+        <p class="textOver"><span class="dian"></span>{{ data.title }}</p>
+        <p class="textOver"><span class="dian"></span>地址:{{ data.address }}</p>
+        <p class="textOver"><span class="dian"></span>宣讲方:{{ data.corpname }}</p>
+      </el-col>
+      <el-col :span="4" class="date">{{ data.time }}</el-col>
+    </el-col>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'talk',
+  props: {
+    data: null,
+  },
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.textOver {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.dian {
+  display: inline-block;
+  width: 4px;
+  height: 4px;
+  background-color: #4f4f4f;
+  border-radius: 90px;
+  margin: 5px 8px;
+}
+.title {
+  padding: 10px 0;
+}
+.title p {
+  font-size: 16px;
+  color: #4f4f4f;
+}
+.date {
+  font-size: 14px;
+  color: #323131;
+  text-align: right;
+  padding: 10px 0;
+}
+</style>

+ 159 - 0
src/layout/list/listRight.vue

@@ -0,0 +1,159 @@
+<template>
+  <div id="listRight">
+    <el-row>
+      <el-col :span="24" class="listRight" :style="`border-color:${Color}`">
+        <el-col :span="24" class="topInfo">
+          <el-col :span="10" class="top">
+            <p :style="`color:${Color}`"><i class="el-icon-document"></i>{{ title }}</p>
+          </el-col>
+          <el-col :span="14" class="bread">
+            <el-breadcrumb separator-class="el-icon-arrow-right">
+              <el-breadcrumb-item :to="{ path: '/' }">网站首页</el-breadcrumb-item>
+              <el-breadcrumb-item>{{ title }}列表</el-breadcrumb-item>
+            </el-breadcrumb>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="list">
+          <el-col :span="24" class="rightList" v-for="(item, index) in rightList" :key="index">
+            <talk v-if="jobs === 'talk'" :data="item"></talk>
+            <jobfair v-if="jobs === 'jobfair'" :data="item"></jobfair>
+            <jobinfo v-if="jobs === 'jobinfo'" :data="item"></jobinfo>
+            <post v-if="jobs === 'jobs'" :data="item"></post>
+          </el-col>
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="page">
+        <el-pagination @current-change="search" :current-page="currentPage" :page-size="pageSize" layout="total, prev, pager, next, jumper" :total="total">
+        </el-pagination>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import talk from '@/layout/jobs-list/talk.vue';
+import jobfair from '@/layout/jobs-list/jobfair.vue';
+import jobinfo from '@/layout/jobs-list/jobinfo.vue';
+import post from '@/layout/jobs-list/post.vue';
+
+export default {
+  name: 'listRight',
+  props: {
+    rightList: null,
+    Color: null,
+    total: { type: Number, defaultl: 0 },
+  },
+  components: {
+    talk,
+    jobfair,
+    jobinfo,
+    post,
+  },
+  data: () => ({
+    currentPage: 1,
+    pageSize: 8,
+  }),
+  created() {},
+  computed: {
+    title() {
+      let jobs = this.$route.params.jobs;
+      let returns;
+      if (jobs === 'talk') returns = '宣讲会';
+      if (jobs === 'jobfair') returns = '招聘会';
+      if (jobs === 'jobinfo') returns = '招聘信息';
+      if (jobs === 'jobs') returns = '岗位信息';
+      return returns;
+    },
+    jobs() {
+      return this.$route.params.jobs;
+    },
+  },
+  methods: {
+    search(page) {
+      let skip = (page - 1) * this.pageSize;
+      this.$emit('search', { skip: skip, limit: this.pageSize });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.textOver {
+  overflow: hidden;
+  text-overflow: ellipsis;
+  white-space: nowrap;
+}
+.listRight {
+  height: 930px;
+  border-left: 1px solid;
+}
+.topInfo {
+  height: 47px;
+  line-height: 47px;
+}
+.top {
+  padding: 0 10px;
+}
+.top p {
+  font-size: 24px;
+}
+.bread {
+  padding: 16px 0px 16px 220px;
+}
+.dian {
+  display: inline-block;
+  width: 4px;
+  height: 4px;
+  background-color: #4f4f4f;
+  border-radius: 90px;
+  margin: 5px 8px;
+}
+.list {
+  padding: 0 10px;
+  height: 883px;
+  overflow: hidden;
+}
+.rightList {
+  min-height: 110px;
+  border-bottom: 1px dashed #ccc;
+}
+.rightList .title {
+  padding: 10px 0;
+}
+.rightList .title p {
+  font-size: 16px;
+  color: #4f4f4f;
+}
+.rightList .date {
+  font-size: 14px;
+  color: #323131;
+  text-align: right;
+  padding: 10px 0;
+}
+.content {
+  padding: 0 20px;
+}
+.content p {
+  font-size: 14px;
+  color: #323131;
+  line-height: 25px;
+  overflow: hidden;
+  text-overflow: ellipsis;
+  -webkit-line-clamp: 2;
+  word-break: break-all;
+  display: -webkit-box;
+  -webkit-box-orient: vertical;
+}
+.rightList:hover .title p {
+  color: #0874ee;
+  cursor: pointer;
+}
+.page {
+  padding: 51px 0px;
+  text-align: center;
+}
+</style>

+ 109 - 0
src/layout/recuit/corpDetail.vue

@@ -0,0 +1,109 @@
+<template>
+  <div id="corpDetail">
+    <el-row>
+      <el-col :span="24" class="top">
+        <el-col :span="24">
+          <el-breadcrumb separator-class="el-icon-arrow-right">
+            <el-breadcrumb-item :to="{ path: '/' }"
+              ><i class="el-icon-s-home"></i>
+              <span>网站首页</span>
+            </el-breadcrumb-item>
+            <el-breadcrumb-item><span>企业详情</span></el-breadcrumb-item>
+          </el-breadcrumb>
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="qiye">
+        <h3 style="border-left:5px solid #0457c7;padding:0 10px;">企业信息</h3>
+        <el-col :span="24">
+          <el-col :span="3" style="padding: 25px 0;">
+            <el-image style="width:150px;height:107px;" :src="corpDetails.logo_url"></el-image>
+          </el-col>
+          <el-col :span="20">
+            <el-col :span="24" class="title">
+              <p>{{ corpDetails.corpname }}</p>
+            </el-col>
+            <el-col :span="8" class="title"> 行业:{{ corpDetails.industry }} </el-col>
+            <el-col :span="10" class="title"> 规模:{{ corpDetails.scale }} </el-col>
+            <el-col :span="8" class="title"> 城市:{{ corpDetails.province }}-{{ corpDetails.city }} </el-col>
+            <el-col :span="10" class="title"> 地址:{{ corpDetails.address }} </el-col>
+            <el-col :span="8" class="title"> 联系电话:{{ corpDetails.job_tel }} </el-col>
+            <el-col :span="24" class="title"> 邮箱:{{ corpDetails.job_email }} </el-col>
+            <el-col :span="24" class="title"> 注册资金:{{ corpDetails.reg_capital }} </el-col>
+            <el-col :span="24" class="title">
+              企业标签:<el-tag v-for="(item, index) in corpDetails.tags" :key="index">{{ item }}</el-tag></el-col
+            >
+          </el-col>
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="jieshao">
+        <h3 style="border-left:5px solid #0457c7;padding:0 10px;">企业介绍</h3>
+        <el-col :span="24">
+          <p>{{ corpDetails.intro }}</p>
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="zhiwei">
+        <h3 style="border-left:5px solid #0457c7;padding:0 10px;">招聘职位</h3>
+        <el-col :span="24">
+          <el-row class="rowStyle" v-for="(item, index) in jobslist" :key="index" :gutter="10">
+            <el-col :span="16">
+              <el-link class="job__name" :underline="false" @click="turnToJobs(item.id)">
+                <span title="查看职位">{{ item.job_name ? item.job_name : '' }}</span>
+              </el-link>
+            </el-col>
+            <el-col class="money" :span="4">
+              {{ item.salary ? item.salary.text : '' }}
+            </el-col>
+            <el-col :span="4" style="text-align:center;"> 招聘人数:{{ item.job_number }} </el-col>
+            <el-col :span="16"> 招聘专业 : {{ item.zy_req ? item.zy_req : '' }} </el-col>
+            <el-col :span="8"> {{ item.xl_req ? item.xl_req : '' }} | {{ item.city ? item.city : '' }} </el-col>
+          </el-row>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'corpDetail',
+  props: {
+    corpDetails: null,
+    jobslist: null,
+  },
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {
+    turnToJobs(id) {
+      let query = {};
+      if (this.origin) query.origin = this.origin;
+      if (this.type) query.type = this.type;
+      query.id = id;
+      this.$router.push({ path: '/jobsDetail', query: query });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.title {
+  font-size: 14px;
+  color: #333;
+  padding: 2px 10px;
+}
+.jieshao p {
+  padding: 0 15px;
+}
+.rowStyle {
+  padding: 10px;
+  border-bottom: 1px dashed #ccc;
+}
+.job__name {
+  font-size: 18px;
+}
+</style>

+ 44 - 0
src/layout/recuit/corpInfo.vue

@@ -0,0 +1,44 @@
+<template>
+  <div id="corpInfo">
+    <!-- v-if="corpsInfo && corpsInfo.id" -->
+    <el-row style="padding: 35px 15px;">
+      <el-col>
+        <el-image style="width:280px;height:80px;" :src="corpsInfo.logo_url"></el-image>
+      </el-col>
+      <el-col style="padding-bottom: 10px; border-bottom: 1px dashed #ddd;">
+        <el-link :underline="false" @click="$router.push({ path: '/corp', query: { id: corpsInfo.id } })">
+          <span style="font-size: 14px; color: #0457c7;">{{ corpsInfo.corpname }}</span>
+        </el-link>
+      </el-col>
+      <el-col class="right_Detail" style="padding-top: 10px;">
+        <el-row>
+          <el-col>
+            <span>邮箱:{{ corpsInfo.job_email }}</span>
+          </el-col>
+          <el-col>
+            <span>地址:{{ corpsInfo.address }}</span>
+          </el-col>
+          <el-col>
+            <span>电话:{{ corpsInfo.tel }}</span>
+          </el-col>
+        </el-row>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'corpInfo',
+  props: {
+    corpsInfo: null,
+  },
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped></style>

+ 122 - 0
src/layout/recuit/jobfairInfo.vue

@@ -0,0 +1,122 @@
+<template>
+  <div id="jobfairInfo">
+    <el-row>
+      <el-col :span="24" class="top">
+        <el-col :span="24">
+          <el-breadcrumb separator-class="el-icon-arrow-right">
+            <el-breadcrumb-item :to="{ path: '/' }"
+              ><i class="el-icon-s-home"></i>
+              <span>网站首页</span>
+            </el-breadcrumb-item>
+            <el-breadcrumb-item><span>招聘会</span></el-breadcrumb-item>
+            <el-breadcrumb-item class="webDetail">详情</el-breadcrumb-item>
+          </el-breadcrumb>
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="talk">
+        <el-col :span="24" class="talkTop">
+          <h3 style="border-left:5px solid #0457c7;padding:0 10px;">招聘会信息</h3>
+          <el-col :span="24" class="talkTopInfo">
+            <p>
+              {{ jobfairInfo && jobfairInfo.title ? jobfairInfo.title : '2019年11月30日招聘会'
+              }}<el-button type="primary" icon="el-icon-search" class="btn" @click="turnTo">工商查询</el-button>
+            </p>
+          </el-col>
+          <el-col :span="24" class="talkTopInfo">
+            <p>时间:{{ jobfairInfo && jobfairInfo.time ? jobfairInfo.time : '2019-11-30' }}</p>
+          </el-col>
+          <el-col :span="24" class="talkTopInfo">
+            <p>地点:{{ jobfairInfo && jobfairInfo.address ? jobfairInfo.address : '不知道' }}</p>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="talkJobs">
+          <h3 style="border-left:5px solid #0457c7;padding:0 10px;">招聘会相关</h3>
+          <el-col :span="24">
+            <el-tabs v-model="tabs" type="card">
+              <el-tab-pane label="企业列表" name="corp">
+                <el-table :data="corpList" style="width: 100%" stripe :show-header="false">
+                  <el-table-column label="企业" prop="corpname">
+                    <template v-slot="scoped">
+                      <el-link @click="$router.push({ path: '/corp', query: { id: scoped.row.corpid } })">{{ scoped.row.corpname }}</el-link>
+                    </template>
+                  </el-table-column>
+                </el-table>
+              </el-tab-pane>
+              <el-tab-pane label="招聘职位" name="jobs">
+                <el-row class="rowStyle" v-for="(item, index) in jobsList" :key="index" :gutter="10">
+                  <el-col :span="16">
+                    <el-link class="job__name" :underline="false" @click="turnToJobs(item.id)">
+                      <span title="查看职位">{{ item.job_name ? item.job_name : '' }}</span>
+                    </el-link>
+                  </el-col>
+                  <el-col class="money" :span="4">
+                    {{ item.salary ? item.salary.text : '' }}
+                  </el-col>
+                  <el-col :span="4" style="text-align:center;"> {{ item.job_number }}人</el-col>
+                  <el-col :span="16"> 招聘专业 : {{ item.zy_req ? item.zy_req : '' }} </el-col>
+                  <el-col :span="8"> {{ item.xl_req ? item.xl_req : '' }} | {{ item.city ? item.city : '' }} </el-col>
+                </el-row>
+              </el-tab-pane>
+            </el-tabs>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import _ from 'lodash';
+export default {
+  name: 'jobfairInfo',
+  props: {
+    jobfairInfo: null,
+    corpList: null,
+    jobsList: null,
+  },
+  components: {},
+  data: () => ({
+    tabs: 'corp',
+  }),
+  created() {},
+  computed: {},
+  methods: {
+    turnTo() {
+      window.open('https://www.tianyancha.com/');
+    },
+    turnToJobs(id) {
+      let query = {};
+      if (this.origin) query.origin = this.origin;
+      if (this.type) query.type = this.type;
+      query.id = id;
+      this.$router.push({ path: '/jobsDetail', query: query });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.btn {
+  margin: 0 20px;
+}
+.top {
+  padding: 10px 0;
+}
+.talkTopInfo {
+  padding: 5px 15px;
+}
+.talkJianjie p {
+  padding: 0 15px;
+}
+.talkJobs .rowStyle {
+  padding: 10px;
+  border-bottom: 1px dashed #ccc;
+}
+.job__name {
+  font-size: 18px;
+}
+</style>

+ 101 - 0
src/layout/recuit/jobinfoInfo.vue

@@ -0,0 +1,101 @@
+<template>
+  <div id="jobinfoInfo">
+    <el-row>
+      <el-col :span="24">
+        <el-breadcrumb separator-class="el-icon-arrow-right">
+          <el-breadcrumb-item :to="{ path: '/' }"
+            ><i class="el-icon-s-home"></i>
+            <span>网站首页</span>
+          </el-breadcrumb-item>
+          <el-breadcrumb-item><span>招聘信息详情</span></el-breadcrumb-item>
+        </el-breadcrumb>
+      </el-col>
+      <el-col :span="24" class="title">
+        <p>{{ jobinfoInfo.title }}</p>
+      </el-col>
+      <el-col :span="24" class="date"> 发布时间:{{ jobinfoInfo | getDate }} </el-col>
+      <el-col :span="24" class="content">
+        <p v-html="jobinfoInfo.content"></p>
+      </el-col>
+      <el-col :span="24" class="zhiwei">
+        <h3 style="border-left:5px solid #0457c7;padding:0 10px;">招聘职位</h3>
+        <el-col :span="24">
+          <el-row class="rowStyle" v-for="(item, index) in jobslist" :key="index" :gutter="10">
+            <el-col :span="16">
+              <el-link class="job__name" :underline="false" @click="turnToJobs(item.id)">
+                <span title="查看职位">{{ item.job_name ? item.job_name : '' }}</span>
+              </el-link>
+            </el-col>
+            <el-col class="money" :span="4">
+              {{ item.salary ? item.salary.text : '' }}
+            </el-col>
+            <el-col :span="4" style="text-align:center;"> 招聘人数:{{ item.job_number }} </el-col>
+            <el-col :span="16"> 招聘专业 : {{ item.zy_req ? item.zy_req : '' }} </el-col>
+            <el-col :span="8"> {{ item.xl_req ? item.xl_req : '' }} | {{ item.city ? item.city : '' }} </el-col>
+          </el-row>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import _ from 'lodash';
+export default {
+  name: 'jobinfoInfo',
+  props: {
+    jobinfoInfo: null,
+    jobslist: null,
+  },
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {
+    turnToJobs(id) {
+      let query = {};
+      if (this.origin) query.origin = this.origin;
+      if (this.type) query.type = this.type;
+      query.id = id;
+      this.$router.push({ path: '/jobsDetail', query: query });
+    },
+  },
+  filters: {
+    getDate(data) {
+      let date = _.get(data, `meta.createdAt`);
+      if (date) date = new Date(date).toLocaleDateString();
+      else date = '';
+      return date;
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.title {
+  color: #333;
+  font-size: 18px;
+  font-weight: 900;
+  padding: 10px 5px;
+}
+.date {
+  font-size: 16px;
+  padding: 5px 0 10px 5px;
+  border-bottom: 1px dashed #ccc;
+}
+.content {
+  padding: 10px 0;
+}
+/deep/.content p p {
+  font-size: 16px;
+  text-indent: 2rem;
+}
+.rowStyle {
+  padding: 10px;
+  border-bottom: 1px dashed #ccc;
+}
+</style>

+ 103 - 0
src/layout/recuit/jobsInfo.vue

@@ -0,0 +1,103 @@
+<template>
+  <div id="jobInfo">
+    <el-row>
+      <el-col :span="24" class="top">
+        <el-col :span="24">
+          <el-breadcrumb separator-class="el-icon-arrow-right">
+            <el-breadcrumb-item :to="{ path: '/' }"
+              ><i class="el-icon-s-home"></i>
+              <span>网站首页</span>
+            </el-breadcrumb-item>
+            <el-breadcrumb-item><span>招聘职位</span></el-breadcrumb-item>
+            <el-breadcrumb-item class="webDetail">详情</el-breadcrumb-item>
+          </el-breadcrumb>
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="jobInfo">
+        <!-- <span v-if="jobInfo && jobInfo.id"> -->
+        <el-card class="cards">
+          {{ jobInfo.job_name }}
+        </el-card>
+        <el-row style="margin-top;1rem;">
+          <el-col :span="22" style="padding:10px;">
+            <span style="color:#f40;font-size:18px;">
+              <i class="el-icon-coin"></i>
+              <!-- {{ jobInfo.salary.text }} -->
+              {{ jobInfo | getSalary }}
+            </span>
+            <span class="row_icon">
+              <i class="el-icon-location"></i>
+              {{ jobInfo.city }}
+            </span>
+            <span class="row_icon">
+              <i class="el-icon-collection">{{ jobInfo.xl_req }}</i>
+            </span>
+          </el-col>
+        </el-row>
+        <el-row>
+          <el-col style="padding: 5px 10px;" :span="24">
+            职位诱惑: {{ jobInfo && jobInfo.job_tag ? jobInfo.job_tag : '绩效奖金 岗前培训 节日礼物 扁平管理 年度旅游 岗位晋升 带薪年假 餐补 股票期权 ' }}
+          </el-col>
+          <el-col style="padding:5px 10px;" :span="24"> 薪酬福利: {{ jobInfo && jobInfo.welfare ? jobInfo.welfare : '五险一金 ' }} </el-col>
+          <el-col style="padding:5px 10px;" :span="24"> 截止时间: {{ jobInfo && jobInfo.end_date ? jobInfo.end_date : '2017年11月22日 ' }} </el-col>
+        </el-row>
+        <el-col :span="24" class="miaoshu">
+          <h3 style="border-left:5px solid #0457c7;padding:0 10px;">职位描述</h3>
+          <el-col :span="24">
+            <p>{{ jobInfo.job_desc }}</p>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="jieshao">
+          <h3 style="border-left:5px solid #0457c7;padding:0 10px;">单位介绍</h3>
+          <el-col>
+            <p>{{ corpsInfo.intro }}</p>
+          </el-col>
+        </el-col>
+        <!-- </span> -->
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import _ from 'lodash';
+export default {
+  name: 'jobInfo',
+  props: {
+    jobInfo: null,
+    corpsInfo: null,
+  },
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {},
+  filters: {
+    getSalary(data) {
+      return _.get(data, `salary.text`);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.top {
+  padding: 10px 0;
+}
+.cards {
+  padding: 10px 0;
+  background: #0457c7;
+  color: #fff;
+  font-size: 20px;
+}
+.miaoshu p {
+  padding: 10px;
+}
+.jieshao p {
+  padding: 10px;
+}
+</style>

+ 119 - 0
src/layout/recuit/talkInfo.vue

@@ -0,0 +1,119 @@
+<template>
+  <div id="talkInfo">
+    <el-row>
+      <el-col :span="24" class="top">
+        <el-col :span="24">
+          <el-breadcrumb separator-class="el-icon-arrow-right">
+            <el-breadcrumb-item :to="{ path: '/' }"
+              ><i class="el-icon-s-home"></i>
+              <span>网站首页</span>
+            </el-breadcrumb-item>
+            <el-breadcrumb-item><span>宣讲会</span></el-breadcrumb-item>
+            <el-breadcrumb-item class="webDetail">详情</el-breadcrumb-item>
+          </el-breadcrumb>
+        </el-col>
+      </el-col>
+      <el-col :span="24" class="fenxiang">
+        <share></share>
+      </el-col>
+      <el-col :span="24" class="talk">
+        <el-col :span="24" class="talkTop">
+          <h3 style="border-left:5px solid #0457c7;padding:0 10px;">宣讲会信息</h3>
+          <el-col :span="24" class="talkTopInfo">
+            <p>
+              宣讲单位:{{ talkInfo && talkInfo.title ? talkInfo.title : '测试单位'
+              }}<el-button type="primary" icon="el-icon-search" class="btn" @click="turnTo">工商查询</el-button>
+            </p>
+          </el-col>
+          <el-col :span="24" class="talkTopInfo">
+            <p>宣讲时间:{{ talkInfo && talkInfo.time ? talkInfo.time : '测试单位' }}</p>
+          </el-col>
+          <el-col :span="24" class="talkTopInfo">
+            <p>宣讲地点:{{ talkInfo && talkInfo.address ? talkInfo.address : '测试单位' }}</p>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="talkPro">
+          <h3 style="border-left:5px solid #0457c7;padding:0 10px;">招聘简章</h3>
+          <p v-html="talkInfo && talkInfo.content ? talkInfo.content : ''"></p>
+        </el-col>
+        <el-col :span="24" class="talkJobs">
+          <h3 style="border-left:5px solid #0457c7;padding:0 10px;">招聘职位</h3>
+          <el-row class="rowStyle" v-for="(item, index) in jobList" :key="index" :gutter="10">
+            <el-col :span="16">
+              <el-link class="job__name" :underline="false" @click="turnToJobs(item.id)">
+                <span title="查看职位">{{ item.job_name ? item.job_name : '' }}</span>
+              </el-link>
+            </el-col>
+            <el-col class="money" :span="4">
+              {{ item.salary ? item.salary.text : '' }}
+            </el-col>
+            <el-col :span="4" style="text-align:center;"> {{ item.job_number }}人</el-col>
+            <el-col :span="16"> 招聘专业 : {{ item.zy_req ? item.zy_req : '' }} </el-col>
+            <el-col :span="8"> {{ item.xl_req ? item.xl_req : '' }} | {{ item.city ? item.city : '' }} </el-col>
+          </el-row>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import share from '@/layout/share.vue';
+export default {
+  name: 'talkInfo',
+  props: {
+    talkInfo: null,
+    jobList: null,
+  },
+  components: {
+    share,
+  },
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {
+    turnTo() {
+      window.open('https://www.tianyancha.com/');
+    },
+    turnToJobs(id) {
+      let query = {};
+      if (this.origin) query.origin = this.origin;
+      if (this.type) query.type = this.type;
+      query.id = id;
+      this.$router.push({ path: '/jobsDetail', query: query });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.btn {
+  margin: 0 20px;
+}
+.top {
+  padding: 10px 0;
+}
+.fenxiang {
+  padding: 10px 0;
+}
+.talkTopInfo {
+  padding: 5px 15px;
+}
+.talkJianjie p {
+  padding: 0 15px;
+}
+.talkPro p {
+  padding: 0 15px;
+}
+.talkJobs .rowStyle {
+  padding: 10px;
+  border-bottom: 1px dashed #ccc;
+}
+.job__name {
+  font-size: 18px;
+}
+</style>

+ 26 - 1
src/router/index.js

@@ -41,9 +41,34 @@ export default new Router({
       component: () => import('../views/newsList.vue'),
     },
     {
-      path: '/memberList/:type/:id',
+      path: '/memberList',
       name: 'memberList',
       component: () => import('../views/memberList.vue'),
     },
+    {
+      path: '/talkDetail',
+      name: 'talk',
+      component: () => import('../views/recruit/talk.vue'),
+    },
+    {
+      path: '/jobfairDetail',
+      name: 'jobfairDetail',
+      component: () => import('../views/recruit/jobfair.vue'),
+    },
+    {
+      path: '/jobinfoDetail',
+      name: 'jobinfoDetail',
+      component: () => import('../views/recruit/jobinfo.vue'),
+    },
+    {
+      path: '/jobsDetail',
+      name: 'jobsDetail',
+      component: () => import('../views/recruit/jobs.vue'),
+    },
+    {
+      path: '/corp',
+      name: 'corp',
+      component: () => import('../views/recruit/corp.vue'),
+    },
   ],
 });

+ 16 - 21
src/views/list.vue

@@ -1,14 +1,23 @@
 <template>
   <div id="list">
-    <list-detail :backColor="backColor" :menuList="menu" :sideMenu="sideMenu" :info="site" :rightList="rightList"></list-detail>
+    <list-detail
+      :menuList="menu"
+      :sideMenu="sideMenu"
+      :info="site"
+      :backColor="backColor"
+      :Color="Color"
+      :rightList="list"
+      :total="total"
+      @search="search"
+    ></list-detail>
   </div>
 </template>
 
 <script>
-import listDetail from '@/components/list.vue';
-import { masterMenu } from '@/config/jobs-menu';
 import { mapActions, mapState } from 'vuex';
 import _ from 'lodash';
+import { masterMenu } from '@/config/jobs-menu';
+import listDetail from '@/components/list.vue';
 export default {
   metaInfo() {
     return {
@@ -22,27 +31,13 @@ export default {
   },
   data: () => ({
     backColor: '#0457c7',
-    info: {
-      title: '吉林省高等学校毕业生就业信息网',
-      english: 'Jilin University Graduate Employment Guidance Center',
-      banner: require('@/assets/banner.jpg'),
-      logo: require('@/assets/logo.png'),
-      copyright: '吉ICP备09006292号-1 Copyright 2019 版权所有 吉林省高等学校毕业生就业指导中心 All Rights Reserved',
-    },
-    rightList: [
-      {
-        title: '省教育厅成功举办吉林省高校服务地方经济发展“双对接”专项行动推进会暨 “生根吉林 ”应用型人才招聘会',
-        date: '2019-12-11',
-      },
-      {
-        title: '十二条数据显示',
-        date: '2019-12-11',
-      },
-    ],
+    Color: '#0457c7',
     menu: [],
     sideMenu: masterMenu.children,
     site: {},
     siteTitle: '',
+    total: 0,
+    list: [],
   }),
   async created() {
     await this.toGetSite(); //获取主站信息
@@ -156,4 +151,4 @@ export default {
 };
 </script>
 
-<style lang="scss" scoped></style>
+<style lang="less" scoped></style>

+ 130 - 0
src/views/recruit/corp.vue

@@ -0,0 +1,130 @@
+<template>
+  <div id="jobs">
+    <corp-detail :info="site" :menuList="menu" :backColor="backColor" :Color="Color" :corpDetails="corpInfo" :jobslist="jobList"></corp-detail>
+  </div>
+</template>
+
+<script>
+import corpDetail from '@/components/corp.vue';
+import { mapActions, mapState } from 'vuex';
+import _ from 'lodash';
+export default {
+  metaInfo() {
+    return {
+      title: this.siteTitle ? this.siteTitle : '就业信息网',
+    };
+  },
+  name: 'corp',
+  props: {},
+  components: {
+    corpDetail,
+  },
+  data: () => ({
+    corpInfo: {},
+    jobList: [],
+    backColor: '#0457c7',
+    Color: '#0457c7',
+    menu: [],
+    site: {},
+    siteTitle: '',
+  }),
+  async created() {
+    await this.toGetSite(); //获取主站信息
+    await this.loadMenu(); //获取菜单信息
+    this.search();
+  },
+  computed: {},
+  methods: {
+    ...mapActions(['getSite', 'getMenu', 'getColumn', 'getPosts', 'getCorp']),
+    async search() {
+      if (!this.$route.query.id) return;
+      let result = await this.getCorp({ type: 'component', data: { corpid: this.$route.query.id } });
+      if (`${result.errcode}` === '0') {
+        this.$set(this, 'corpInfo', result.data);
+        this.$set(this.corpInfo, `id`, this.$route.query.id);
+        this.searchJobs();
+      } else {
+        this.$message.error(result.errmsg ? result.errmsg : 'error');
+      }
+    },
+    async searchJobs(query) {
+      let result = await this.getPosts({ type: 'list', data: { corpid: this.$route.query.id, ...query } });
+      if (`${result.errcode}` === '0') {
+        this.$set(this, `jobList`, result.data);
+      }
+    },
+    //站点信息
+    async toGetSite() {
+      let site = sessionStorage.getItem('site');
+      if (!site) {
+        let result = await this.getSite({ type: 'search' });
+        if (result.errcode === 0) {
+          sessionStorage.setItem('site', JSON.stringify(result.data));
+          if (_.get(result.data, `custom`)) {
+            let item = result.custom;
+          }
+          this.$set(this, `site`, result.data);
+          this.$set(this, `siteTitle`, this.site.name);
+        }
+      } else {
+        this.$set(this, `site`, JSON.parse(site));
+        this.$set(this, `siteTitle`, this.site.name);
+        let arr = this.site;
+        if (arr.custom) {
+          let item = arr.custom;
+        }
+      }
+    },
+    //菜单
+    async loadMenu() {
+      let menu = sessionStorage.getItem('menu');
+      if (menu) {
+        this.$set(this, `menu`, JSON.parse(menu));
+        await this.finishedMenu();
+      } else this.toGetMenu();
+    },
+    async toGetMenu() {
+      let result = await this.getMenu({ type: `list` });
+      if (result.errcode === 0) {
+        sessionStorage.setItem('menu', JSON.stringify(result.data));
+        this.$set(this, `menu`, result.data);
+        this.finishedMenu();
+      }
+    },
+    async finishedMenu() {
+      let menus = JSON.parse(JSON.stringify(this.menu));
+      for (const item of menus) {
+        if (item.type === 'content') {
+          item.path = `/detail/${item.content_id}`;
+        } else if (item.type !== 'url') {
+          let res = await this.completeMenu(item);
+          item.children = res;
+        }
+      }
+      this.$set(this, `menu`, menus);
+    },
+    async completeMenu(item) {
+      let result = await this.getColumn({
+        type: `list`,
+        data: { parent_id: item.id },
+      });
+      if (result.errcode === 0) {
+        let columns = result.data;
+        for (const col of columns) {
+          if (col.type === 'content') {
+            col.path = `/detail/${col.content_id}`;
+          } else if (col.type !== 'url') {
+            col.path = `/newsList/menu/${col.id}?title=${col.title}`;
+            if (col.parent.includes('党员')) {
+              col.path = `/memberList/menu/${col.id}?title=${col.title}`;
+            }
+          }
+        }
+        return columns;
+      }
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 165 - 0
src/views/recruit/jobfair.vue

@@ -0,0 +1,165 @@
+<template>
+  <div id="jobfair">
+    <jobfair-detail
+      :menuList="menu"
+      :sideMenu="sideMenu"
+      :info="site"
+      :backColor="backColor"
+      :Color="Color"
+      :jobfairInfo="jobfairInfo"
+      :corpList="corpList"
+      :jobsList="jobsList"
+    ></jobfair-detail>
+  </div>
+</template>
+
+<script>
+import jobfairDetail from '@/components/jobfair.vue';
+import { mapActions, mapState } from 'vuex';
+import _ from 'lodash';
+export default {
+  metaInfo() {
+    return {
+      title: this.siteTitle ? this.siteTitle : '就业信息网',
+    };
+  },
+  name: 'jobfair',
+  props: {},
+  components: {
+    jobfairDetail,
+  },
+  data: () => ({
+    info: {
+      src: require('@/assets/logo.png'),
+      phone: '0431-12345678',
+      banner: require('@/assets/banner.png'),
+      address: '办公地址:长春市经济技术开发区金川街151号吉林省高等学校毕业生就业指导中心2楼一站式办公大厅',
+      email: '邮编:130012',
+      gongjiao: '公交线路:乘坐120路、227路、20路、260路、80路、130路、281路、154路、190路、125路公交北方市场下车,北方市场南门南行200米。',
+      mobile: '业务咨询电话:0431-84657570 0431-84657571;',
+      date: '办公时间:周一至周五,法定假日不对外办公。',
+      copyright: '吉ICP备09006292号-1 Copyright 2013 版权所有 吉林省高等学校毕业生就业指导中心 All Rights Reserved',
+    },
+    jobfairInfo: {},
+    corpList: [],
+    jobsList: [],
+    list: [],
+    menu: [],
+    site: {},
+    sideMenu: [],
+    siteTitle: '',
+    backColor: '#0457c7',
+    Color: '#0457c7',
+  }),
+  async created() {
+    await this.toGetSite(); //获取主站信息
+    await this.loadMenu(); //获取菜单信息
+    this.search();
+  },
+  computed: {},
+  methods: {
+    ...mapActions(['getSite', 'getMenu', 'getColumn', 'getJobfair', 'fairInfoOperation']),
+    async search() {
+      //1直接拿着参数发送请求
+      let result = await this.getJobfair({ type: 'fetch', data: { id: this.$route.query.id } });
+      if (`${result.errcode}` === '0') {
+        this.$set(this, `jobfairInfo`, result.data);
+        this.searchCorps();
+      } else {
+        this.$message.error(result.errmsg ? result.errmsg : 'error');
+      }
+    },
+    async searchCorps() {
+      let result = await this.fairInfoOperation({ type: 'searchCorp', data: { fairid: this.$route.query.id, skip: 0, limit: this.$limit } });
+      if (`${result.errcode}` === '0') {
+        this.$set(this, `corpList`, result.data);
+        this.searchJobs();
+      }
+    },
+    async searchJobs() {
+      let jobsList = [];
+      if (this.corpList.length > 0) {
+        for (const item of this.corpList) {
+          let result = await this.fairInfoOperation({ type: `searchJobs`, data: { id: item.id } });
+          if (`${result.errcode}` === '0') {
+            result.data.map(item => jobsList.push(item));
+          }
+        }
+        this.$set(this, `jobsList`, jobsList);
+      }
+    },
+    //站点信息
+    async toGetSite() {
+      let site = sessionStorage.getItem('site');
+      if (!site) {
+        let result = await this.getSite({ type: 'search' });
+        if (result.errcode === 0) {
+          sessionStorage.setItem('site', JSON.stringify(result.data));
+          if (_.get(result.data, `custom`)) {
+            let item = result.custom;
+          }
+          this.$set(this, `site`, result.data);
+          this.$set(this, `siteTitle`, this.site.name);
+        }
+      } else {
+        this.$set(this, `site`, JSON.parse(site));
+        this.$set(this, `siteTitle`, this.site.name);
+        let arr = this.site;
+        if (arr.custom) {
+          let item = arr.custom;
+        }
+      }
+    },
+    //菜单
+    async loadMenu() {
+      let menu = sessionStorage.getItem('menu');
+      if (menu) {
+        this.$set(this, `menu`, JSON.parse(menu));
+        await this.finishedMenu();
+      } else this.toGetMenu();
+    },
+    async toGetMenu() {
+      let result = await this.getMenu({ type: `list` });
+      if (result.errcode === 0) {
+        sessionStorage.setItem('menu', JSON.stringify(result.data));
+        this.$set(this, `menu`, result.data);
+        this.finishedMenu();
+      }
+    },
+    async finishedMenu() {
+      let menus = JSON.parse(JSON.stringify(this.menu));
+      for (const item of menus) {
+        if (item.type === 'content') {
+          item.path = `/detail/${item.content_id}`;
+        } else if (item.type !== 'url') {
+          let res = await this.completeMenu(item);
+          item.children = res;
+        }
+      }
+      this.$set(this, `menu`, menus);
+    },
+    async completeMenu(item) {
+      let result = await this.getColumn({
+        type: `list`,
+        data: { parent_id: item.id },
+      });
+      if (result.errcode === 0) {
+        let columns = result.data;
+        for (const col of columns) {
+          if (col.type === 'content') {
+            col.path = `/detail/${col.content_id}`;
+          } else if (col.type !== 'url') {
+            col.path = `/newsList/menu/${col.id}?title=${col.title}`;
+            if (col.parent.includes('党员')) {
+              col.path = `/memberList/menu/${col.id}?title=${col.title}`;
+            }
+          }
+        }
+        return columns;
+      }
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 136 - 0
src/views/recruit/jobinfo.vue

@@ -0,0 +1,136 @@
+<template>
+  <div id="jobinfo">
+    <jobinfo-detail :info="site" :menuList="menu" :backColor="backColor" :Color="Color" :jobinfoInfo="jobInfo" :jobslist="jobList"></jobinfo-detail>
+  </div>
+</template>
+
+<script>
+import jobinfoDetail from '@/components/jobinfo.vue';
+import { mapActions, mapState } from 'vuex';
+import _ from 'lodash';
+export default {
+  metaInfo() {
+    return {
+      title: this.siteTitle ? this.siteTitle : '就业信息网',
+    };
+  },
+  name: 'jobinfo',
+  props: {},
+  components: {
+    jobinfoDetail,
+  },
+  data: () => ({
+    backColor: '#0457c7',
+    Color: '#0457c7',
+    jobInfo: {},
+    jobList: [],
+    menu: [],
+    site: {},
+    siteTitle: '',
+  }),
+  async created() {
+    await this.toGetSite(); //获取主站信息
+    await this.loadMenu(); //获取菜单信息
+    this.search();
+  },
+  computed: {},
+  methods: {
+    ...mapActions(['getSite', 'getMenu', 'getColumn', 'getPosts', 'getJobInfo']),
+    async search() {
+      //1直接拿着参数发送请求
+      let result = await this.getJobInfo({ type: 'search', data: { id: this.$route.query.id } });
+      if (`${result.errcode}` === '0') {
+        //给this=>vue的实例下在中的list属性,赋予result.data的值
+        this.$set(this, `jobInfo`, result.data);
+        this.searchJobs();
+      } else {
+        this.$message.error(result.errmsg ? result.errmsg : 'error');
+      }
+    },
+    async searchJobs() {
+      let result;
+      let jobIds = this.jobInfo.jobs.length > 0 ? this.jobInfo.jobs : [];
+      let jobList = [];
+      for (const item of jobIds) {
+        result = await this.getPosts({ type: 'fetch', data: { id: item } });
+        if (`${result.errcode}` === '0') {
+          jobList.push(result.data);
+        }
+      }
+      this.$set(this, `jobList`, jobList);
+    },
+    //站点信息
+    async toGetSite() {
+      let site = sessionStorage.getItem('site');
+      if (!site) {
+        let result = await this.getSite({ type: 'search' });
+        if (result.errcode === 0) {
+          sessionStorage.setItem('site', JSON.stringify(result.data));
+          if (_.get(result.data, `custom`)) {
+            let item = result.custom;
+          }
+          this.$set(this, `site`, result.data);
+          this.$set(this, `siteTitle`, this.site.name);
+        }
+      } else {
+        this.$set(this, `site`, JSON.parse(site));
+        this.$set(this, `siteTitle`, this.site.name);
+        let arr = this.site;
+        if (arr.custom) {
+          let item = arr.custom;
+        }
+      }
+    },
+    //菜单
+    async loadMenu() {
+      let menu = sessionStorage.getItem('menu');
+      if (menu) {
+        this.$set(this, `menu`, JSON.parse(menu));
+        await this.finishedMenu();
+      } else this.toGetMenu();
+    },
+    async toGetMenu() {
+      let result = await this.getMenu({ type: `list` });
+      if (result.errcode === 0) {
+        sessionStorage.setItem('menu', JSON.stringify(result.data));
+        this.$set(this, `menu`, result.data);
+        this.finishedMenu();
+      }
+    },
+    async finishedMenu() {
+      let menus = JSON.parse(JSON.stringify(this.menu));
+      for (const item of menus) {
+        if (item.type === 'content') {
+          item.path = `/detail/${item.content_id}`;
+        } else if (item.type !== 'url') {
+          let res = await this.completeMenu(item);
+          item.children = res;
+        }
+      }
+      this.$set(this, `menu`, menus);
+    },
+    async completeMenu(item) {
+      let result = await this.getColumn({
+        type: `list`,
+        data: { parent_id: item.id },
+      });
+      if (result.errcode === 0) {
+        let columns = result.data;
+        for (const col of columns) {
+          if (col.type === 'content') {
+            col.path = `/detail/${col.content_id}`;
+          } else if (col.type !== 'url') {
+            col.path = `/newsList/menu/${col.id}?title=${col.title}`;
+            if (col.parent.includes('党员')) {
+              col.path = `/memberList/menu/${col.id}?title=${col.title}`;
+            }
+          }
+        }
+        return columns;
+      }
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 151 - 0
src/views/recruit/jobs.vue

@@ -0,0 +1,151 @@
+<template>
+  <div id="jobs">
+    <jobs-detail :info="site" :menuList="menu" :backColor="backColor" :Color="Color" :jobInfo="jobInfo" :corpsInfo="corpInfo"></jobs-detail>
+  </div>
+</template>
+
+<script>
+import jobsDetail from '@/components/jobs.vue';
+import { mapActions, mapState } from 'vuex';
+import _ from 'lodash';
+export default {
+  metaInfo() {
+    return {
+      title: this.siteTitle ? this.siteTitle : '就业信息网',
+    };
+  },
+  name: 'jobs',
+  props: {},
+  components: {
+    jobsDetail,
+  },
+  data: () => ({
+    info: {
+      src: require('@/assets/logo.png'),
+      phone: '0431-12345678',
+      banner: require('@/assets/banner.png'),
+      address: '办公地址:长春市经济技术开发区金川街151号吉林省高等学校毕业生就业指导中心2楼一站式办公大厅',
+      email: '邮编:130012',
+      gongjiao: '公交线路:乘坐120路、227路、20路、260路、80路、130路、281路、154路、190路、125路公交北方市场下车,北方市场南门南行200米。',
+      mobile: '业务咨询电话:0431-84657570 0431-84657571;',
+      date: '办公时间:周一至周五,法定假日不对外办公。',
+      copyright: '吉ICP备09006292号-1 Copyright 2013 版权所有 吉林省高等学校毕业生就业指导中心 All Rights Reserved',
+    },
+    jobInfo: {},
+    corpsInfo: {
+      logo_url: require('@/assets/banner.png'),
+      corpname: '不知道',
+      job_email: '不知道',
+      address: '不知道',
+      tel: '不知道',
+    },
+    corpInfo: {},
+    backColor: '#0457c7',
+    Color: '#0457c7',
+    menu: [],
+    site: {},
+    siteTitle: '',
+  }),
+  async created() {
+    await this.toGetSite(); //获取主站信息
+    await this.loadMenu(); //获取菜单信息
+    this.search();
+  },
+  computed: {},
+  methods: {
+    ...mapActions(['getSite', 'getMenu', 'getColumn', 'getPosts', 'getCorp']),
+    async search() {
+      let result = await this.getPosts({ type: 'fetch', data: { id: this.$route.query.id } });
+      if (`${result.errcode}` === '0') {
+        //给this=>vue的实例下在中的list属性,赋予result.data的值
+        this.$set(this, `jobInfo`, result.data);
+        this.searchCorpInfo(this.jobInfo.corpid);
+      } else {
+        this.$message.error(result.errmsg ? result.errmsg : 'error');
+      }
+    },
+    async searchCorpInfo(corpid) {
+      let result = await this.getCorp({ type: 'component', data: { corpid: corpid } });
+      if (`${result.errcode}` === '0') {
+        this.$set(this, 'corpInfo', result.data);
+        // this.$set(this.corpInfo, `id`, this.info.corpid);
+        // this.$set(this.corpInfo, `corpname`, this.info.corpname);
+      } else {
+        this.$message.error(result.errmsg ? result.errmsg : 'error');
+      }
+    },
+    //站点信息
+    async toGetSite() {
+      let site = sessionStorage.getItem('site');
+      if (!site) {
+        let result = await this.getSite({ type: 'search' });
+        if (result.errcode === 0) {
+          sessionStorage.setItem('site', JSON.stringify(result.data));
+          if (_.get(result.data, `custom`)) {
+            let item = result.custom;
+          }
+          this.$set(this, `site`, result.data);
+          this.$set(this, `siteTitle`, this.site.name);
+        }
+      } else {
+        this.$set(this, `site`, JSON.parse(site));
+        this.$set(this, `siteTitle`, this.site.name);
+        let arr = this.site;
+        if (arr.custom) {
+          let item = arr.custom;
+        }
+      }
+    },
+    //菜单
+    async loadMenu() {
+      let menu = sessionStorage.getItem('menu');
+      if (menu) {
+        this.$set(this, `menu`, JSON.parse(menu));
+        await this.finishedMenu();
+      } else this.toGetMenu();
+    },
+    async toGetMenu() {
+      let result = await this.getMenu({ type: `list` });
+      if (result.errcode === 0) {
+        sessionStorage.setItem('menu', JSON.stringify(result.data));
+        this.$set(this, `menu`, result.data);
+        this.finishedMenu();
+      }
+    },
+    async finishedMenu() {
+      let menus = JSON.parse(JSON.stringify(this.menu));
+      for (const item of menus) {
+        if (item.type === 'content') {
+          item.path = `/detail/${item.content_id}`;
+        } else if (item.type !== 'url') {
+          let res = await this.completeMenu(item);
+          item.children = res;
+        }
+      }
+      this.$set(this, `menu`, menus);
+    },
+    async completeMenu(item) {
+      let result = await this.getColumn({
+        type: `list`,
+        data: { parent_id: item.id },
+      });
+      if (result.errcode === 0) {
+        let columns = result.data;
+        for (const col of columns) {
+          if (col.type === 'content') {
+            col.path = `/detail/${col.content_id}`;
+          } else if (col.type !== 'url') {
+            col.path = `/newsList/menu/${col.id}?title=${col.title}`;
+            if (col.parent.includes('党员')) {
+              col.path = `/memberList/menu/${col.id}?title=${col.title}`;
+            }
+          }
+        }
+        return columns;
+      }
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 147 - 0
src/views/recruit/talk.vue

@@ -0,0 +1,147 @@
+<template>
+  <div id="talk">
+    <talk-detail :menuList="menu" :sideMenu="sideMenu" :info="site" :backColor="backColor" :Color="Color" :talkInfo="talkInfo" :jobList="jobList"></talk-detail>
+  </div>
+</template>
+
+<script>
+import talkDetail from '@/components/talk.vue';
+import { mapActions, mapState } from 'vuex';
+import _ from 'lodash';
+export default {
+  metaInfo() {
+    return {
+      title: this.siteTitle ? this.siteTitle : '就业信息网',
+    };
+  },
+  name: 'talk',
+  props: {},
+  components: {
+    talkDetail,
+  },
+  data: () => ({
+    info: {
+      src: require('@/assets/logo.png'),
+      phone: '0431-12345678',
+      banner: require('@/assets/banner.png'),
+      address: '办公地址:长春市经济技术开发区金川街151号吉林省高等学校毕业生就业指导中心2楼一站式办公大厅',
+      email: '邮编:130012',
+      gongjiao: '公交线路:乘坐120路、227路、20路、260路、80路、130路、281路、154路、190路、125路公交北方市场下车,北方市场南门南行200米。',
+      mobile: '业务咨询电话:0431-84657570 0431-84657571;',
+      date: '办公时间:周一至周五,法定假日不对外办公。',
+      copyright: '吉ICP备09006292号-1 Copyright 2013 版权所有 吉林省高等学校毕业生就业指导中心 All Rights Reserved',
+    },
+    talkInfo: {},
+    jobList: [],
+    menu: [],
+    site: {},
+    sideMenu: [],
+    siteTitle: '',
+    backColor: '#0457c7',
+    Color: '#0457c7',
+  }),
+  async created() {
+    await this.toGetSite(); //获取主站信息
+    await this.loadMenu(); //获取菜单信息
+    this.search();
+  },
+  computed: {},
+  methods: {
+    ...mapActions(['getSite', 'getMenu', 'getColumn', 'getTalk', 'getPosts']),
+    async search() {
+      //1直接拿着参数发送请求
+      let result = await this.getTalk({ type: 'fetch', data: { id: this.$route.query.id } });
+      if (`${result.errcode}` === '0') {
+        console.log(result.data);
+        this.$set(this, `talkInfo`, result.data);
+        this.searchJobs();
+      } else {
+        this.$message.error(result.errmsg ? result.errmsg : 'error');
+      }
+    },
+    async searchJobs() {
+      let jobs = this.talkInfo.jobs;
+      if (jobs.length > 0) {
+        jobs.map(async item => {
+          let result = await this.postOperation({ type: 'search', data: { id: item } });
+          if (`${result.errcode}` === '0') {
+            result.data ? this.jobList.push(result.data) : '';
+          }
+        });
+      }
+    },
+    //站点信息
+    async toGetSite() {
+      let site = sessionStorage.getItem('site');
+      if (!site) {
+        let result = await this.getSite({ type: 'search' });
+        if (result.errcode === 0) {
+          sessionStorage.setItem('site', JSON.stringify(result.data));
+          if (_.get(result.data, `custom`)) {
+            let item = result.custom;
+          }
+          this.$set(this, `site`, result.data);
+          this.$set(this, `siteTitle`, this.site.name);
+        }
+      } else {
+        this.$set(this, `site`, JSON.parse(site));
+        this.$set(this, `siteTitle`, this.site.name);
+        let arr = this.site;
+        if (arr.custom) {
+          let item = arr.custom;
+        }
+      }
+    },
+    //菜单
+    async loadMenu() {
+      let menu = sessionStorage.getItem('menu');
+      if (menu) {
+        this.$set(this, `menu`, JSON.parse(menu));
+        await this.finishedMenu();
+      } else this.toGetMenu();
+    },
+    async toGetMenu() {
+      let result = await this.getMenu({ type: `list` });
+      if (result.errcode === 0) {
+        sessionStorage.setItem('menu', JSON.stringify(result.data));
+        this.$set(this, `menu`, result.data);
+        this.finishedMenu();
+      }
+    },
+    async finishedMenu() {
+      let menus = JSON.parse(JSON.stringify(this.menu));
+      for (const item of menus) {
+        if (item.type === 'content') {
+          item.path = `/detail/${item.content_id}`;
+        } else if (item.type !== 'url') {
+          let res = await this.completeMenu(item);
+          item.children = res;
+        }
+      }
+      this.$set(this, `menu`, menus);
+    },
+    async completeMenu(item) {
+      let result = await this.getColumn({
+        type: `list`,
+        data: { parent_id: item.id },
+      });
+      if (result.errcode === 0) {
+        let columns = result.data;
+        for (const col of columns) {
+          if (col.type === 'content') {
+            col.path = `/detail/${col.content_id}`;
+          } else if (col.type !== 'url') {
+            col.path = `/newsList/menu/${col.id}?title=${col.title}`;
+            if (col.parent.includes('党员')) {
+              col.path = `/memberList/menu/${col.id}?title=${col.title}`;
+            }
+          }
+        }
+        return columns;
+      }
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped></style>