Эх сурвалжийг харах

增加职场机会和修复登录问题

增加职场机会和修复登录问题
dangyunlong 3 долоо хоног өмнө
parent
commit
8283d164c0

+ 98 - 0
src/api/job.js

@@ -0,0 +1,98 @@
+import request from '@/utils/request'
+
+//获取岗位信息
+export function getJobRecruitingInfo(params) {
+    return request({
+        url: '/news/getJobRecruitingInfo',
+        method: 'get',
+        params
+    })
+}
+//获取工作性质
+export function getJobNature(params) {
+    return request({
+        url: '/news/getJobNature',
+        method: 'get',
+        params
+    })
+}
+//获取工作年限
+export function getExperience(params) {
+    return request({
+        url: '/news/getExperience',
+        method: 'get',
+        params
+    })
+}
+//获取学历文凭
+export function getEducation(params) {
+    return request({
+        url: '/news/getEducation',
+        method: 'get',
+        params
+    })
+}
+//获取语言能力
+export function getLanguage(params) {
+    return request({
+        url: `/news/getLanguage`,
+        method: 'get',
+        params
+    })
+}
+//获得薪资
+export function getSalary(params) {
+    return request({
+        url: `/news/getSalary`,
+        method: 'get',
+        params
+    })
+}
+//获得公司规模
+export function getCompanySize(params) {
+    return request({
+        url: `/news/getCompanySize`,
+        method: 'get',
+        params
+    })
+}
+//获得公司性质
+export function getCompanyNature(params) {
+    return request({
+        url: `/news/getCompanyNature`,
+        method: 'get',
+        params
+    })
+}
+//获得公司行业
+export function getIndustry(params) {
+    return request({
+        url: `/news/getIndustry`,
+        method: 'get',
+        params
+    })
+}
+//获得招聘岗位名称
+export function getPositionList(params) {
+    return request({
+        url: `/news/getPositionList`,
+        method: 'get',
+        params
+    })
+}
+//获得所在省
+export function getJobRecruitingArea(params) {
+    return request({
+        url: `/news/getJobRecruitingArea`,
+        method: 'get',
+        params
+    })
+}
+//获得职位机会列表
+export function getRecruitingList(params) {
+    return request({
+        url: `/news/getRecruitingList`,
+        method: 'get',
+        params
+    })
+}

BIN
src/assets/job/briefcase.png


BIN
src/assets/job/local.png


+ 20 - 5
src/permission.js

