guhongwei 5 年之前
父節點
當前提交
cb75da5226

+ 3 - 2
src/components/jobfair.vue

@@ -11,7 +11,7 @@
       </el-col>
       </el-col>
       <el-col :span="24" class="main">
       <el-col :span="24" class="main">
         <div class="w_1200">
         <div class="w_1200">
-          <jobfairInfo :jobfairInfo="jobfairInfo" :jobslist="jobslist"></jobfairInfo>
+          <jobfairInfo :jobfairInfo="jobfairInfo" :corpList="corpList" :jobsList="jobsList"></jobfairInfo>
         </div>
         </div>
       </el-col>
       </el-col>
       <el-col :span="24" class="foot">
       <el-col :span="24" class="foot">
@@ -33,7 +33,8 @@ export default {
     Color: null, //头部电话字体颜色
     Color: null, //头部电话字体颜色
     backColor: null, //导航菜单背景颜色
     backColor: null, //导航菜单背景颜色
     jobfairInfo: null,
     jobfairInfo: null,
-    jobslist: null,
+    corpList: null,
+    jobsList: null,
   },
   },
   components: {
   components: {
     top, //头部
     top, //头部

+ 2 - 2
src/components/talk.vue

@@ -11,7 +11,7 @@
       </el-col>
       </el-col>
       <el-col :span="24" class="main">
       <el-col :span="24" class="main">
         <div class="w_1200">
         <div class="w_1200">
-          <talkInfo :talkInfo="talkInfo" :list="list"></talkInfo>
+          <talkInfo :talkInfo="talkInfo" :jobList="jobList"></talkInfo>
         </div>
         </div>
       </el-col>
       </el-col>
       <el-col :span="24" class="foot">
       <el-col :span="24" class="foot">
@@ -33,7 +33,7 @@ export default {
     Color: null, //头部电话字体颜色
     Color: null, //头部电话字体颜色
     backColor: null, //导航菜单背景颜色
     backColor: null, //导航菜单背景颜色
     talkInfo: null,
     talkInfo: null,
-    list: null,
+    jobList: null,
   },
   },
   components: {
   components: {
     top, //头部
     top, //头部

+ 1 - 1
src/layout/jobs-list/talk.vue

@@ -1,6 +1,6 @@
 <template>
 <template>
   <div id="talk">
   <div id="talk">
-    <el-col :span="24" @click.native="$router.push({ path: '/jobsDetail', query: { id: data.id } })">
+    <el-col :span="24" @click.native="$router.push({ path: '/talkDetail', query: { id: data.id } })">
       <el-col :span="20" class="title">
       <el-col :span="20" class="title">
         <p class="textOver"><span class="dian"></span>{{ data.title }}</p>
         <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.address }}</p>

+ 9 - 10
src/layout/recuit/jobfairInfo.vue

@@ -29,10 +29,6 @@
             <p>地点:{{ jobfairInfo && jobfairInfo.address ? jobfairInfo.address : '不知道' }}</p>
             <p>地点:{{ jobfairInfo && jobfairInfo.address ? jobfairInfo.address : '不知道' }}</p>
           </el-col>
           </el-col>
         </el-col>
         </el-col>
-        <el-col :span="24" class="talkJianjie">
-          <h3 style="border-left:5px solid #0457c7;padding:0 10px;">招聘会说明</h3>
-          <p>{{ jobfairInfo && jobfairInfo.intro ? jobfairInfo.intro : '招聘会说明' }}</p>
-        </el-col>
         <el-col :span="24" class="talkJobs">
         <el-col :span="24" class="talkJobs">
           <h3 style="border-left:5px solid #0457c7;padding:0 10px;">招聘会相关</h3>
           <h3 style="border-left:5px solid #0457c7;padding:0 10px;">招聘会相关</h3>
           <el-col :span="24">
           <el-col :span="24">
@@ -41,13 +37,13 @@
                 <el-table :data="corpList" style="width: 100%" stripe :show-header="false">
                 <el-table :data="corpList" style="width: 100%" stripe :show-header="false">
                   <el-table-column label="企业" prop="corpname">
                   <el-table-column label="企业" prop="corpname">
                     <template v-slot="scoped">
                     <template v-slot="scoped">
-                      <el-link @click="$router.push({ path: '/corp/detail', query: { id: scoped.row.corpid } })">{{ scoped.row.corpname }}</el-link>
+                      <el-link @click="$router.push({ path: '/corp', query: { id: scoped.row.corpid } })">{{ scoped.row.corpname }}</el-link>
                     </template>
                     </template>
                   </el-table-column>
                   </el-table-column>
                 </el-table>
                 </el-table>
               </el-tab-pane>
               </el-tab-pane>
               <el-tab-pane label="招聘职位" name="jobs">
               <el-tab-pane label="招聘职位" name="jobs">
-                <el-row class="rowStyle" v-for="(item, index) in jobslist" :key="index" :gutter="10">
+                <el-row class="rowStyle" v-for="(item, index) in jobsList" :key="index" :gutter="10">
                   <el-col :span="16">
                   <el-col :span="16">
                     <el-link class="job__name" :underline="false" @click="turnToJobs(item.id)">
                     <el-link class="job__name" :underline="false" @click="turnToJobs(item.id)">
                       <span title="查看职位">{{ item.job_name ? item.job_name : '' }}</span>
                       <span title="查看职位">{{ item.job_name ? item.job_name : '' }}</span>
@@ -56,7 +52,7 @@
                   <el-col class="money" :span="4">
                   <el-col class="money" :span="4">
                     {{ item.salary ? item.salary.text : '' }}
                     {{ item.salary ? item.salary.text : '' }}
                   </el-col>
                   </el-col>
-                  <el-col :span="4" style="text-align:center;"> 招聘人数:{{ item.job_number | jobNum }} </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="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-col :span="8"> {{ item.xl_req ? item.xl_req : '' }} | {{ item.city ? item.city : '' }} </el-col>
                 </el-row>
                 </el-row>
@@ -74,10 +70,13 @@ export default {
   name: 'jobfairInfo',
   name: 'jobfairInfo',
   props: {
   props: {
     jobfairInfo: null,
     jobfairInfo: null,
-    jobslist: null,
+    corpList: null,
+    jobsList: null,
   },
   },
   components: {},
   components: {},
-  data: () => ({}),
+  data: () => ({
+    tabs: 'corp',
+  }),
   created() {},
   created() {},
   computed: {},
   computed: {},
   methods: {
   methods: {
@@ -89,7 +88,7 @@ export default {
       if (this.origin) query.origin = this.origin;
       if (this.origin) query.origin = this.origin;
       if (this.type) query.type = this.type;
       if (this.type) query.type = this.type;
       query.id = id;
       query.id = id;
-      this.$router.push({ path: '/jobs', query: query });
+      this.$router.push({ path: '/jobsDetail', query: query });
     },
     },
   },
   },
 };
 };

