Browse Source

人才信息完成更新

guhongwei 5 years ago
parent
commit
464079a9c4

+ 5 - 0
package-lock.json

@@ -3569,6 +3569,11 @@
         "assert-plus": "^1.0.0"
       }
     },
+    "dayjs": {
+      "version": "1.8.19",
+      "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.8.19.tgz",
+      "integrity": "sha512-7kqOoj3oQSmqbvtvGFLU5iYqies+SqUiEGNT0UtUPPxcPYgY1BrkXR0Cq2R9HYSimBXN+xHkEN4Hi399W+Ovlg=="
+    },
     "de-indent": {
       "version": "1.0.2",
       "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",

+ 1 - 0
package.json

@@ -10,6 +10,7 @@
   "dependencies": {
     "axios": "^0.19.0",
     "core-js": "^3.4.4",
+    "dayjs": "^1.8.19",
     "element-ui": "^2.13.0",
     "jsonwebtoken": "^8.5.1",
     "loadsh": "0.0.4",

+ 117 - 0
src/layout/personnel/resume.vue

@@ -0,0 +1,117 @@
+<template>
+  <div id="resume">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="24" class="top">
+          <el-col :span="12" class="topTitle">
+            <span>人才信息列表</span>
+          </el-col>
+          <el-col :span="12" class="topAdd">
+            <el-button type="primary" size="mini" @click="addData()"><i class="el-icon-plus"></i></el-button>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="list">
+          <template>
+            <el-table :data="resumeInfo" style="width: 100%">
+              <el-table-column prop="title" label="简历名称" align="center"> </el-table-column>
+              <el-table-column prop="name" 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">
+                <template v-slot="scoped">
+                  {{ `${scoped.row.marital}` === `0` ? '未婚' : '已婚' }}
+                </template>
+              </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">
+                <template v-slot="scoped">
+                  {{ `${scoped.row.job_nature}` === `0` ? '兼职' : '全职' }}
+                </template>
+              </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-column prop="current" label="目前状态" align="center"> </el-table-column>
+              <el-table-column prop="state" label="状态" align="center">
+                <template v-slot="scoped">
+                  {{ `${scoped.row.state}` === `0` ? '草稿' : `${scoped.row.state}` === `1` ? '发布' : '删除' }}
+                </template>
+              </el-table-column>
+              <el-table-column label="操作" align="center">
+                <template slot-scope="scoped">
+                  <el-button type="text" size="small" @click="$router.push({ path: '/personnel/resumeDetail', query: { id: scoped.row.id } })"
+                    ><i class="el-icon-edit"></i
+                  ></el-button>
+                  <el-button type="text" size="small" @click="handleDelete(scoped.row)"><i class="el-icon-delete"></i></el-button>
+                </template>
+              </el-table-column>
+            </el-table>
+            <el-col :span="24" class="page">
+              <el-pagination
+                @size-change="handleSizeChange"
+                @current-change="handleCurrentChange"
+                :current-page="currentPage"
+                layout="total, prev, pager, next, jumper"
+                :total="total"
+              >
+              </el-pagination>
+            </el-col>
+          </template>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+export default {
+  name: 'resume',
+  props: {
+    resumeInfo: null,
+    total: null,
+  },
+  components: {},
+  data: () => ({
+    currentPage: 1,
+  }),
+  created() {},
+  computed: {},
+  methods: {
+    addData() {
+      this.$router.push({ path: '/personnel/resumeDetail' });
+    },
+    handleDelete(item) {
+      this.$emit('delete', item);
+    },
+    handleClick(row) {
+      this.$emit('list', { data: row });
+    },
+    handleSizeChange(val) {
+      console.log(`每页 ${val} 条`);
+    },
+    handleCurrentChange(val) {
+      console.log(`当前页: ${val}`);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.top {
+  padding: 15px 0;
+  border-bottom: 1px solid #cccc;
+}
+.top .topTitle {
+  padding: 0 10px;
+}
+.top .topAdd {
+  padding: 0 10px 0 0;
+  text-align: right;
+}
+.page {
+  padding: 20px 0;
+  text-align: center;
+}
+</style>

+ 197 - 0
src/layout/personnel/resumeDetail.vue

@@ -0,0 +1,197 @@
+<template>
+  <div id="resumeDetail">
+    <el-row>
+      <el-col :span="24">
+        <el-col :span="24" class="top">
+          <el-col :span="12" class="topTitle">
+            添加人才信息
+          </el-col>
+          <el-col :span="12" class="topBtn">
+            <el-button type="primary" size="mini" @click="returnBtn()">返回</el-button>
+          </el-col>
+        </el-col>
+        <el-col :span="24" class="messgae">
+          <el-form ref="form" :model="form" label-width="100px">
+            <el-form-item label="用户id">
+              <el-input v-model="form.talents_userId"></el-input>
+            </el-form-item>
+            <el-form-item label="简历名称">
+              <el-input v-model="form.title"></el-input>
+            </el-form-item>
+            <el-form-item label="姓名">
+              <el-input v-model="form.name"></el-input>
+            </el-form-item>
+            <el-form-item label="头像">
+              <upload :limit="1" :data="form.imgpath" type="imgpath" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></upload>
+            </el-form-item>
+            <el-form-item label="性别">
+              <el-select v-model="form.gender" placeholder="请选择民性别">
+                <el-option v-for="(item, index) in gender_list" :key="index" :label="item.name" :value="item.name"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="民族">
+              <el-select v-model="form.nation" placeholder="请选择民族">
+                <el-option v-for="(item, index) in natice_list" :key="index" :label="item.name" :value="item.name"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="出生年月">
+              <el-date-picker v-model="form.birth" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"> </el-date-picker>
+            </el-form-item>
+            <el-form-item label="婚姻状况">
+              <el-select v-model="form.marital" placeholder="请选择婚姻状态">
+                <el-option label="未婚" value="0"></el-option>
+                <el-option label="已婚" value="1"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="户口所在地">
+              <el-input v-model="form.hukou"></el-input>
+            </el-form-item>
+            <el-form-item label="身份证号">
+              <el-input v-model="form.cardnumber"></el-input>
+            </el-form-item>
+            <el-form-item label="当前住址">
+              <el-input v-model="form.addr"></el-input>
+            </el-form-item>
+            <el-form-item label="学历">
+              <el-select v-model="form.education" placeholder="请选择学历要求">
+                <el-option v-for="(item, index) in edu_list" :key="index" :label="item.name" :value="item.name"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="手机号">
+              <el-input v-model="form.phone"></el-input>
+            </el-form-item>
+            <el-form-item label="邮箱">
+              <el-input v-model="form.email"></el-input>
+            </el-form-item>
+            <el-form-item label="工作性质">
+              <el-select v-model="form.job_nature" placeholder="请选择工作性质">
+                <el-option label="兼职" value="0"></el-option>
+                <el-option label="全职" value="1"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item label="求职意向">
+              <el-input type="textarea" v-model="form.profession"></el-input>
+            </el-form-item>
+            <el-form-item label="期望工作地点">
+              <el-input type="textarea" v-model="form.workplace"></el-input>
+            </el-form-item>
+            <el-form-item label="薪资要求">
+              <el-input type="textarea" v-model="form.salary"></el-input>
+            </el-form-item>
+            <el-form-item label="目前状况">
+              <el-input type="textarea" v-model="form.current"></el-input>
+            </el-form-item>
+            <el-form-item label="自我简介">
+              <el-input type="textarea" v-model="form.introduction"></el-input>
+            </el-form-item>
+            <el-form-item label="工作经验">
+              <el-input type="textarea" v-model="form.work_exp"></el-input>
+            </el-form-item>
+            <el-form-item label="项目经验">
+              <el-input type="textarea" v-model="form.project_exp"></el-input>
+            </el-form-item>
+            <el-form-item label="教育经历">
+              <el-input type="textarea" v-model="form.education_exp"></el-input>
+            </el-form-item>
+            <el-form-item label="语言能力">
+              <el-input type="textarea" v-model="form.language"></el-input>
+            </el-form-item>
+            <el-form-item label="专业技能">
+              <el-input type="textarea" v-model="form.skills"></el-input>
+            </el-form-item>
+            <el-form-item label="兴趣爱好">
+              <el-input type="textarea" v-model="form.hobbies"></el-input>
+            </el-form-item>
+            <el-form-item label="状态">
+              <el-select v-model="form.state" placeholder="请选择信息状态">
+                <el-option label="草稿" value="0"></el-option>
+                <el-option label="发布" value="1" :disabled="true"></el-option>
+                <el-option label="删除" value="2" :disabled="true"></el-option>
+              </el-select>
+            </el-form-item>
+            <el-form-item>
+              <el-button type="primary" @click="onSubmit()">提交</el-button>
+            </el-form-item>
+          </el-form>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import upload from '@/components/upload.vue';
+export default {
+  name: 'resumeDetail',
+  props: {
+    form: null,
+  },
+  components: {
+    upload,
+  },
+  data: () => ({
+    gender_list: [
+      {
+        name: '男',
+      },
+      {
+        name: '女',
+      },
+    ],
+    natice_list: [
+      {
+        name: '汉族',
+      },
+      {
+        name: '满族',
+      },
+      {
+        name: '朝鲜族',
+      },
+      {
+        name: '维吾尔族',
+      },
+    ],
+    edu_list: [
+      {
+        name: '中专及以上',
+      },
+      {
+        name: '大专及以上',
+      },
+      {
+        name: '本科及以上',
+      },
+      {
+        name: '研究生及以上',
+      },
+    ],
+  }),
+  created() {},
+  computed: {},
+  methods: {
+    onSubmit() {
+      this.$emit('submitDate', { data: this.form, id: this.form.id });
+    },
+    returnBtn() {
+      this.$router.push({ path: '/personnel/resume' });
+    },
+    uploadSuccess({ type, data }) {
+      this.$set(this.form, `${type}`, data.uri);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.top {
+  padding: 15px 0;
+}
+.top .topTitle {
+  text-align: left;
+}
+.top .topBtn {
+  text-align: right;
+  padding: 0 5px;
+}
+</style>

+ 5 - 0
src/router/index.js

@@ -106,6 +106,11 @@ export default new Router({
       path: '/personnel/resume',
       component: () => import('../views/personnel/resume.vue'),
     },
+    // 科技人才-添加人才
+    {
+      path: '/personnel/resumeDetail',
+      component: () => import('../views/personnel/resumeDetail.vue'),
+    },
     // 科技人才-专家信息管理
     {
       path: '/personnel/experts',

+ 47 - 6
src/views/personnel/resume.vue

@@ -1,19 +1,60 @@
 <template>
   <div id="resume">
-    <p>resume</p>
+    <el-row>
+      <el-col :span="24" class="top">
+        <topInfo :topTitle="topTitle"></topInfo>
+      </el-col>
+      <el-col :span="24" class="main">
+        <resumeInfo :resumeInfo="resumeInfo" :total="total" @delete="deleteData"></resumeInfo>
+      </el-col>
+    </el-row>
   </div>
 </template>
 
 <script>
+import topInfo from '@/layout/public/top.vue';
+import resumeInfo from '@/layout/personnel/resume.vue';
+import { createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: mapColumn } = createNamespacedHelpers('talentResume');
 export default {
   name: 'resume',
   props: {},
-  components: {},
-  data: () => ({}),
-  created() {},
+  components: {
+    topInfo,
+    resumeInfo,
+  },
+  data: () => ({
+    topTitle: '人才信息管理',
+    resumeInfo: [],
+    total: 1,
+  }),
+  created() {
+    this.search();
+  },
   computed: {},
-  methods: {},
+  methods: {
+    ...mapColumn(['query', 'delete', 'fetch']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      const res = await this.query({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `resumeInfo`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+    async deleteData(item) {
+      const res = await this.delete(item.id);
+      this.$checkRes(res, '删除成功', '删除失败');
+      this.search();
+    },
+  },
 };
 </script>
 
-<style lang="less" scoped></style>
+<style lang="less" scoped>
+.main {
+  padding: 20px;
+  margin: 10px 20px;
+  border: 1px solid #ccc;
+  width: 96%;
+}
+</style>

+ 76 - 0
src/views/personnel/resumeDetail.vue

@@ -0,0 +1,76 @@
+<template>
+  <div id="resumeDetail">
+    <el-row>
+      <el-col :span="24" class="top">
+        <topInfo :topTitle="topTitle"></topInfo>
+      </el-col>
+      <el-col :span="24" class="main">
+        <column :form="form" @submitDate="onSubmit"></column>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import topInfo from '@/layout/public/top.vue';
+import column from '@/layout/personnel/resumeDetail.vue';
+import { createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: mapTalentRecruitment } = createNamespacedHelpers('talentResume');
+export default {
+  name: 'resumeDetail',
+  props: {},
+  components: {
+    column,
+    topInfo,
+  },
+  data: () => ({
+    topTitle: '添加人才信息',
+    form: {},
+  }),
+  created() {
+    this.search();
+  },
+  computed: {
+    id() {
+      return this.$route.query.id;
+    },
+    keyWord() {
+      let meta = this.$route.meta;
+      let main = meta.title || '';
+      return main;
+    },
+  },
+  methods: {
+    ...mapTalentRecruitment(['fetch', 'create', 'update']),
+    async search() {
+      if (this.$route.query.id) {
+        const res = await this.fetch(this.id);
+        this.$set(this, `form`, res.data);
+      }
+    },
+    async onSubmit(form) {
+      let data = this.form;
+      console.log(data);
+      let res;
+      let msg;
+      if (data.id) {
+        res = await this.update(data);
+        msg = `${this.keyWord}修改成功`;
+      } else {
+        res = await this.create(data);
+        msg = `${this.keyWord}添加成功`;
+      }
+      if (this.$checkRes(res, msg)) this.$router.push({ path: '/personnel/resume' });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  padding: 20px;
+  margin: 10px 20px;
+  border: 1px solid #ccc;
+  width: 96%;
+}
+</style>