瀏覽代碼

科技人才-专家完成更新

guhongwei 5 年之前
父節點
當前提交
1c348f9a24

+ 103 - 0
src/layout/personnel/experts.vue

@@ -0,0 +1,103 @@
+<template>
+  <div id="experts">
+    <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="expertsInfo" style="width:100%">
+              <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="eduback" 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="is_del" label="是否删除" align="center">
+                <template v-slot="scoped">
+                  {{ `${scoped.row.is_del}` === `0` ? '否' : '是' }}
+                </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/expertsDetail', 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: 'experts',
+  props: {
+    expertsInfo: null,
+    total: null,
+  },
+  components: {},
+  data: () => ({
+    currentPage: 1,
+  }),
+  created() {},
+  computed: {},
+  methods: {
+    addData() {
+      this.$router.push({ path: '/personnel/expertsDetail' });
+    },
+    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>

+ 187 - 0
src/layout/personnel/expertsDetail.vue

@@ -0,0 +1,187 @@
+<template>
+  <div id="expertsDetail">
+    <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="姓名">
+              <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-input v-model="form.cardtype"></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.technical"></el-input>
+            </el-form-item>
+            <el-form-item label="具体职称">
+              <el-input v-model="form.technical_actual"></el-input>
+            </el-form-item>
+            <el-form-item label="职务">
+              <el-input v-model="form.position"></el-input>
+            </el-form-item>
+            <el-form-item label="毕业院校">
+              <el-input v-model="form.school"></el-input>
+            </el-form-item>
+            <el-form-item label="学历">
+              <el-select v-model="form.eduback" 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.degree"></el-input>
+            </el-form-item>
+            <el-form-item label="所学专业">
+              <el-input v-model="form.major_studied"></el-input>
+            </el-form-item>
+            <el-form-item label="从事专业">
+              <el-input v-model="form.professional"></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-input v-model="form.tel"></el-input>
+            </el-form-item>
+            <el-form-item label="手机号">
+              <el-input v-model="form.phone"></el-input>
+            </el-form-item>
+            <el-form-item label="业务工作简介">
+              <el-input type="textarea" v-model="form.job_profile"></el-input>
+            </el-form-item>
+            <el-form-item label="主持或参与项目情况">
+              <el-input type="textarea" v-model="form.project_profile"></el-input>
+            </el-form-item>
+            <el-form-item label="主要学术成就及获奖情况">
+              <el-input type="textarea" v-model="form.achievement"></el-input>
+            </el-form-item>
+            <el-form-item label="论文论著">
+              <el-input type="textarea" v-model="form.paper"></el-input>
+            </el-form-item>
+            <el-form-item label="备注">
+              <el-input type="textarea" v-model="form.remark"></el-input>
+            </el-form-item>
+            <el-form-item label="可咨询领域">
+              <el-input type="textarea" v-model="form.field"></el-input>
+            </el-form-item>
+            <el-form-item label="领域拼音">
+              <el-input type="textarea" v-model="form.field_py"></el-input>
+            </el-form-item>
+            <el-form-item label="是否删除">
+              <el-select v-model="form.is_del" placeholder="请选择状态">
+                <el-option label="否" value="0"></el-option>
+                <el-option label="是" value="1" :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: 'expertsDetail',
+  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/experts' });
+    },
+    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>

+ 1 - 1
src/layout/personnel/resume.vue

@@ -12,7 +12,7 @@
         </el-col>
         <el-col :span="24" class="list">
           <template>
-            <el-table :data="resumeInfo" style="width: 100%">
+            <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>

+ 5 - 0
src/router/index.js

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

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

@@ -1,19 +1,60 @@
 <template>
   <div id="experts">
-    <p>experts</p>
+    <el-row>
+      <el-col :span="24" class="top">
+        <topInfo :topTitle="topTitle"></topInfo>
+      </el-col>
+      <el-col :span="24" class="main">
+        <expertsInfo :expertsInfo="expertsInfo" :total="total" @delete="deleteData"></expertsInfo>
+      </el-col>
+    </el-row>
   </div>
 </template>
 
 <script>
+import topInfo from '@/layout/public/top.vue';
+import expertsInfo from '@/layout/personnel/experts.vue';
+import { createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: mapColumn } = createNamespacedHelpers('talentExperts');
 export default {
   name: 'experts',
   props: {},
-  components: {},
-  data: () => ({}),
-  created() {},
+  components: {
+    topInfo,
+    expertsInfo,
+  },
+  data: () => ({
+    topTitle: '专家信息管理',
+    expertsInfo: [],
+    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, `expertsInfo`, 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/expertsDetail.vue

@@ -0,0 +1,76 @@
+<template>
+  <div id="expertsDetail">
+    <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/expertsDetail.vue';
+import { createNamespacedHelpers, mapGetters } from 'vuex';
+const { mapActions: mapTalentRecruitment } = createNamespacedHelpers('talentExperts');
+export default {
+  name: 'expertsDetail',
+  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/experts' });
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.main {
+  padding: 20px;
+  margin: 10px 20px;
+  border: 1px solid #ccc;
+  width: 96%;
+}
+</style>