+ 5 - 9
src/layout/recuit/talkInfo.vue

@@ -32,17 +32,13 @@
             <p>宣讲地点:{{ talkInfo && talkInfo.address ? talkInfo.address : '测试单位' }}</p>
             <p>宣讲地点:{{ talkInfo && talkInfo.address ? talkInfo.address : '测试单位' }}</p>
           </el-col>
           </el-col>
         </el-col>
         </el-col>
-        <el-col :span="24" class="talkJianjie">
-          <h3 style="border-left:5px solid #0457c7;padding:0 10px;">单位简介</h3>
-          <p>{{ talkInfo && talkInfo.intro ? talkInfo.intro : '测试单位' }}</p>
-        </el-col>
         <el-col :span="24" class="talkPro">
         <el-col :span="24" class="talkPro">
           <h3 style="border-left:5px solid #0457c7;padding:0 10px;">招聘简章</h3>
           <h3 style="border-left:5px solid #0457c7;padding:0 10px;">招聘简章</h3>
-          <p>{{ talkInfo && talkInfo.content ? talkInfo.content : '测试单位' }}</p>
+          <p v-html="talkInfo && talkInfo.content ? talkInfo.content : ''"></p>
         </el-col>
         </el-col>
         <el-col :span="24" class="talkJobs">
         <el-col :span="24" class="talkJobs">
           <h3 style="border-left:5px solid #0457c7;padding:0 10px;">招聘职位</h3>
           <h3 style="border-left:5px solid #0457c7;padding:0 10px;">招聘职位</h3>
