guhongwei 5 年之前
父節點
當前提交
454f288c2d
共有 6 個文件被更改,包括 369 次插入10 次删除
  1. 205 0
      src/layout/user/exportForm.vue
  2. 11 0
      src/router/index.js
  3. 2 5
      src/store/index.js
  4. 14 5
      src/util/role_menu.js
  5. 44 0
      src/views/user/exportDetail.vue
  6. 93 0
      src/views/user/exportIndex.vue

+ 205 - 0
src/layout/user/exportForm.vue

@@ -0,0 +1,205 @@
+<template>
+  <div id="mainForm">
+    <el-row>
+      <el-col :span="24" class="linksForm">
+        <el-form ref="form" :model="form" label-width="100px">
+          <el-form-item label="用户状态" v-if="form.role !== '1' && !isNew">
+            <el-radio-group v-model="form.status">
+              <el-radio label="0" disabled>已注册</el-radio>
+              <el-radio label="1">审核成功</el-radio>
+              <el-radio label="2">拒绝审核</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="姓名">
+            <el-input v-model="form.name" placeholder="请输入姓名"></el-input>
+          </el-form-item>
+          <el-form-item label="手机号">
+            <el-input v-model="form.phone" placeholder="请输入手机号" :minlength="11" :maxlength="11"></el-input>
+          </el-form-item>
+          <el-form-item label="密码" v-if="isNew">
+            <el-input v-model="form.password" placeholder="请输入密码" show-password></el-input>
+          </el-form-item>
+          <el-form-item label="身份证">
+            <el-input v-model="form.cardnumber" placeholder="请输入身份证" :minlength="18" :maxlength="18"></el-input>
+          </el-form-item>
+          <el-form-item label="邮箱">
+            <el-input v-model="form.email" placeholder="请输入邮箱"></el-input>
+          </el-form-item>
+          <el-form-item label="地址">
+            <el-input v-model="form.addr" placeholder="请输入地址"></el-input>
+          </el-form-item>
+          <el-form-item label="头像">
+            <upload :limit="1" :data="form.img_path" type="img_path" :url="'/files/cardfile_a/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-date-picker v-model="form.birthday" type="date" placeholder="选择日期" value-format="yyyy-MM-dd"> </el-date-picker>
+          </el-form-item>
+          <el-form-item label="职称级别">
+            <el-input v-model="form.level" placeholder="请输入职称级别"></el-input>
+          </el-form-item>
+          <el-form-item label="职称">
+            <el-input v-model="form.levelname" placeholder="请输入职称"></el-input>
+          </el-form-item>
+          <el-form-item label="职务">
+            <el-input v-model="form.position" placeholder="请输入职务"></el-input>
+          </el-form-item>
+          <el-form-item label="院校">
+            <el-input v-model="form.school" placeholder="请输入院校"></el-input>
+          </el-form-item>
+          <el-form-item label="学历">
+            <el-select v-model="form.xl" 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-select v-model="form.xw" placeholder="请选择学位">
+              <el-option v-for="(item, index) in degree_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.major" placeholder="请输入专业"></el-input>
+          </el-form-item>
+          <el-form-item label="从事专业">
+            <el-input v-model="form.professional" placeholder="请输入从事专业"></el-input>
+          </el-form-item>
+          <el-form-item label="个人简历">
+            <el-input type="textarea" v-model="form.resume" placeholder="请输入个人简介"></el-input>
+          </el-form-item>
+          <el-form-item label="项目">
+            <el-input v-model="form.project" placeholder="请输入项目"></el-input>
+          </el-form-item>
+          <el-form-item label="学术成就">
+            <el-input v-model="form.academic" placeholder="请输入学术成就"></el-input>
+          </el-form-item>
+          <el-form-item label="论文">
+            <el-input v-model="form.paper" placeholder="请输入论文"></el-input>
+          </el-form-item>
+          <el-form-item label="备注">
+            <el-input v-model="form.remark" placeholder="请输入备注"></el-input>
+          </el-form-item>
+          <el-form-item>
+            <el-button @click="handleCancel">返回</el-button>
+            <el-button type="primary" @click="handleSave()">提交</el-button>
+          </el-form-item>
+        </el-form>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import upload from '@/components/upload.vue';
+import { mapActions, mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: expertsuser } = createNamespacedHelpers('expertsuser');
+export default {
+  name: 'mainForm',
+  props: {},
+  components: { upload },
+  data: () => ({
+    form: {},
+    // 性别
+    gender_list: [
+      {
+        name: '男',
+      },
+      {
+        name: '女',
+      },
+    ],
+    // 学历
+    edu_list: [
+      {
+        name: '中专及以上',
+      },
+      {
+        name: '大专及以上',
+      },
+      {
+        name: '本科及以上',
+      },
+      {
+        name: '研究生及以上',
+      },
+    ],
+    // 学位
+    degree_list: [
+      {
+        name: '学士',
+      },
+      {
+        name: '学士',
+      },
+      {
+        name: '博士',
+      },
+      {
+        name: '其他',
+      },
+    ],
+  }),
+  created() {},
+  methods: {
+    ...expertsuser(['fetch', 'create', 'update']),
+    async search() {
+      const res = await this.fetch(this.id);
+      if (this.$checkRes(res)) this.$set(this, `form`, res.data);
+    },
+    async handleSave() {
+      let res;
+      let msg;
+      let data = JSON.parse(JSON.stringify(this.form));
+      if (this.isNew) {
+        data.status = '1';
+        res = await this.create(data);
+        msg = '用户创建成功';
+      } else {
+        res = await this.update(data);
+        msg = '用户修改成功';
+      }
+      if (this.$checkRes(res, msg, res.errmsg)) {
+        console.log(`success`);
+        this.handleCancel();
+      }
+    },
+    handleCancel() {
+      this.$router.push({ path: '/user/exportIndex' });
+    },
+    uploadSuccess({ type, data }) {
+      this.$set(this.form, `${type}`, data.uri);
+    },
+  },
+  computed: {
+    id() {
+      return this.$route.query.id;
+    },
+    isNew() {
+      return this.$route.query.id ? false : true;
+    },
+  },
+  watch: {
+    isNew: {
+      handler(val) {
+        if (!val) {
+          console.log('in function:');
+          this.search();
+        }
+      },
+      immediate: true,
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.linksForm {
+  margin: 20px 0 0 0;
+}
+.el-form {
+  padding: 0 200px;
+}
+</style>

+ 11 - 0
src/router/index.js

@@ -165,6 +165,17 @@ const routes = [
     meta: { title: '添加用户' },
     component: () => import('../views/user/detail.vue'),
   },
+  // 专家用户管理
+  {
+    path: '/user/exportIndex',
+    meta: { title: '专家用户设置' },
+    component: () => import('../views/user/exportIndex.vue'),
+  },
+  {
+    path: '/user/exportDetail',
+    meta: { title: '添加专家用户' },
+    component: () => import('../views/user/exportDetail.vue'),
+  },
   // 友情链接管理
   {
     path: '/links/index',

+ 2 - 5
src/store/index.js

@@ -19,27 +19,23 @@ import talentRecruitment from './talentRecruitment';
 import talentResume from './talentResume';
 import dictionary from './dictionary';
 import protype from './protype';
-
 import marketproject from './marketproject';
 import present from './present';
 import tranaudit from './tranaudit';
 import transaction from './transaction';
-
 import live from './live';
 import apply from './apply';
-
 import marketcolumn from './marketcolumn';
-
 import users from './user';
 import codeCategory from './code-category';
 import codeItem from './code-item';
-
 import login from '@common/store/login';
 import authUser from '@common/store/user/auth-user';
 import role from '@common/store/user/role';
 import * as ustate from '@common/store/user/state';
 import * as umutations from '@common/store/user/mutations';
 import place from '@common/store/place/place';
+import expertsuser from '@common/store/market/exportuser';
 
 Vue.use(Vuex);
 
@@ -78,6 +74,7 @@ export default new Vuex.Store({
     role,
     authUser,
     place,
+    expertsuser,
   },
   state: { ...ustate },
   mutations: { ...umutations },

+ 14 - 5
src/util/role_menu.js

@@ -43,10 +43,10 @@ export const personnel = {
       name: '人才信息管理',
       path: '/personnel/resume',
     },
-    {
-      name: '专家信息管理',
-      path: '/personnel/experts',
-    },
+    // {
+    //   name: '专家信息管理',
+    //   path: '/personnel/experts',
+    // },
     {
       name: '基本信息管理',
       path: '/personnel/informate',
@@ -79,7 +79,16 @@ export const site = {
 
 export const user = {
   name: '用户管理',
-  path: '/user/index',
+  children: [
+    {
+      name: '个人&企业用户管理',
+      path: '/user/index',
+    },
+    {
+      name: '专家用户管理',
+      path: '/user/exportIndex',
+    },
+  ],
 };
 export const links = {
   name: '友情链接管理',

+ 44 - 0
src/views/user/exportDetail.vue

@@ -0,0 +1,44 @@
+<template>
+  <div id="detail">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="24" class="top">
+          <topInfo :topTitle="topTitle"></topInfo>
+        </el-col>
+        <el-col :span="24" class="main">
+          <exportForm></exportForm>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import topInfo from '@/layout/public/top.vue';
+import exportForm from '@/layout/user/exportForm.vue';
+export default {
+  name: 'detail',
+  props: {},
+  components: {
+    topInfo, //头部标题
+    exportForm, //用户添加管理
+  },
+  data: () => ({
+    topTitle: '专家用户添加',
+  }),
+  created() {},
+  computed: {},
+  methods: {},
+};
+</script>
+
+<style lang="less" scoped>
+.top {
+  height: 40px;
+  background-color: #f5f5f5;
+}
+.main {
+  width: 97%;
+  margin: 0 15px;
+}
+</style>

+ 93 - 0
src/views/user/exportIndex.vue

@@ -0,0 +1,93 @@
+<template>
+  <div id="exportIndex">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col :span="24" class="top">
+          <topInfo :topTitle="topTitle"></topInfo>
+        </el-col>
+        <el-col :span="24" class="search" style="text-align:right">
+          <el-button size="mini" type="primary" @click="$router.push({ path: './exportDetail' })" icon="el-icon-plus">添加用户</el-button>
+        </el-col>
+        <el-col :span="24" class="main">
+          <data-table :fields="fields" @delete="toDelete" :data="list" :opera="opera" @edit="toEdit" :total="total" @query="search"></data-table>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import topInfo from '@/layout/public/top.vue';
+import dataTable from '@/components/data-table.vue';
+import { mapActions, mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: expertsuser } = createNamespacedHelpers('expertsuser');
+export default {
+  name: 'exportIndex',
+  props: {},
+  components: {
+    topInfo, //头部标题
+    dataTable,
+  },
+  data: () => ({
+    topTitle: '专家用户管理',
+    opera: [
+      {
+        label: '编辑',
+        icon: 'el-icon-edit',
+        method: 'edit',
+      },
+      {
+        label: '删除',
+        icon: 'el-icon-delete',
+        method: 'delete',
+        confirm: true,
+      },
+    ],
+    fields: [
+      { label: '姓名', prop: 'name', filter: 'input' },
+      { label: '身份证号', prop: 'cardnumber', filter: 'input' },
+      { label: '电话', prop: 'phone', filter: 'input' },
+      { label: '状态', prop: 'status', format: i => (i == '0' ? '待审核' : i == '1' ? '审核成功' : '审核拒绝') },
+    ],
+    list: [],
+    total: 0,
+  }),
+  created() {
+    this.search();
+  },
+  computed: {},
+  methods: {
+    ...expertsuser(['query', 'delete', 'update']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      const res = await this.query({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+    toEdit({ data }) {
+      this.$router.push({ path: './exportDetail', query: { id: data.id } });
+    },
+    async toDelete({ data }) {
+      const res = await this.delete(data.id);
+      if (this.$checkRes(res, '删除成功', res.errmsg || '删除失败')) this.search();
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.top {
+  height: 40px;
+  background-color: #f5f5f5;
+}
+.search {
+  height: 40px;
+  line-height: 40px;
+  padding: 0 15px;
+}
+.main {
+  width: 97%;
+  margin: 0 15px;
+}
+</style>