Browse Source

科技人才

wuhongyuq 5 năm trước cách đây
mục cha
commit
851d432a17

+ 3 - 2
src/components/personnel/personnel.vue

@@ -17,10 +17,10 @@
       <el-col :span="24" class="main">
         <div class="w_1200">
           <el-col :span="5" class="mainMenu">
-            <mainMenu></mainMenu>
+            <mainMenu :liebiaoList="liebiaoList"></mainMenu>
           </el-col>
           <el-col :span="19" class="mainInfo">
-            <mainInfo :rencaiData="rencaiData" :jobsData="jobsData" :zhuanjiaData="zhuanjiaData" :canmoData="canmoData"></mainInfo>
+            <mainInfo v-on="$listeners" :rencaiData="rencaiData" :jobsData="jobsData" :zhuanjiaData="zhuanjiaData" :canmoData="canmoData"></mainInfo>
           </el-col>
           <el-col :span="24" class="messFabu">
             <messFabu :messList="messList"></messFabu>
@@ -58,6 +58,7 @@ export default {
     canmoData: null, //找参谋
     messList: null, //信息发布
     rencaiShowList: null, //人才展示
+    liebiaoList: null,
   },
   components: {
     top, //头部

+ 145 - 0
src/components/personnel/personnelist.vue

@@ -0,0 +1,145 @@
+<template>
+  <div id="policy">
+    <el-row>
+      <el-col :span="24" class="top">
+        <top></top>
+      </el-col>
+      <el-col :span="24" class="logo">
+        <div class="w_1200">
+          <logo :info="info"></logo>
+        </div>
+      </el-col>
+      <el-col :span="24" class="menu">
+        <div class="w_1200">
+          <menuInfo></menuInfo>
+        </div>
+      </el-col>
+      <el-col :span="24" class="main">
+        <div class="w_1200">
+          <el-col :span="5" class="fenlei">
+            <el-col :span="24" class="leftTop">
+              <fenlei :liebiaoList="liebiaoList" v-on="$listeners"></fenlei>
+            </el-col>
+            <el-col :span="24" class="leftDiao">
+              <examine></examine>
+            </el-col>
+          </el-col>
+          <el-col :span="19" class="rightcont">
+            <rightcont v-on="$listeners" :columnName="columnName" :contentList="contentList" :total="total" v-if="display === 'list'"></rightcont>
+            <policyrightcont v-else :columnTitle="columnTitle" :policyInfo="policyInfo"></policyrightcont>
+          </el-col>
+        </div>
+      </el-col>
+      <el-col :span="24" class="foot">
+        <div class="w_1200">
+          <foot :info="info"></foot>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/index/top.vue';
+import logo from '@/layout/index/logo.vue';
+import menuInfo from '@/layout/index/menuInfo.vue';
+import foot from '@/layout/index/foot.vue';
+import fenlei from '@/layout/shuju/fenleis.vue';
+import rightcont from '@/layout/shuju/rightcont.vue';
+import policyrightcont from '@/layout/shuju/policyrightcont.vue';
+import examine from '@/layout/personCenter/question.vue';
+export default {
+  name: 'policy',
+  props: {
+    info: null, //站点信息
+    liebiaoList: null,
+    columnName: null, //栏目标题
+    contentList: null, //内容
+    total: null,
+    display: { type: String, default: 'list' },
+    columnTitle: null, //信息详情头部栏目标题
+    policyInfo: null, //信息详情
+  },
+  components: {
+    top, //头部
+    logo, //logo
+    menuInfo, //导航
+    foot, //底部
+    fenlei, //左边分类
+    rightcont, //右边栏
+    policyrightcont,
+    examine,
+  },
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {
+    clickList({ id }) {
+      console.log(id);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.top {
+  height: 40px;
+  overflow: hidden;
+  background-color: rgba(11, 58, 125, 0.8);
+}
+.logo {
+  height: 200px;
+  overflow: hidden;
+}
+.menu {
+  height: 70px;
+  overflow: hidden;
+}
+.main {
+  min-height: 600px;
+  overflow: hidden;
+  margin: 10px 0;
+}
+.leftDiao {
+  background: #fff;
+  height: 370px;
+  overflow: hidden;
+}
+.leftTop {
+  background: #fff;
+  height: 420px;
+  overflow: hidden;
+  margin: 0 0 10px 0;
+}
+.main .fenlei {
+  float: left;
+  width: 240px;
+  min-height: 800px;
+  margin: 0 10px 0 0;
+  overflow: hidden;
+}
+.main .rightcont {
+  float: left;
+  width: 950px;
+  min-height: 800px;
+  overflow: hidden;
+  background-color: #fff;
+}
+.main .link {
+  float: left;
+  width: 100%;
+  height: 100px;
+  overflow: hidden;
+  background-color: #fff;
+}
+.foot {
+  float: left;
+  width: 100%;
+  height: 120px;
+  overflow: hidden;
+}
+</style>

+ 116 - 0
src/components/personnel/rencai.vue

@@ -0,0 +1,116 @@
+<template>
+  <div id="policy">
+    <el-row>
+      <el-col :span="24" class="top">
+        <top></top>
+      </el-col>
+      <el-col :span="24" class="logo">
+        <div class="w_1200">
+          <logo :info="info"></logo>
+        </div>
+      </el-col>
+      <el-col :span="24" class="menu">
+        <div class="w_1200">
+          <menuInfo></menuInfo>
+        </div>
+      </el-col>
+      <el-col :span="24" class="main">
+        <div class="w_1200">
+          <el-col :span="19" class="rightcont">
+            <rightcontrencai :policyInfo="policyInfo"></rightcontrencai>
+          </el-col>
+        </div>
+      </el-col>
+      <el-col :span="24" class="foot">
+        <div class="w_1200">
+          <foot :info="info"></foot>
+        </div>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import top from '@/layout/index/top.vue';
+import logo from '@/layout/index/logo.vue';
+import menuInfo from '@/layout/index/menuInfo.vue';
+import foot from '@/layout/index/foot.vue';
+import fenlei from '@/layout/shuju/fenleis.vue';
+import rightcontrencai from '@/layout/personnel/rightcontrencai.vue';
+
+export default {
+  name: 'policy',
+  props: {
+    policyInfo: null,
+    info: null, //站点信息
+  },
+  components: {
+    top, //头部
+    logo, //logo
+    menuInfo, //导航
+    foot, //底部
+    rightcontrencai, //右边栏
+  },
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {
+    clickList({ id }) {
+      console.log(id);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.w_1200 {
+  width: 1200px;
+  margin: 0 auto;
+}
+.top {
+  height: 40px;
+  overflow: hidden;
+  background-color: rgba(11, 58, 125, 0.8);
+}
+.logo {
+  height: 200px;
+  overflow: hidden;
+}
+.menu {
+  height: 70px;
+  overflow: hidden;
+}
+.main {
+  min-height: 600px;
+  overflow: hidden;
+  margin: 10px 0;
+}
+
+.main .fenlei {
+  float: left;
+  width: 240px;
+  min-height: 800px;
+  margin: 0 10px 0 0;
+  overflow: hidden;
+}
+.main .rightcont {
+  float: left;
+  width: 1200px;
+  min-height: 800px;
+  overflow: hidden;
+  background-color: #fff;
+}
+.main .link {
+  float: left;
+  width: 100%;
+  height: 100px;
+  overflow: hidden;
+  background-color: #fff;
+}
+.foot {
+  float: left;
+  width: 100%;
+  height: 120px;
+  overflow: hidden;
+}
+</style>

+ 65 - 0
src/layout/personnel/fenlei.vue

@@ -0,0 +1,65 @@
+<template>
+  <div id="fenlei">
+    <el-col class="swfl">
+      <el-image style="width:22px;height:22px;margin:0 5px -5px 0;" :src="src"></el-image>
+      <span>分类导航</span>
+    </el-col>
+    <el-col>
+      <el-menu default-active="1" class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose" text-color="#215299" active-text-color="#215299">
+        <el-menu-item index="1" v-for="(item, index) in liebiaoList" :key="index"
+          ><span slot="title" @click="clickUrl()">{{ item.name }}</span></el-menu-item
+        >
+      </el-menu>
+    </el-col>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'fenlei',
+  props: {
+    liebiaoList: null,
+  },
+  components: {},
+  data: () => ({
+    src: require('@/assets/swfl.png'),
+  }),
+  created() {},
+  computed: {},
+  methods: {
+    clickUrl() {
+      this.$router.push({ path: '/shuju/shujulist' });
+    },
+    handleOpen(key, keyPath) {
+      console.log(key, keyPath);
+    },
+    handleClose(key, keyPath) {
+      console.log(key, keyPath);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.swfl {
+  height: 60px;
+  width: 240px;
+  line-height: 60px;
+  background-color: #22529a;
+  text-align: center;
+}
+.swfl span {
+  font-size: 22px;
+  color: #ffffff;
+}
+/deep/.el-menu-item {
+  height: 60px;
+  text-align: center;
+  line-height: 60px;
+  border-bottom: 1px dashed;
+  font-size: 22px;
+}
+/deep/.el-menu-item:last-child {
+  border-bottom: none;
+}
+</style>

+ 35 - 22
src/layout/personnel/mainInfo.vue

@@ -4,25 +4,37 @@
       <el-col :span="24" class="info">
         <el-tabs v-model="activeName" type="card" @tab-click="handleClick">
           <el-tab-pane label="找人才" name="first">
+            <!-- <el-col :span="24" @click.native="$router.push({ path: '/personnel/rencai', query: { id: scoped.row.id } })">{{ scoped.row.name }}</el-col> -->
+
             <el-table :data="rencaiData" stripe style="width: 100%">
-              <el-table-column prop="title" label="简历名称" align="center"> </el-table-column>
+              <el-table-column label="简历名称" align="center">
+                <template slot-scope="scoped">
+                  <el-tooltip effect="dark" content="点击显示详情" placement="left">
+                    <el-col :span="24" @click.native="clickDetail(scoped.row)">{{ scoped.row.title }}</el-col>
+                  </el-tooltip>
+                </template>
+              </el-table-column>
               <el-table-column prop="name" label="姓名" align="center"> </el-table-column>
-              <el-table-column prop="sex" label="性别" align="center"> </el-table-column>
-              <el-table-column prop="age" label="年龄" align="center"> </el-table-column>
-              <el-table-column prop="jingyan" label="工作经验" align="center"> </el-table-column>
-              <el-table-column prop="edu" label="学历" align="center"> </el-table-column>
-              <el-table-column prop="jobs" label="期望职位" align="center"> </el-table-column>
-              <el-table-column prop="date" label="更新时间" align="center"> </el-table-column>
+              <el-table-column prop="gender" label="性别" align="center"> </el-table-column>
+              <el-table-column prop="nation" label="民族" align="center"> </el-table-column>
+              <el-table-column prop="birth" label="出生年月" align="center"> </el-table-column>
+              <el-table-column prop="marital" label="婚姻状况" align="center"> </el-table-column>
+              <el-table-column prop="education" label="学历" align="center"> </el-table-column>
+              <el-table-column prop="phone" label="手机号" align="center"> </el-table-column>
+              <el-table-column prop="email" label="邮箱" align="center"> </el-table-column>
+              <el-table-column prop="job_nature" label="工作性质" align="center"> </el-table-column>
+              <el-table-column prop="workplace" label="期望工作地点" align="center"> </el-table-column>
+              <el-table-column prop="salary" label="薪资要求" align="center"> </el-table-column>
             </el-table>
           </el-tab-pane>
           <el-tab-pane label="找工作" name="second">
             <el-table :data="jobsData" stripe style="width: 100%">
-              <el-table-column prop="title" label="招聘信息名称" align="center"> </el-table-column>
-              <el-table-column prop="company" label="公司名称" align="center"> </el-table-column>
-              <el-table-column prop="address" label="工作地点" align="center"> </el-table-column>
-              <el-table-column prop="jingyan" label="工作经验" align="center"> </el-table-column>
-              <el-table-column prop="num" label="招聘人数" align="center"> </el-table-column>
-              <el-table-column prop="edu" label="学历" align="center"> </el-table-column>
+              <el-table-column prop="name" label="招聘信息名称" align="center"> </el-table-column>
+              <el-table-column prop="profession" label="公司名称" align="center"> </el-table-column>
+              <el-table-column prop="workplace" label="工作地点" align="center"> </el-table-column>
+              <el-table-column prop="workexp" label="工作经验" align="center"> </el-table-column>
+              <el-table-column prop="people_number" label="招聘人数" align="center"> </el-table-column>
+              <el-table-column prop="education" label="学历" align="center"> </el-table-column>
               <el-table-column prop="xinzi" label="职位月薪" align="center"> </el-table-column>
               <el-table-column prop="date" label="发布时间" align="center"> </el-table-column>
             </el-table>
@@ -30,18 +42,18 @@
           <el-tab-pane label="找专家" name="third">
             <el-table :data="zhuanjiaData" stripe style="width: 100%">
               <el-table-column prop="name" label="姓名" align="center"> </el-table-column>
-              <el-table-column prop="sex" label="性别" align="center"> </el-table-column>
-              <el-table-column prop="age" label="年龄" align="center"> </el-table-column>
-              <el-table-column prop="zhicheng" label="职称" align="center"> </el-table-column>
-              <el-table-column prop="zhiwu" label="职务" align="center"> </el-table-column>
-              <el-table-column prop="lingyu" label="可咨询领域" align="center"> </el-table-column>
+              <el-table-column prop="gender" label="性别" align="center"> </el-table-column>
+              <el-table-column prop="birth" label="年龄" align="center"> </el-table-column>
+              <el-table-column prop="technical_actual" label="职称" align="center"> </el-table-column>
+              <el-table-column prop="position" label="职务" align="center"> </el-table-column>
+              <el-table-column prop="field" label="可咨询领域" align="center"> </el-table-column>
             </el-table>
           </el-tab-pane>
           <el-tab-pane label="找参谋" name="fourth">
             <el-table :data="canmoData" stripe style="width: 100%">
               <el-table-column prop="name" label="名称" align="center"> </el-table-column>
-              <el-table-column prop="type" label="信息类型" align="center"> </el-table-column>
-              <el-table-column prop="person" label="发布人" align="center"> </el-table-column>
+              <el-table-column prop="state" label="信息类型" align="center"> </el-table-column>
+              <el-table-column prop="user_name" label="发布人" align="center"> </el-table-column>
               <el-table-column prop="date" label="发布时间" align="center"> </el-table-column>
             </el-table>
           </el-tab-pane>
@@ -72,8 +84,9 @@ export default {
   created() {},
   computed: {},
   methods: {
-    handleClick(tab, event) {
-      console.log(tab, event);
+    handleClick() {},
+    clickDetail(row) {
+      this.$emit('detail', { data: row });
     },
   },
 };

+ 11 - 8
src/layout/personnel/mainMenu.vue

@@ -1,16 +1,14 @@
 <template>
-  <div id="mainMenu">
+  <div id="fenlei">
     <el-col class="swfl">
       <el-image style="width:22px;height:22px;margin:0 5px -5px 0;" :src="src"></el-image>
       <span>分类导航</span>
     </el-col>
     <el-col>
       <el-menu default-active="1" class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose" text-color="#215299" active-text-color="#215299">
-        <el-menu-item index="1"><span slot="title">招聘信息</span></el-menu-item>
-        <el-menu-item index="2"><span slot="title">就业指导</span></el-menu-item>
-        <el-menu-item index="3"><span slot="title">学习实践</span></el-menu-item>
-        <el-menu-item index="4"><span slot="title">勤工俭学</span></el-menu-item>
-        <el-menu-item index="5"><span slot="title">工作顾问</span></el-menu-item>
+        <el-menu-item index="1" v-for="(item, index) in liebiaoList" :key="index"
+          ><span slot="title" @click="clickUrl()">{{ item.name }}</span></el-menu-item
+        >
       </el-menu>
     </el-col>
   </div>
@@ -18,8 +16,10 @@
 
 <script>
 export default {
-  name: 'mainMenu',
-  props: {},
+  name: 'fenlei',
+  props: {
+    liebiaoList: null,
+  },
   components: {},
   data: () => ({
     src: require('@/assets/swfl.png'),
@@ -27,6 +27,9 @@ export default {
   created() {},
   computed: {},
   methods: {
+    clickUrl(id) {
+      this.$emit('clickLists', { id });
+    },
     handleOpen(key, keyPath) {
       console.log(key, keyPath);
     },

+ 88 - 0
src/layout/personnel/policyrightcont.vue

@@ -0,0 +1,88 @@
+<template>
+  <div id="policyrightcont">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="24" class="topInfo">
+          <span>{{ columnTitle }}</span>
+        </el-col>
+        <el-col :span="24" class="infoMess">
+          <el-col :span="24" class="title">
+            {{ policyInfo.title }}
+          </el-col>
+          <el-col :span="24" class="infoDate">
+            <p>
+              <span>发布人:{{ policyInfo.publish }}</span>
+              <span>来源:{{ policyInfo.orgin }}</span>
+              <span>发布时间: {{ policyInfo.meta && policyInfo.meta.createdAt ? new Date(policyInfo.meta.createdAt).toLocaleDateString() : '' || '' }}</span>
+            </p>
+          </el-col>
+          <el-col v-if="policyInfo.picture" class="image">
+            <el-image style="width:50%" :src="policyInfo.picture"></el-image>
+          </el-col>
+          <el-col :span="24" class="content">
+            <p v-html="policyInfo.content"></p>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'policyrightcont',
+  props: {
+    columnTitle: null,
+    policyInfo: null,
+  },
+  components: {},
+  data: () => ({}),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+p {
+  padding: 0;
+  margin: 0;
+}
+.info {
+  padding: 0 20px;
+}
+.topInfo {
+  height: 60px;
+  line-height: 60px;
+  font-size: 22px;
+}
+.infoMess .title {
+  line-height: 30px;
+  text-align: center;
+  font-size: 16px;
+  font-weight: bold;
+  color: #000000;
+  margin: 0 0 20px 0;
+}
+.infoDate {
+  height: 36px;
+  line-height: 36px;
+}
+.infoDate p {
+  width: 700px;
+  background: #eeeeee;
+  margin: 0 105px;
+}
+.infoDate p span {
+  font-size: 14px;
+  color: #000;
+  padding: 0 0 0 80px;
+}
+.infoMess .image {
+  text-align: center;
+  margin: 20px 0 0 0;
+}
+.content {
+  padding: 0px 0 20px 0;
+}
+</style>

+ 109 - 0
src/layout/personnel/rightcont.vue

@@ -0,0 +1,109 @@
+<template>
+  <div id="rightcont">
+    <el-col class="zhengce">
+      <el-col :span="24" class="topTitle">
+        {{ columnName }}
+      </el-col>
+      <el-col :span="24" class="info">
+        <ul>
+          <li v-for="(item, index) in contentList" :key="index" @click="$emit('fetch', item.id)">
+            <el-col :span="21" class="title textOver">{{ item.title }}</el-col>
+            <el-col :span="3" class="date">
+              {{ item.meta && item.meta.createdAt ? new Date(item.meta.createdAt).toLocaleDateString() : '' || '' }}
+            </el-col>
+          </li>
+        </ul>
+        <el-col class="page" :span="24">
+          <el-pagination
+            @size-change="handleSizeChange"
+            @current-change="handleCurrentChange"
+            :current-page="currentPage"
+            layout="total,  prev, pager, next, jumper"
+            :total="total"
+          >
+          </el-pagination>
+        </el-col>
+      </el-col>
+    </el-col>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'rightcont',
+  props: {
+    columnName: null,
+    contentList: null,
+    total: null,
+  },
+  components: {},
+  data: () => ({
+    currentPage: 1,
+  }),
+  created() {},
+  computed: {},
+  methods: {
+    handleSizeChange(val) {
+      console.log(`每页 ${val} 条`);
+    },
+    handleCurrentChange(val) {
+      console.log(`当前页: ${val}`);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+ul {
+  margin: 0;
+}
+li {
+  padding: 0;
+  margin: 0;
+  color: #a8abb7;
+}
+.zhengce {
+  padding: 20px;
+  overflow: hidden;
+}
+.topTitle {
+  font-size: 22px;
+  color: #22529a;
+  margin: 0 0 20px 0;
+}
+.info {
+  overflow: hidden;
+}
+.info ul {
+  height: 678px;
+  overflow: hidden;
+  padding: 0 0 0 20px;
+}
+.info ul li {
+  float: left;
+  width: 100%;
+  padding: 0 0 13px 0;
+}
+.info ul li .title {
+  font-size: 16px;
+  color: #60636d;
+}
+.info ul li .date {
+  font-size: 16px;
+  color: #a8abb7;
+  text-align: right;
+}
+.info ul li:hover {
+  cursor: pointer;
+}
+.info ul li:hover .title {
+  color: #22529a;
+}
+.info ul li:hover .date {
+  color: #22529a;
+}
+.page {
+  padding: 11px 0;
+  text-align: center;
+}
+</style>

+ 198 - 0
src/layout/personnel/rightcontrencai.vue

@@ -0,0 +1,198 @@
+<template>
+  <div id="rightcont">
+    <el-col class="zhengce">
+      <el-col class="tittop"> <el-col class="tittxt">个人简历</el-col></el-col>
+      <el-col class="titleimage">
+        <el-col :span="24">
+          <el-col :span="8" class="bgcolor">
+            <el-col class="images" :span="12"> <el-image style="width:140px;height:140px" :src="policyInfo.imgpath"></el-image> </el-col>
+            <el-col :span="8" class="wenzi">
+              <el-col> 民族: {{ policyInfo.nation }}</el-col>
+              <el-col> 学历:{{ policyInfo.education }}</el-col>
+              <el-col> 电话:{{ policyInfo.phone }}</el-col>
+              <el-col> 邮箱:{{ policyInfo.email }}</el-col>
+            </el-col>
+          </el-col>
+          <el-col :span="16" class="titletop1">
+            <el-col :span="8" class="wenzi">
+              <el-col> 求职意向: {{ policyInfo.profession }}</el-col>
+              <el-col> 性别:{{ policyInfo.gender == 0 ? '男' : '女' }}</el-col>
+            </el-col>
+          </el-col>
+        </el-col>
+      </el-col>
+      <el-col class="date">更新时间:2017-06-02</el-col>
+      <el-col class="xinxi"> <el-col class="xinxiTitle">详细信息</el-col></el-col>
+      <el-col class="context">
+        <el-col class="context_01">
+          <el-col :span="12"> <i class="el-icon-edit"></i>身份证号:{{ policyInfo.cardnumber }}</el-col>
+          <el-col :span="12"> <i class="el-icon-s-check"></i>户口所在:{{ policyInfo.hukou }}</el-col></el-col
+        >
+        <el-col class="context_02"
+          ><el-col :span="12"> <i class="el-icon-house"></i>当前住址:{{ policyInfo.addr }}</el-col>
+          <el-col :span="12"><i class="el-icon-female"></i> 婚姻状况:{{ policyInfo.marital == 0 ? '已婚' : '未婚' }}</el-col></el-col
+        >
+      </el-col>
+
+      <el-col class="xinxi"> <el-col class="xinxiTitle">自我简介</el-col></el-col>
+      <el-col class="contextje">
+        <el-col class="context_01">
+          <el-col :span="12"> <i class="el-icon-edit"></i>工作性质:{{ policyInfo.job_nature == 0 ? '兼职' : '全职' }}</el-col>
+          <el-col :span="12"> <i class="el-icon-s-check"></i>薪资要求:{{ policyInfo.salary }}</el-col></el-col
+        >
+        <el-col class="context_02"
+          ><el-col :span="12"> <i class="el-icon-house"></i>工作经验:{{ policyInfo.work_exp }}</el-col>
+          <el-col :span="12"><i class="el-icon-female"></i> 目前状况:{{ policyInfo.current }}</el-col></el-col
+        >
+        <el-col :span="12"> <i class="el-icon-house"></i>期望工作地点:{{ policyInfo.workplace }}</el-col
+        ><el-col :span="12"></el-col>
+      </el-col>
+      <el-col class="xinxi"> <el-col class="xinxiTitle">项目经验</el-col></el-col>
+      <el-col class="context"> {{ policyInfo.project_exp }} </el-col>
+      <el-col class="xinxi"> <el-col class="xinxiTitle">教育经历</el-col></el-col>
+      <el-col class="context"> {{ policyInfo.education_exp }}</el-col>
+      <el-col class="xinxi"> <el-col class="xinxiTitle">语言能力</el-col></el-col>
+      <el-col class="context">{{ policyInfo.language }} </el-col>
+      <el-col class="xinxi"> <el-col class="xinxiTitle">专业技能</el-col></el-col>
+      <el-col class="context"> {{ policyInfo.skills }}</el-col>
+      <el-col class="xinxi"> <el-col class="xinxiTitle">兴趣爱好</el-col></el-col>
+      <el-col class="context">{{ policyInfo.hobbies }} </el-col>
+      <el-col class="page" :span="24">
+        <el-pagination
+          @size-change="handleSizeChange"
+          @current-change="handleCurrentChange"
+          :current-page="currentPage"
+          layout="total,  prev, pager, next, jumper"
+          :total="total"
+        >
+        </el-pagination>
+      </el-col>
+    </el-col>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'rightcont',
+  props: { policyInfo: null, columnName: null, contentList: null, total: null },
+  components: {},
+  data: () => ({
+    imageUrl: '',
+    currentPage: 1,
+  }),
+  created() {},
+  computed: {},
+  methods: {
+    handleSizeChange(val) {
+      console.log(`每页 ${val} 条`);
+    },
+    handleCurrentChange(val) {
+      console.log(`当前页: ${val}`);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.topTitle {
+  font-size: 22px;
+  color: #22529a;
+  margin: 0 0 20px 0;
+}
+
+.tittxt {
+  width: 135px;
+  height: 60px;
+  line-height: 60px;
+  background: #215299;
+  text-align: center;
+  color: #fff;
+  font-size: 16px;
+  font-family: 'Microsoft Yahei';
+}
+.info {
+  overflow: hidden;
+}
+.tittop {
+  width: 1200px;
+  height: 60px;
+  line-height: 60px;
+  border-bottom: 1px solid #215299;
+}
+.titleimage {
+  margin: 20px;
+  width: 1140px;
+  height: 200px;
+}
+
+.bgcolor {
+  width: 380px;
+  height: 200px;
+  background-color: #215299;
+}
+.avatar {
+  width: 178px;
+  height: 178px;
+  display: block;
+}
+.page {
+  padding: 11px 0;
+  text-align: center;
+}
+
+.date {
+  width: 180px;
+  height: 52px;
+  line-height: 52px;
+  margin-left: 990px;
+}
+
+.xinxi {
+  width: 1160px;
+  height: 40px;
+  line-height: 60px;
+  border-bottom: 1px solid #215299;
+  margin: 0 20px 0 20px;
+}
+
+.xinxiTitle {
+  width: 135px;
+  height: 40px;
+  line-height: 40px;
+  background: #215299;
+  text-align: center;
+  color: #fff;
+  font-size: 16px;
+  font-family: 'Microsoft Yahei';
+}
+
+.images {
+  width: 140px;
+  height: 140px;
+  margin: 20px;
+  background-color: #fff;
+}
+.wenzi {
+  margin-top: 20px;
+  color: #fff;
+  line-height: 30px;
+}
+.titletop1 {
+  height: 200px;
+  background-color: aquamarine;
+}
+.context {
+  height: 170px;
+  margin: 20px 0 0 30px;
+}
+.context_01 {
+  height: 85px;
+}
+.context_02 {
+  height: 85px;
+}
+.contextje {
+  height: 200px;
+  margin: 20px 0 0 30px;
+}
+</style>

+ 11 - 0
src/router/index.js

@@ -150,6 +150,11 @@ const routes = [
     name: 'personnel',
     component: () => import('../views/personnel/personnel.vue'),
   },
+  {
+    path: '/personnel/rencai',
+    component: () => import('../views/personnel/rencai.vue'),
+  },
+
   //科技人才-招聘信息
   {
     path: '/personnel/recruit',
@@ -162,6 +167,12 @@ const routes = [
     name: 'guidance',
     component: () => import('../views/personnel/guidance.vue'),
   },
+  {
+    path: '/personnel/personnelist',
+    name: 'personnelist',
+    component: () => import('../views/personnel/personnelist.vue'),
+  },
+
   // 个人中心-基本信息
   {
     path: '/personCenter/user',

+ 4 - 1
src/store/index.js

@@ -10,7 +10,8 @@ import recordColumn from './recordColumn';
 import recordNews from './recordNews';
 import serveColumn from './serveColumn';
 import serveNews from './serveNews';
-
+import policiesColumn from './policiesColumn';
+import policiesNew from './policiesNew';
 Vue.use(Vuex);
 
 export default new Vuex.Store({
@@ -25,6 +26,8 @@ export default new Vuex.Store({
     recordNews,
     serveColumn,
     serveNews,
+    policiesColumn,
+    policiesNew,
   },
   state: {},
   mutations: {},

+ 38 - 0
src/store/policiesColumn.js

@@ -0,0 +1,38 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  columnInfo: `/api/talent/column`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    const res = await this.$axios.$get(`${api.columnInfo}`, { skip, limit, ...info });
+    return res;
+  },
+  async create({ commit }, payload) {
+    const res = await this.$axios.$post(`${api.columnInfo}`, payload);
+    return res;
+  },
+  async fetch({ commit }, payload) {
+    const res = await this.$axios.$get(`${api.columnInfo}/${payload}`);
+    return res;
+  },
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.columnInfo}/update/${id}`, data);
+    return res;
+  },
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.columnInfo}/${payload}`);
+    return res;
+  },
+};
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 38 - 0
src/store/policiesNew.js

@@ -0,0 +1,38 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  newsInfo: `/api/talent/resume`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  async query({ commit }, { skip = 0, limit, column_id, ...info } = {}) {
+    const res = await this.$axios.$get(`${api.newsInfo}`, { skip, limit, column_id, ...info });
+    return res;
+  },
+  async create({ commit }, payload) {
+    const res = await this.$axios.$post(`${api.newsInfo}`, payload);
+    return res;
+  },
+  async fetch({ commit }, payload) {
+    const res = await this.$axios.$get(`${api.newsInfo}/${payload}`);
+    return res;
+  },
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.newsInfo}/update/${id}`, data);
+    return res;
+  },
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.newsInfo}/${payload}`);
+    return res;
+  },
+};
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 38 - 0
src/store/policiesxinxi.js

@@ -0,0 +1,38 @@
+import Vue from 'vue';
+import Vuex from 'vuex';
+import _ from 'lodash';
+Vue.use(Vuex);
+const api = {
+  columnInfo: `/api/talent/recruitment`,
+};
+const state = () => ({});
+const mutations = {};
+
+const actions = {
+  async query({ commit }, { skip = 0, limit, ...info } = {}) {
+    const res = await this.$axios.$get(`${api.columnInfo}`, { skip, limit, ...info });
+    return res;
+  },
+  async create({ commit }, payload) {
+    const res = await this.$axios.$post(`${api.columnInfo}`, payload);
+    return res;
+  },
+  async fetch({ commit }, payload) {
+    const res = await this.$axios.$get(`${api.columnInfo}/${payload}`);
+    return res;
+  },
+  async update({ commit }, { id, ...data }) {
+    const res = await this.$axios.$post(`${api.columnInfo}/update/${id}`, data);
+    return res;
+  },
+  async delete({ commit }, payload) {
+    const res = await this.$axios.$delete(`${api.columnInfo}/${payload}`);
+    return res;
+  },
+};
+export default {
+  namespaced: true,
+  state,
+  mutations,
+  actions,
+};

+ 55 - 64
src/views/personnel/personnel.vue

@@ -8,12 +8,20 @@
       :canmoData="canmoData"
       :messList="messList"
       :rencaiShowList="rencaiShowList"
+      :liebiaoList="liebiaoList"
+      @detail="clickDetail"
     ></personnel-detail>
   </div>
 </template>
 
 <script>
 import personnelDetail from '@/components/personnel/personnel.vue';
+
+import { createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: mapSite } = createNamespacedHelpers('site');
+const { mapActions: mapColumn } = createNamespacedHelpers('policiesColumn');
+const { mapActions: mapNews } = createNamespacedHelpers('policiesNew');
+
 export default {
   name: 'personnel',
   props: {},
@@ -21,68 +29,12 @@ export default {
     personnelDetail,
   },
   data: () => ({
-    info: {
-      logo: require('@/assets/logo.png'),
-      banquan: '版权所有:吉林省计算中心',
-      jishu: '技术支持:长春市福瑞科技有限公司',
-      youbian: '邮编:130000',
-      chuanzhen: '传真:239823982',
-      address: '地址:吉林省长春市朝阳区前进大街1244号',
-      phone: '电话:0431-1234567',
-      email: '邮箱:123456@163.com',
-    },
-    rencaiData: [
-      {
-        title: '标题',
-        name: '顾红伟',
-        sex: '男',
-        age: '24',
-        jingyan: '无经验',
-        edu: '本科',
-        jobs: 'IT',
-        date: '2019-12-34',
-      },
-      {
-        title: '六条数据',
-        name: '顾红伟',
-        sex: '男',
-        age: '24',
-        jingyan: '无经验',
-        edu: '本科',
-        jobs: 'IT',
-        date: '2019-12-34',
-      },
-    ],
-    jobsData: [
-      {
-        title: '标题',
-        company: '长春福瑞科技有限公司',
-        address: '吉林省长春市',
-        jingyan: '无经验',
-        num: '2',
-        edu: '本科',
-        xinzi: '1k-2k',
-        date: '2019-12-31',
-      },
-    ],
-    zhuanjiaData: [
-      {
-        name: '不知道',
-        sex: '男',
-        age: '20',
-        zhicheng: '初级职称',
-        zhiwu: '董事长',
-        lingyu: '计算机',
-      },
-    ],
-    canmoData: [
-      {
-        name: '标题',
-        type: '其他',
-        person: 'HSD',
-        date: '2019-12-31',
-      },
-    ],
+    info: {},
+    liebiaoList: [],
+    rencaiData: [],
+    jobsData: [],
+    zhuanjiaData: [],
+    canmoData: [],
     messList: [
       {
         pic: require('@/assets/message1.jpg'),
@@ -136,9 +88,48 @@ export default {
       },
     ],
   }),
-  created() {},
+  async created() {
+    this.searchSite();
+    this.searchColumn();
+    this.searchInfo();
+  },
   computed: {},
-  methods: {},
+  methods: {
+    ...mapSite(['showInfo']),
+    ...mapColumn({ columnList: 'query', columnInfo: 'fetch' }),
+    ...mapNews({ newsList: 'query', newsInfo: 'fetch' }),
+
+    // 查询站点信息
+    async searchSite() {
+      let res = await this.showInfo();
+      let object = JSON.parse(JSON.stringify(res.data));
+      if (object) {
+        this.$set(this, `info`, res.data);
+      } else {
+        this.$message.error(res.errmsg ? res.errmsg : 'error');
+      }
+    },
+    // 查询科技政务栏目
+    async searchColumn({ ...info } = {}) {
+      const res = await this.columnList({ ...info });
+      this.$set(this, `liebiaoList`, res.data);
+      console.log(res);
+      // for (const val of res.data) {
+      //   this.tpxwSearch({ column_id: val.id, site: val.site });
+      // }
+    },
+
+    async searchInfo({ skip = 0, limit = 10, ...info } = {}) {
+      const res = await this.newsList({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `rencaiData`, res.data);
+      }
+    },
+    clickDetail({ data }) {
+      // 点击这个方法,跳转页面,并把id传过去,并用id查询详情
+      this.$router.push({ path: '/personnel/rencai', query: { id: data.id } });
+    },
+  },
 };
 </script>
 

+ 102 - 0
src/views/personnel/personnelist.vue

@@ -0,0 +1,102 @@
+<template>
+  <div id="shujulist">
+    <personnelist-detail
+      :info="info"
+      :liebiaoList="liebiaoList"
+      :display="display"
+      :columnName="columnName"
+      :contentList="contentList"
+      :total="total"
+      :columnTitle="columnTitle"
+      :policyInfo="policyInfo"
+      @clickLists="submit"
+      @fetch="fetchInfo"
+    ></personnelist-detail>
+  </div>
+</template>
+
+<script>
+import personnelistDetail from '@/components/personnel/personnelist.vue';
+import { createNamespacedHelpers, mapGetters } from 'vuex';
+import _ from 'loadsh';
+const { mapActions: mapSite } = createNamespacedHelpers('site');
+const { mapActions: mappolicyColumn } = createNamespacedHelpers('policiesColumn');
+const { mapActions: mappolicyNews } = createNamespacedHelpers('policiesxinxi');
+
+export default {
+  name: 'shujulist',
+  props: {},
+  components: { personnelistDetail },
+  data: () => ({
+    info: {},
+    liebiaoList: [],
+    display: 'list',
+    columnName: '',
+    contentList: [],
+    total: 1,
+    leftId: '',
+    columnTitle: '',
+    policyInfo: {},
+  }),
+  async created() {
+    this.searchSite();
+    await this.policyColumn();
+    await this.defaultColumn();
+  },
+  computed: {},
+  methods: {
+    ...mapSite(['showInfo']),
+    ...mappolicyColumn({ policyColumns: 'query', policyfetch: 'fetch' }),
+    ...mappolicyNews({ policyNew: 'query', newsFetch: 'fetch' }),
+    // 查询站点信息
+    async searchSite() {
+      let res = await this.showInfo();
+      let object = JSON.parse(JSON.stringify(res.data));
+      if (object) {
+        this.$set(this, `info`, res.data);
+      } else {
+        this.$message.error(res.errmsg ? res.errmsg : 'error');
+      }
+    },
+    async policyColumn({ ...info } = {}) {
+      const res = await this.policyColumns({ ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `liebiaoList`, res.data);
+      }
+    },
+    submit({ id }) {
+      this.$set(this, `leftId`, id);
+      this.display = 'list';
+      this.searchRight();
+    },
+    async searchRight({ skip = 0, limit = 10, column_id } = {}) {
+      const res = await this.policyNew({ skip, limit, column_id: this.leftId });
+      for (const val of res.data) {
+        const result = await this.policyfetch(val.column_id);
+        val.column_name = result.data.name;
+      }
+      this.$set(this, `contentList`, res.data);
+      this.$set(this, `total`, res.data.length);
+      for (const val of res.data) {
+        this.$set(this, `columnName`, val.column_name);
+      }
+    },
+    async defaultColumn() {
+      if (!(this.liebiaoList.length > 0)) return;
+      let id = _.get(this.liebiaoList[0], 'id', false);
+      if (!id) return;
+      this.submit({ id });
+    },
+    async fetchInfo(id) {
+      this.display = 'detail';
+      const res = await this.newsFetch(id);
+      const result = await this.policyfetch(res.data.column_id);
+      this.$set(this, `columnTitle`, result.data.name);
+      this.$set(this, `policyInfo`, res.data);
+      // 查询详情,赋值
+    },
+  },
+};
+</script>
+
+<style lang="scss" scoped></style>

+ 65 - 0
src/views/personnel/rencai.vue

@@ -0,0 +1,65 @@
+<template>
+  <div id="personnel">
+    <rencai-detail :info="info" :policyInfo="policyInfo"></rencai-detail>
+  </div>
+</template>
+
+<script>
+import rencaiDetail from '@/components/personnel/rencai.vue';
+
+import { createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: mapSite } = createNamespacedHelpers('site');
+const { mapActions: mapColumn } = createNamespacedHelpers('policiesColumn');
+const { mapActions: mapNews } = createNamespacedHelpers('policiesNew');
+
+export default {
+  name: 'personnel',
+  props: {},
+  components: {
+    rencaiDetail,
+  },
+  data: () => ({
+    policyInfo: {},
+    info: {},
+  }),
+  async created() {
+    this.searchSite();
+    this.searchColumn();
+    this.searchInfo();
+  },
+  computed: {},
+  methods: {
+    ...mapSite(['showInfo']),
+    ...mapColumn({ columnList: 'query', columnInfo: 'fetch' }),
+    ...mapNews({ newsList: 'query', newsInfo: 'fetch' }),
+    // 查询站点信息
+    async searchSite() {
+      let res = await this.showInfo();
+      let object = JSON.parse(JSON.stringify(res.data));
+      if (object) {
+        this.$set(this, `info`, res.data);
+      } else {
+        this.$message.error(res.errmsg ? res.errmsg : 'error');
+      }
+    },
+    // 查询科技政务栏目
+    async searchColumn({ ...info } = {}) {
+      const res = await this.columnList({ ...info });
+      this.$set(this, `liebiaoList`, res.data);
+      console.log(res);
+      // for (const val of res.data) {
+      //   this.tpxwSearch({ column_id: val.id, site: val.site });
+      // }
+    },
+    async searchInfo() {
+      let detailId = this.$route.query.id;
+      const res = await this.newsInfo(detailId);
+      const result = await this.columnInfo(res.data.column_id);
+
+      this.$set(this, `policyInfo`, res.data);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped></style>

+ 6 - 0
vue.config.js

@@ -51,6 +51,12 @@ module.exports = {
         ws: true,
         // pathRewrite: { '^/api/affairs': '/api' },
       },
+      '/api/talent': {
+        target: 'http://free.liaoningdoupo.com',
+        changeOrigin: true,
+        ws: true,
+        // pathRewrite: { '^/api/affairs': '/api' },
+      },
     },
   },
 };