-          <el-row class="rowStyle" v-for="(item, index) in list" :key="index" :gutter="10">
+          <el-row class="rowStyle" v-for="(item, index) in jobList" :key="index" :gutter="10">
             <el-col :span="16">
             <el-col :span="16">
               <el-link class="job__name" :underline="false" @click="turnToJobs(item.id)">
               <el-link class="job__name" :underline="false" @click="turnToJobs(item.id)">
                 <span title="查看职位">{{ item.job_name ? item.job_name : '' }}</span>
                 <span title="查看职位">{{ item.job_name ? item.job_name : '' }}</span>
@@ -51,7 +47,7 @@
             <el-col class="money" :span="4">
             <el-col class="money" :span="4">
               {{ item.salary ? item.salary.text : '' }}
               {{ item.salary ? item.salary.text : '' }}
             </el-col>
             </el-col>
-            <el-col :span="4" style="text-align:center;"> 招聘人数:{{ item.job_number | jobNum }} </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="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-col :span="8"> {{ item.xl_req ? item.xl_req : '' }} | {{ item.city ? item.city : '' }} </el-col>
           </el-row>
           </el-row>
@@ -67,7 +63,7 @@ export default {
   name: 'talkInfo',
   name: 'talkInfo',
   props: {
   props: {
     talkInfo: null,
     talkInfo: null,
-    list: null,
+    jobList: null,
   },
   },
   components: {
   components: {
     share,
     share,
@@ -84,7 +80,7 @@ export default {
       if (this.origin) query.origin = this.origin;
       if (this.origin) query.origin = this.origin;
       if (this.type) query.type = this.type;
       if (this.type) query.type = this.type;
       query.id = id;
       query.id = id;
-      this.$router.push({ path: '/jobs', query: query });
+      this.$router.push({ path: '/jobsDetail', query: query });
     },
     },
   },
   },
 };
 };

+ 17 - 0
src/store/jobfair.js

@@ -6,6 +6,9 @@ const api = {
   range: `/api/jobs/fairs/date`,
   range: `/api/jobs/fairs/date`,
   list: `/api/jobs/fairs`,
   list: `/api/jobs/fairs`,
   fetch: id => `/api/jobs/fairs/${id}`,
   fetch: id => `/api/jobs/fairs/${id}`,
+  //双选会企业信息
+  fairCorp: '/api/jobs/faircorps',
+  fairJobs: id => `/api/jobs/faircorps/${id}/jobs`,
 };
 };
 export const state = () => ({});
 export const state = () => ({});
 export const mutations = {};
 export const mutations = {};
@@ -30,4 +33,18 @@ export const actions = {
     }
     }
     return result;
     return result;
   },
   },
+  //招聘会企业信息
+  async fairInfoOperation({ state }, { type, data }) {
+    let result;
+    let { skip, limit } = data;
+    if (type === 'searchCorp') {
+      let { schid, fairid, corpid, status } = data;
+      result = this.$axios.$get(api.fairCorp, { schid: schid, fairid: fairid, corpid: corpid, status: status, skip: skip, limit: limit });
+    }
+    if (type === 'searchJobs') {
+      let { id } = data;
+      result = this.$axios.$get(api.fairJobs(id), { skip: skip, limit: limit });
+    }
+    return result;
+  },
 };
 };

+ 130 - 4
src/views/recruit/jobfair.vue

@@ -1,13 +1,28 @@
 <template>
 <template>
   <div id="jobfair">
   <div id="jobfair">
-    <jobfair-detail :info="info" :backColor="backColor" :Color="Color" :jobfairInfo="jobfairInfo" :jobslist="jobslist"></jobfair-detail>
+    <jobfair-detail
+      :menuList="menu"
+      :sideMenu="sideMenu"
+      :info="site"
+      :backColor="backColor"
+      :Color="Color"
+      :jobfairInfo="jobfairInfo"
+      :corpList="corpList"
+      :jobsList="jobsList"
+    ></jobfair-detail>
   </div>
   </div>
 </template>
 </template>
 
 
 <script>
 <script>
 import jobfairDetail from '@/components/jobfair.vue';
 import jobfairDetail from '@/components/jobfair.vue';
 import { mapActions, mapState } from 'vuex';
 import { mapActions, mapState } from 'vuex';