@@ -57,10 +57,25 @@ router.beforeEach(async (to, from, next) => {
                 }
             }
             if(loginType == 'backurl'){
-                //如果是backurl
-                const backurl = getBackUrlValue(window.location.href)
-                //带着token返回原网站
-                window.location.href = backurl + '?backurl=' + backurl + '&admintoken=' + getToken()
+                const userInfo = await getInfo();
+                //此时分为两种情况,如果这个用户的token被放入了黑名单,此时不能允许用户带着token返回原网站
+                //否则他就会一直登录不了,这个时候应该让他重新登录
+                if(userInfo.code == 400){
+                    //跳转到登录页面
+                    if (to.path !== '/no-permission') {
+                        //避免重复跳转
+                        next({path:'/no-permission'})
+                    } else {
+                        //已经在无权限页面,不再跳转
+                        next()
+                    }
+                }else{
+                    //如果不是400,说明用户的这个token是可以用的,可以带着token返回C端
+                    //如果是backurl
+                    const backurl = getBackUrlValue(window.location.href)
+                    //带着token返回原网站
+                    window.location.href = backurl + '?backurl=' + backurl + '&admintoken=' + getToken()
+                }
             }
         } else {
             //3.4.2 如果有token,但是没在登录页面
@@ -69,7 +84,7 @@ router.beforeEach(async (to, from, next) => {
             if (hasRoles) {
                 const userInfo = await getInfo();
                 //如果用户没有权限登录该网站,返回登录页面
-                if(userInfo.code == -1){
+                if(userInfo.code == 400){
                     console.log("用户没有访问权限,将跳转到无权限页面!")
                     if (to.path !== '/no-permission') {
                         //避免重复跳转

+ 32 - 1
src/router/index.js

@@ -736,7 +736,6 @@ export const constantRoutes = [
       }
     ]
   }, 
-
   {
     path: '/jobHuntingApplyList',
     component: Layout,
@@ -769,6 +768,38 @@ export const constantRoutes = [
       }
     ]
   },   
+  {
+    path: '/jobOpportunities',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/job/jobOpportunitiesList'),
+        meta: {
+          title: '职场机会',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  }, 
+  {
+    path: '/jobOpportunitiesDetails',
+    component: Layout,
+    children: [
+      {
+        name: '',
+        path: '',
+        component: () => import('@/views/job/jobOpportunitiesDetails'),
+        meta: {
+          title: '职场机会',
+          hidden: true,
+          breadcrumb: true
+        }
+      }
+    ]
+  }, 
 
   // ----------liuj------------
 

+ 130 - 0
src/store/modules/job.js

@@ -0,0 +1,130 @@
+import { getJobRecruitingInfo,getJobNature,getEducation,getLanguage,getSalary,getCompanySize,getCompanyNature,
+    getIndustry,getJobRecruitingArea,getPositionList,getExperience,getRecruitingList
+ } from '@/api/job'
+
+const state = {
+
+}
+
+const mutations = {
+
+}
+
+const actions = {
+    getJobRecruitingInfo({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getJobRecruitingInfo(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getJobNature({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getJobNature(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getEducation({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getEducation(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getLanguage({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getLanguage(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getSalary({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getSalary(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getCompanySize({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getCompanySize(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getCompanyNature({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getCompanyNature(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getIndustry({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getIndustry(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getJobRecruitingArea({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getJobRecruitingArea(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getPositionList({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getPositionList(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getExperience({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getExperience(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+    getRecruitingList({ commit }, data) {
+        return new Promise((resolve, reject) => {
+            getRecruitingList(data).then(response => {
+                resolve(response)
+            }).catch(error => {
+                reject(error)
+            })
+        })
+    },
+}
+
+
+export default {
+    namespaced: true,
+    state,
+    mutations,
+    actions
+}

+ 1 - 1
src/utils/baseUrl.js

@@ -21,7 +21,7 @@ const URL = {
   //WebsocketUrl: 'ws://103.105.201.2:9506'//正式环境ip -- websocket地址
   //WebsocketUrl: 'wss://flzxw.bjzxtw.org.cn'//正式环境域名 wss可用 -- websocket地址
   WebCloginUrl: 'http://apipre1.bjzxtw.org.cn/api/loginapi', //单点登录地址
-  WebCLogoutUrl: 'http://apipre1.bjzxtw.org.cn/api/logoutapi', //单点登录退出
+  WebCLogoutUrl: 'http://apipre1.bjzxtw.org.cn:29501/api/logoutapi', //单点登录退出
   //webClogBackUrL: 'http://adminpre.bjzxtw.org.cn/auth/back_login.php' //单点登录返回地址 - 王鹏
   webClogBackUrL: 'http://adminpre.bjzxtw.org.cn/adminapi/api/backlogin' //单点登录返回地址 - 刘佳伟
 }

+ 603 - 0
src/views/job/jobOpportunitiesDetails.vue

@@ -0,0 +1,603 @@
+<template>
+    <div class="mainBox">
+        <div class="layerBox">
+            <tableTitle :name="tableDivTitle" />
+            <div class="jobDetailsBox">
+                <div class="color_main">
+                    <div class="index_main">
+                        <section class="index_1 clearfix">
+                            <div class="cruit_head_box clearfix">
+                                <div class="cruit_head_left">
+                                    <a class="cruit_head_a cruit_head_only" title="">招聘信息</a>
+                                </div>
+                                <div class="seek_head_right_box clearfix">
+                                    <span class="seek_head_right_text">更新时间:{{pageData.updated_at}}</span>
+                                </div>
+                            </div>
+                            <div class="index_1_box clearfix">
+                                <div class="demand_head_box clearfix">
+                                    <div class="demand_head_name">JAVA开发工程师</div>
+                                </div>
+                                <div class="cruit_li_2_foot clearfix">
+                                    <span class="cruit_li_2_foot_tag cruit_li_2_foot_exper">
+                                        {{pageData.hy_id}}
+                                        &gt;
+                                        {{pageData.jtzw_id}}
+                                    </span>
+                                    <span class="cruit_li_2_foot_tag cruit_li_2_foot_addres">{{pageData.city_arr_id}}</span>
+                                </div>
+                            </div>
+                        </section>
+                    </div>
+                </div>
+                <div class="index_main">
+                    <section class="index_2 clearfix">
+                        <div class="demand_1 clearfix">
+                            <div class="demand_left_1 clearfix">
+                                <div class="cruit_head_box clearfix">
+                                    <div class="cruit_head_left">
+                                        <a class="cruit_head_a cruit_head_only" title="">基本要求</a>
+                                    </div>
+                                </div>
+                                <div class="demand_ul_2">
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">工作性质:</div>
+                                        <div class="demand_li_2_text clearfix">{{pageData.nature}}</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">工作经验:</div>
+                                        <div class="demand_li_2_text clearfix">{{pageData.experience}}工作经验</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">学历文凭:</div>
+                                        <div class="demand_li_2_text clearfix">{{pageData.education}}</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">语言选择:</div>
+                                        <div class="demand_li_2_text clearfix">{{pageData.language}}</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">待遇选项:</div>
+                                        <div class="demand_li_2_text clearfix">{{pageData.salary}}</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">截止日期:</div>
+                                        <div class="demand_li_2_text clearfix">{{pageData.due_data}}</div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="demand_left_2 clearfix">
+                                <div class="cruit_head_box clearfix">
+                                    <div class="cruit_head_left">
+                                        <a class="cruit_head_a cruit_head_only" title="">岗位职责</a>
+                                    </div>
+                                </div>
+                                <div class="demand_article_1" v-html="pageData.description"></div>
+                            </div>
+                            <div class="demand_left_3 clearfix">
+                                <div class="cruit_head_box clearfix">
+                                    <div class="cruit_head_left">
+                                        <a class="cruit_head_a cruit_head_only" title="">具体要求</a>
+                                    </div>
+                                </div>
+                                <div class="demand_article_1" v-html="pageData.jt_description"></div>
+                            </div>
+                            <div class="demand_left_4 clearfix">
+                                <div class="cruit_head_box clearfix">
+                                    <div class="cruit_head_left">
+                                        <a class="cruit_head_a cruit_head_only" title="">联系方式</a>
+                                    </div>
+                                </div>
+                                <div class="demand_ul_2">
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">地址:</div>
+                                        <div class="demand_li_2_text clearfix">{{pageData.address}}</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">邮箱:</div>
+                                        <div class="demand_li_2_text clearfix">{{pageData.email}}</div>
+                                    </div>
+                                </div>
+                            </div>
+                            <div class="demand_left_5 clearfix">
+                                <div class="cruit_head_box clearfix">
+                                    <div class="cruit_head_left">
+                                        <a class="cruit_head_a cruit_head_only" title="">公司介绍</a>
+                                    </div>
+                                </div>
+                                <div class="demand_ul_2">
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">公司规模:</div>
+                                        <div class="demand_li_2_text clearfix">{{pageData.companySize}}</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">公司性质:</div>
+                                        <div class="demand_li_2_text clearfix">{{pageData.companyNature}}</div>
+                                    </div>
+                                    <div class="demand_li_2 clearfix">
+                                        <div class="demand_li_2_label">公司行业:</div>
+                                        <div class="demand_li_2_text clearfix">{{pageData.industry}}</div>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </section>
+                </div>
+            </div>
+            <div class="jobDetailsBoxBtnBox">
+                <el-button type="info" @click="returnPage">返回</el-button>
+            </div>
+        </div>
+    </div>
+</template>
+
+<script>
+//表格标题
+import tableTitle from './components/tableTitle';
+//引入公用样式
+import '@/styles/global.less';
+
+export default {
+    components: {
+        tableTitle
+    },
+    data() {
+        return {
+            tableDivTitle: "职位详情",
+            pageData:{
+                title:'',//职位名称
+                updated_at:'',//更新时间
+                hy_id:'',//行业分类
+                jtzw_id:'',//职业分类
+                city_arr_id:"",//城市id
+                nature:'',//工作性质
+                experience:'',//工作经验
+                education:'',//学历文凭
+                language:'',//语言能力
+                salary:'',//待遇选项
+                due_data:'',//截止日期
+                description:'',//岗位职责
+                jt_description:'',//具体要求
+                address:'',//地址
+                email:'',//邮箱
+                companySize:'',//公司规模
+                companyNature:'',//公司性质
+                industry:'',//公司行业
+            }
+        };
+    },
+    methods: {
+        returnPage(){
+            //返回列表页
+            this.$router.push('/jobOpportunities')
+        },
+        getData() {
+            let that = this;
+            let id = this.$route.query.id;
+            this.$store.dispatch('job/getJobRecruitingInfo',{id:id}).then(res=> {
+                this.pageData.updated_at = res.data.updated_at;//更新时间
+                this.getIndustry(res.data.hy_id)//行业分类
+                this.getPositionList(res.data.zw_id,res.data.jtzw_id)//职业分类
+                this.pageData.city_arr_id = res.data.city//所在城市
+                this.getJobNature(res.data.nature_id)//工作性质
+                this.getExperience(res.data.experience)//获得工作年限
+                this.getEducation(res.data.educational)//获得学历文凭
+                this.getLanguage(res.data.language)//获得语言能力
+                this.getSalary(res.data.salary)//获得薪资待遇
+                this.pageData.city_arr_id = res.data.city//截止日期
+                this.pageData.due_data = res.data.due_data.split(' ')[0]//截止日期
+                this.pageData.description = res.data.description//岗位职责
+                this.pageData.jt_description = res.data.jt_description//具体要求
+                this.pageData.address = res.data.address_name//地址
+                this.pageData.email = res.data.email//邮箱
+                this.getCompanySize(res.data.company_size)//公司规模
+                this.getCompanyNature(res.data.company_nature)//公司性质
+                //company_hy_id 公司行业,目前使用的是hy_id
+            })
+        },
+        //获得公司行业
+        getIndustry(number) {
+            this.$store.dispatch('job/getIndustry').then(res=> {
+                for(let item of res.data){
+                    if(item.hyid == number){
+                        this.pageData.hy_id =  item.hyname
+                        this.pageData.industry = item.hyname
+                    }
+                }
+            })
+        },
+        //获得职业分类
+        getPositionList(zw_id,jtzw_id) {
+            //这里需要传入分类类型id和职业具体id
+            this.$store.dispatch('job/getPositionList',{zwpid:zw_id}).then(res=> {
+                for(let item of res.data){
+                    if(item.zwid == jtzw_id){
+                        this.pageData.jtzw_id =  item.zwname
+                    }
+                }
+            })
+        },
+        //获得所在城市
+        getJobRecruitingArea(city_arr_id) {
+            let cityArr = JSON.parse(city_arr_id);
+            this.$store.dispatch('job/getJobRecruitingArea',{id:cityArr[cityArr.length-1]}).then(res=> {
+                this.pageData.city_arr_id =  res.data.city_name
+            })
+        },
+        //获得工作性质
+        getJobNature(number) {
+            this.$store.dispatch('job/getJobNature',{id:number}).then(res=> {
+                for(let item of res.data){
+                    if(item.evalue == number){
+                        this.pageData.nature =  item.ename
+                    }
+                }
+            })
+        },
+        //获得工作年限
+        getExperience(number) {
+            this.$store.dispatch('job/getExperience').then(res=> {
+                for(let item of res.data){
+                    if(item.evalue == number){
+                        this.pageData.experience =  item.ename
+                    }
+                }
+            })
+        },
+        //获得学历文凭
+        getEducation(number) {
+            this.$store.dispatch('job/getEducation').then(res=> {
+                for(let item of res.data){
+                    if(item.evalue == number){
+                        this.pageData.education =  item.ename
+                    }
+                }
+            })
+        },
+        //语言选择
+        getLanguage(number) {
+            this.$store.dispatch('job/getLanguage').then(res=> {
+                for(let item of res.data){
+                    if(item.evalue == number){
+                        this.pageData.language =  item.ename
+                    }
+                }
+            })
+        },
+        //获得薪资待遇
+        getSalary(number) {
+            this.$store.dispatch('job/getSalary').then(res=> {
+                for(let item of res.data){
+                    if(item.evalue == number){
+                        this.pageData.salary =  item.ename
+                    }
+                }
+            })
+        },
+        //获得公司规模
+        getCompanySize(number) {
+            this.$store.dispatch('job/getCompanySize').then(res=> {
+                for(let item of res.data){
+                    if(item.evalue == number){
+                        this.pageData.companySize =  item.ename
+                    }
+                }
+            })
+        },
+        //公司性质
+        getCompanyNature(number) {
+            this.$store.dispatch('job/getCompanyNature').then(res=> {
+                for(let item of res.data){
+                    if(item.id == number){
+                        this.pageData.companyNature =  item.nature_name
+                    }
+                }
+            })
+        },
+    },
+    mounted() {
+        this.getData();
+    },
+};
+</script>
+
+
+<style lang="less" scoped>
+.jobDetailsBox {
+    background: #F5F7FB;
+    padding: 30px;
+}
+.jobDetailsBoxBtnBox {
+    text-align: center;
+    margin-top: 50px;
+    margin-bottom: 30px;
+    button {
+        width: 180px;
+        height: 58px;
+        font-size: 20px;
+    }
+}
+.clearfix {
+    overflow: hidden;
+}
+.clearfix_2::after {
+    content: '';
+    display: block;
+    height: 0;
+    visibility: hidden;
+    clear: both;
+}
+.hiddenColor {
+    visibility: hidden;
+}
+.hand {
+    cursor: pointer;
+}
+.aTag_parent {
+    position: relative;
+}
+.aTag_parent>a,
+.aTag {
+    display: block;
+    width: 100%;
+    height: 100%;
+    position: absolute;
+    z-index: 99;
+    border: 0px;
+    top: 0px;
+    left: 0px;
+    background: rgba(0, 0, 0, 0);
+}
+.dot1 {
+    display: block;
+    word-break: keep-all;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+}
+.dot2 {
+    overflow: hidden;
+    display: -webkit-box;
+    -webkit-box-orient: vertical;
+    -webkit-line-clamp: 2;
+}
+input,
+img {
+    border: none;
+}
+.cover100 img {
+    display: block;
+    width: 100%;
+    height: 100%;
+    object-fit: cover;
+}
+.back100 {
+    background-size: 100% 100%;
+    background-repeat: no-repeat;
+}
+.index_main {
+    margin: 0 auto;
+}
+.slow_6 {
+    -webkit-transition: all .6s;
+    -moz-transition: all .6s;
+    -ms-transition: all .6s;
+    -o-transition: all .6s;
+    transition: all .6s;
+}
+.color_main {
+    box-sizing: border-box;
+    border: solid 1px #fbfbfb;
+}
+.index_1 {
+    margin-top: 20px;
+}
+.cruit_head_box {
+    border-bottom: solid 1px #D9D9D9;
+}
+.cruit_head_left {
+    float: left;
+}
+.cruit_head_a {
+    float: left;
+    height: 55px;
+    line-height: 55px;
+    color: #333;
+    font-weight: bold;
+    font-size: 22px;
+    border-bottom: solid 3px rgba(0, 0, 0, 0);
+    margin-right: 40px;
+}
+.cruit_head_only {
+    float: left;
+    height: 55px;
+    line-height: 55px;
+    color: #5570F1;
+    font-weight: bold;
+    font-size: 22px;
+    border-bottom: solid 3px #5570F1;
+}
+.demand_head_box {
+    .demand_head_name {
+        float: left;
+        color: #333;
+        font-size: 28px;
+        margin-top: 30px;
+        font-weight: bold;
+    }
+    .demand_head_btn {
+        float: right;
+        height: 45px;
+        line-height: 45px;
+        color: #fff;
+        font-size: 16px;
+        border-radius: 4px;
+        overflow: hidden;
+        padding: 0px 20px 0px 43px;
+        margin-top: 30px;
+        background-size: 18px 18px;
+    }
+}
+.cruit_li_2_foot {
+    margin: 20px 0px 30px;
+    .cruit_li_2_foot_tag {
+        float: left;
+        margin-right: 30px;
+        height: 24px;
+        line-height: 24px;
+        color: #999;
+        font-size: 16px;
+        background: no-repeat left center;
+        background-size: 24px 100%;
+        padding-left: 30px;
+    }
+    .cruit_li_2_foot_addres {
+        background-image: url(../../../src/assets/job/local.png);
+    }
+    .cruit_li_2_foot_exper {
+        background-image: url(../../../src/assets/job/briefcase.png);
+    }
+    .cruit_li_2_foot_educat {}
+    .cruit_li_2_foot_tag_in {
+        height: 24px;
+        line-height: 24px;
+        color: #999;
+        font-size: 16px;
+        float: left;
+    }
+    .cruit_li_2_foot_tag_in:nth-of-type(2) {
+        padding-left: 24px;
+        position: relative;
+    }
+    .cruit_li_2_foot_tag_in:nth-of-type(2)::after {
+        content: '';
+        display: block;
+        position: absolute;
+        width: 2px;
+        height: 2px;
+        background: #999;
+        left: 11px;
+        top: 11px;
+    }
+}
+.index_2 {
+    margin-top: 11px;
+}
+
+.demand_2 {
+    float: right;
+    width: 380px;
+}
+.demand_right_2 {
+    margin-top: 11px;
+}
+.demand_left_1 {}
+.demand_left_2 {
+    margin-top: 30px;
+}
+.demand_left_3 {
+    margin-top: 30px;
+}
+.demand_left_4 {
+    margin-top: 30px;
+}
+.demand_left_5 {
+    margin-top: 11px;
+}
+.demand_ul_1 {
+    margin-top: 32px;
+    .demand_ul_1_a {
+        height: 21px;
+        line-height: 21px;
+        color: #333;
+        font-size: 18px;
+        margin-bottom: 33px;
+    }
+    .demand_ul_1_a:nth-last-of-type(1) {
+        margin-bottom: 0px;
+    }
+    .demand_ul_1_a:hover {
+        color: #5570F1;
+    }
+}
+.demand_ul_2 {
+    margin-top: 30px;
+    .demand_li_2 {
+        display: flex;
+        margin-bottom: 30px;
+    }
+    .demand_li_2_label {
+        word-break: keep-all;
+        white-space: nowrap;
+        height: 24px;
+        line-height: 24px;
+        margin-right: 16px;
+        color: #333;
+        font-size: 16px;
+    }
+    .demand_li_2_text {
+        line-height: 24px;
+        color: #333;
+        font-size: 16px;
+    }
+}
+.demand_article_1 {
+    margin-top: 30px;
+}
+.demand_li_2:nth-last-of-type(1) {
+    margin-bottom: 0px;
+}
+.banner_1 {
+    height: 90px;
+    width: 1200px;
+    overflow: hidden;
+    margin: 30px auto 0px;
+    .banner_1_a {
+        height: 90px;
+        width: 1200px;
+        display: block;
+    }
+    .banner_1_img {
+        display: block;
+        width: 1200px;
+    }
+}
+.demand_crumb_box {
+    height: 22px;
+    margin: 30px auto 20px;
+    .demand_crumb_text {
+        display: inline-block;
+        height: 22px;
+        line-height: 22px;
+        color: #666;
+        font-size: 20px;
+        margin-right: 15px;
+    }
+    a.demand_crumb_text:hover {
+        color: #5570F1;
+    }
+}
+.seek_head_right_box {
+    float: right;
+    margin-top: 19px;
+}
+.seek_head_right_text {
+    float: left;
+    height: 21px;
+    line-height: 21px;
+    color: #999;
+    font-size: 16px;
+    margin-left: 22px;
+}
+@media screen and (min-width:1200px) {
+    /*pc_1440*/
+    @media screen and (max-width:1440px) {
+        /*1200*/
+    }
+    .pc_none {
+        display: none;
+    }
+}
+@media screen and (max-width:599px) {}
+@media screen and (max-width:320px) {}
+</style>

+ 189 - 0
src/views/job/jobOpportunitiesList.vue

@@ -0,0 +1,189 @@
+<template>
+    <div class="mainBox">
+        <!--搜索功能 start------------------------------------------------------------>
+        <div class="layerBox_search">
+            <div class="layerBoxLine">
+                <el-row>
+                    <el-col :span="6">
+                        <div class="searchBox">
+                            <div class="searchTitle">公司名称</div>
+                            <el-input placeholder="请输入公司名称" autocomplete="off" v-model="getApiData.business_name" />
+                        </div>
+                    </el-col>
+                    <el-col :span="6">
+                        <div class="searchBox">
+                            <div class="searchTitle">工作经验</div>
+                            <el-select v-model="getApiData.experience" placeholder="请选择工作经验" style="width: 100%;">
+                                <el-option v-for="item in experience" :key="item.evalue" :label="item.ename"
+                                    :value="item.evalue">
+                                </el-option>
+                            </el-select>
+                        </div>
+                    </el-col>
+                    <el-col :span="6">
+                        <div class="searchBox">
+                            <div class="searchTitle">薪资范围</div>
+                            <el-select v-model="getApiData.salary" placeholder="请选择薪资范围" style="width: 100%;">
+                                <el-option v-for="item in salary" :key="item.evalue" :label="item.ename"
+                                    :value="item.evalue">
+                                </el-option>
+                            </el-select>
+                        </div>
+                    </el-col>
+                </el-row>
+            </div>
+        </div>
+        <div class="layerBoxNoBg">
+            <div>
+                <el-button @click="clearSearchList">重置</el-button>
+                <el-button type="primary" @click="getData">搜索</el-button>
+            </div>
+        </div>
+        <!--搜索功能 end------------------------------------------------------------>
+
+        <!--表格内容 start------------------------------------------------------------>
+        <div class="layerBox">
+            <tableTitle :name="tableDivTitle" />
+            <el-row>
+                <template>
+                    <el-table :data="tableData" style="width: 100%">
+                        <el-table-column fixed prop="id" label="编号" width="50"></el-table-column>
+                        <el-table-column prop="business_name" label="公司名称" width=""></el-table-column>
+                        <el-table-column prop="title" label="招聘职位名称" width=""></el-table-column>
+                        <el-table-column prop="experience_ename" label="工作经验" width=""></el-table-column>
+                        <el-table-column prop="salary_ename" label="薪资范围" width=""></el-table-column>
+                        <el-table-column prop="updated_at" label="更新时间" width=""></el-table-column>
+                        <el-table-column fixed="right" label="操作" width="200" header-align="center">
+                            <template slot-scope="scope">
+                                <div class="listBtnBox">
+                                    <div class="listEditBtn" @click="goDetail(scope.row.id, tableData)">
+                                        <i class="el-icon-edit-outline"></i>查看
+                                    </div>
+                                </div>
+                            </template>
+                        </el-table-column>
+                    </el-table>
+                </template>
+            </el-row>
+        </div>
+        <!--分页 start------------------------------------------------------------>
+        <div class="alignBox">
+            <el-row>
+                <el-col :span="24">
+                    <el-pagination 
+                        @size-change="handleSizeChange" 
+                        :current-page="getApiData.page"
+                        @current-change="handleCurrentChange" 
+                        :page-size="10" 
+                        layout="total, prev, pager, next, jumper"
+                        :total="allCount">
+                    </el-pagination>
+                </el-col>
+            </el-row>
+        </div>
+        <!--分页 end------------------------------------------------------------>
+        <!--表格内容 end------------------------------------------------------------>
+    </div>
+</template>
+
+<script>
+//表格标题
+import tableTitle from './components/tableTitle';
+//引入公用样式
+import '@/styles/global.less';
+
+export default {
+    components: {
+        tableTitle,//表格标题
+    },
+    data() {
+        return {
+            //1.列表和分页相关 start ------------------------------------------------------------>
+            tableDivTitle: "求职信息列表",
+            tableData: [],//内容
+            experience: [],//工作经验列表
+            salary: [],//薪资范围列表
+            getApiData: {
+                business_name: "",//公司名称
+                experience: "",//工作经验
+                salary: "",//薪资
+                page: 1,//当前是第几页
+                pageSize: 10,//一共多少条
+            },
+            allCount: 0,//总条数
+            //分页相关 end ------------------------------------------------------------>
+        }
+    },
+    methods: {
+        //1.列表和分页相关 start ------------------------------------------------------------>
+        //1.1 开始请求列表信息方法
+        getData() {
+            this.$store.dispatch('job/getRecruitingList', this.getApiData).then(res => {
+                if (res.code == 200) {
+                    this.tableData = res.data.row;//给与内容
+                    this.allCount = res.data.count;//给与总条数
+                } else {
+                   //this.$message.error(res.message)
+                }
+            })
+        },
+        //1.2 获得工作经验
+        getExperience() {
+            this.$store.dispatch('job/getExperience', {}).then(res => {
+                if (res.code == 200) {
+                    this.experience = res.data;
+                }
+            })
+        },
+        //1.3 获得薪资范围
+        getSalary() {
+            this.$store.dispatch('job/getSalary', {}).then(res => {
+                if (res.code == 200) {
+                    this.salary = res.data;
+                }
+            })
+        },
+        //1.4 列表内容分页
+        //直接跳转
+        handleSizeChange(val) {
+            this.getApiData.page = val;
+            this.getData();
+        },
+        //1.5 点击分页
+        handleCurrentChange(val) {
+            this.getApiData.page = val;
+            this.getData();
+        },
+        //1.6 重置按钮
+        clearSearchList() {
+            this.tableData = [];
+            this.getApiData.business_name = "";
+            this.getApiData.experience = "";
+            this.getApiData.salary = "";
+            this.getApiData.page = 1;
+            this.getApiData.pageSize = 10;
+            this.getData();
+        },
+        //列表和分页相关 end ------------------------------------------------------------>
+
+        //2.跳转到详情start ------------------------------------------------------------>
+        goDetail(id) {
+            this.$router.push({
+                path: '/jobOpportunitiesDetails',
+                query: { id: id }
+            });
+        },
+        //添加求职信息end ------------------------------------------------------------>
+    },
+    mounted() {
+        //1.获得初始数据
+        this.getData();
+        //2.获得工作经验
+        this.getExperience();
+        //3.获得薪资范围
+        this.getSalary();
+    }
+}
+</script>
+
+<style scoped lang="less"></style>

+ 7 - 14
src/views/login/no-permission.vue

@@ -1,10 +1,10 @@
 <template>
     <div class="massageBox">
         <div class="massageImg"><img src="@/assets/login/iconContainer.png"></div>
-        <div class="massageTitle">暂无权限登录</div>
-        <div class="massageText">请联系管理员或客服人员操作</div>
+        <div class="massageTitle">登录状态异常</div>
+        <div class="massageText">登录凭证已过期或者网络异常,请重新登录</div>
         <div class="massageBtn">
-            <el-button type="primary" @click="goBack">返回原网站</el-button>
+            <el-button type="primary" @click="goLogin">重新登录</el-button>
         </div>
         <!-- <div class="massageBtn">
             <el-button  @click="goLogin">管理员登录</el-button>
@@ -22,18 +22,11 @@ export default {
         }
     },
     methods: {
-        goBack() {
-            //获取来源网站地址
-            let url = getUserUrl();
-            //返回来源网站
-            window.location.href = "http://" + url;
+        goLogin() {
+            this.$store.commit("user/LOGOUT");
+            //刷新页面
+            this.$router.push('/login');
         },
-        // goLogin() {
-        //     //设置来源网站为当前域名
-        //     setUserUrl(window.location.host,86400);
-        //     //跳转管理员登录页面
-        //     this.$router.push('/login');
-        // }
     }
 }
 </script>