+import _ from 'lodash';
 export default {
 export default {
+  metaInfo() {
+    return {
+      title: this.siteTitle ? this.siteTitle : '就业信息网',
+    };
+  },
   name: 'jobfair',
   name: 'jobfair',
   props: {},
   props: {},
   components: {
   components: {
@@ -26,7 +41,8 @@ export default {
       copyright: '吉ICP备09006292号-1 Copyright 2013 版权所有 吉林省高等学校毕业生就业指导中心 All Rights Reserved',
       copyright: '吉ICP备09006292号-1 Copyright 2013 版权所有 吉林省高等学校毕业生就业指导中心 All Rights Reserved',
     },
     },
     jobfairInfo: {},
     jobfairInfo: {},
-    jobslist: [
+    corpList: [],
+    jobsList: [
       {
       {
         job_name: '测试测试测试',
         job_name: '测试测试测试',
         salary: '测试测试测试',
         salary: '测试测试测试',
@@ -36,12 +52,122 @@ export default {
         city: '长春市',
         city: '长春市',
       },
       },
     ],
     ],
+    list: [],
+    menu: [],
+    site: {},
+    sideMenu: [],
+    siteTitle: '',
     backColor: '#0457c7',
     backColor: '#0457c7',
     Color: '#0457c7',
     Color: '#0457c7',
   }),
   }),
-  created() {},
+  async created() {
+    await this.toGetSite(); //获取主站信息
+    await this.loadMenu(); //获取菜单信息
+    this.search();
+  },
   computed: {},
   computed: {},
-  methods: {},
+  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>
 </script>
 
 

+ 113 - 21
src/views/recruit/talk.vue

@@ -1,13 +1,19 @@
 <template>
 <template>
   <div id="talk">
   <div id="talk">
-    <talk-detail :info="info" :backColor="backColor" :Color="Color" :talkInfo="talkInfo" :list="list"></talk-detail>
+    <talk-detail :menuList="menu" :sideMenu="sideMenu" :info="site" :backColor="backColor" :Color="Color" :talkInfo="talkInfo" :jobList="jobList"></talk-detail>
   </div>
   </div>
 </template>
 </template>
 
 
 <script>
 <script>
 import talkDetail from '@/components/talk.vue';
 import talkDetail from '@/components/talk.vue';
 import { mapActions, mapState } from 'vuex';
 import { mapActions, mapState } from 'vuex';
+import _ from 'lodash';
 export default {
 export default {
+  metaInfo() {
+    return {
+      title: this.siteTitle ? this.siteTitle : '就业信息网',
+    };
+  },
   name: 'talk',
   name: 'talk',
   props: {},
   props: {},
   components: {
   components: {
@@ -25,30 +31,116 @@ export default {
       date: '办公时间:周一至周五,法定假日不对外办公。',
       date: '办公时间:周一至周五,法定假日不对外办公。',
       copyright: '吉ICP备09006292号-1 Copyright 2013 版权所有 吉林省高等学校毕业生就业指导中心 All Rights Reserved',
       copyright: '吉ICP备09006292号-1 Copyright 2013 版权所有 吉林省高等学校毕业生就业指导中心 All Rights Reserved',
     },
     },
-    list: [
-      {
-        job_name: '测试测试测试',
-        salary: '测试测试测试',
-        job_number: '2',
-        zy_req: '计算机专业',
-        xl_req: '本科及以上',
-        city: '长春市',
-      },
-      {
-        job_name: '测试测试测试',
-        salary: '测试测试测试',
-        job_number: '2',
-        zy_req: '计算机专业',
-        xl_req: '本科及以上',
-        city: '长春市',
-      },
-    ],
+    talkInfo: {},
+    jobList: [],
+    menu: [],
+    site: {},
+    sideMenu: [],
+    siteTitle: '',
     backColor: '#0457c7',
     backColor: '#0457c7',
     Color: '#0457c7',
     Color: '#0457c7',
   }),
   }),
-  created() {},
+  async created() {
+    await this.toGetSite(); //获取主站信息
+    await this.loadMenu(); //获取菜单信息
+    this.search();
+  },
   computed: {},
   computed: {},
-  methods: {},
+  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>
 </script>