guhongwei преди 5 години
родител
ревизия
13c57071be
променени са 9 файла, в които са добавени 327 реда и са изтрити 63 реда
  1. 262 0
      src/layout/user/mainForm.vue
  2. 3 3
      src/plugins/check-res.js
  3. 1 7
      src/router/index.js
  4. 41 0
      src/store/exportuser.js
  5. 3 1
      src/store/index.js
  6. 1 5
      src/util/role_menu.js
  7. 5 4
      src/views/user/detail.vue
  8. 0 36
      src/views/user/exportIndex.vue
  9. 11 7
      src/views/user/index.vue

+ 262 - 0
src/layout/user/mainForm.vue

@@ -0,0 +1,262 @@
+<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" @change="setIsQy">
+              <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="用户名称" prop="name">
+            <el-input v-model="form.name" placeholder="请输入用户名称"></el-input>
+          </el-form-item>
+          <el-form-item label="手机号" prop="phone">
+            <el-input v-model="form.phone" placeholder="请输入手机号" :minlength="11" :maxlength="11"></el-input>
+          </el-form-item>
+          <el-form-item label="登录密码" prop="password">
+            <el-input v-model="form.password" placeholder="请输入登录密码" show-password></el-input>
+          </el-form-item>
+          <el-form-item label="身份证号" prop="cardnumber">
+            <el-input v-model="form.cardnumber" placeholder="请输入身份证号" :minlength="18" :maxlength="18"></el-input>
+          </el-form-item>
+          <el-form-item label="邮箱" prop="email">
+            <el-input v-model="form.email" placeholder="请输入邮箱"></el-input>
+          </el-form-item>
+          <el-form-item label="地址" prop="addr">
+            <el-input v-model="form.addr" placeholder="请输入地址"></el-input>
+          </el-form-item>
+          <el-form-item label="头像图片" prop="img_path">
+            <upload :limit="1" :data="form.img_path" type="img_path" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></upload>
+          </el-form-item>
+          <el-form-item label="用户类别" prop="role">
+            <el-radio-group v-model="form.role">
+              <el-radio label="2">个人</el-radio>
+              <el-radio label="3">企业管理员</el-radio>
+              <el-radio label="6">专家</el-radio>
+            </el-radio-group>
+          </el-form-item>
+          <el-form-item label="身份证正面" v-if="form.role == '2' || form.role == '3'" prop="cardfile_a">
+            <upload :limit="1" :data="form.cardfile_a" type="cardfile_a" :url="'/files/cardfilea/upload'" @upload="uploadSuccess"></upload>
+          </el-form-item>
+          <el-form-item label="身份证背面" v-if="form.role == '2' || form.role == '3'" prop="cardfile_b">
+            <upload :limit="1" :data="form.cardfile_b" type="cardfile_b" :url="'/files/cardfileb/upload'" @upload="uploadSuccess"></upload>
+          </el-form-item>
+          <el-form-item label="组织机构图片" v-if="form.role == '3'" prop="img_qy">
+            <upload :limit="1" :data="form.img_qy" type="img_qy" :url="'/files/imgqy/upload'" @upload="uploadSuccess"></upload>
+          </el-form-item>
+          <template v-if="form.role == '3'">
+            <el-form-item label="机构类型" prop="institution_type">
+              <el-input v-model="form.institution_type" placeholder="请输入机构类型"></el-input>
+            </el-form-item>
+            <el-form-item label="机构名称" prop="institution_name">
+              <el-input v-model="form.institution_name" placeholder="请输入机构名称"></el-input>
+            </el-form-item>
+            <el-form-item label="机构代码" prop="institution_code">
+              <el-input v-model="form.institution_code" placeholder="请输入机构代码"></el-input>
+            </el-form-item>
+            <el-form-item label="机构性质" prop="institution_nature">
+              <el-input v-model="form.institution_nature" placeholder="请输入机构性质"></el-input>
+            </el-form-item>
+          </template>
+          <el-form-item label="办公电话" v-if="form.role == '2' || form.role == '3'" prop="office_phone">
+            <el-input v-model="form.office_phone" placeholder="请输入办公电话"></el-input>
+          </el-form-item>
+          <el-form-item label="所属行业" v-if="form.role == '2' || form.role == '3'" prop="profession">
+            <el-input v-model="form.profession" placeholder="请输入所属行业"></el-input>
+          </el-form-item>
+          <el-form-item label="性别" v-if="form.role == '6'" prop="gender">
+            <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="出生日期" v-if="form.role == '6'" prop="birthday">
+            <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="职称级别" v-if="form.role == '6'" prop="level">
+            <el-input v-model="form.level" placeholder="请输入职称级别"></el-input>
+          </el-form-item>
+          <el-form-item label="职称" v-if="form.role == '6'" prop="levelname">
+            <el-input v-model="form.levelname" placeholder="请输入职称"></el-input>
+          </el-form-item>
+          <el-form-item label="职务" v-if="form.role == '6'" prop="position">
+            <el-input v-model="form.position" placeholder="请输入职务"></el-input>
+          </el-form-item>
+          <el-form-item label="院校" v-if="form.role == '6'" prop="school">
+            <el-input v-model="form.school" placeholder="请输入院校"></el-input>
+          </el-form-item>
+          <el-form-item label="学历" v-if="form.role == '6'" prop="xl">
+            <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="学位" v-if="form.role == '6'" prop="xw">
+            <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="专业" v-if="form.role == '6'" prop="major">
+            <el-input v-model="form.major" placeholder="请输入专业"></el-input>
+          </el-form-item>
+          <el-form-item label="从事专业" v-if="form.role == '6'" prop="professional">
+            <el-input v-model="form.professional" placeholder="请输入从事专业"></el-input>
+          </el-form-item>
+          <el-form-item label="个人简历" v-if="form.role == '2' || form.role == '6'" prop="resume">
+            <el-input type="textarea" v-model="form.resume" placeholder="请输入个人简介"></el-input>
+          </el-form-item>
+          <el-form-item label="项目" v-if="form.role == '6'" prop="project">
+            <el-input v-model="form.project" placeholder="请输入项目"></el-input>
+          </el-form-item>
+          <el-form-item label="学术成就" v-if="form.role == '6'" prop="academic">
+            <el-input v-model="form.academic" placeholder="请输入学术成就"></el-input>
+          </el-form-item>
+          <el-form-item label="论文" v-if="form.role == '6'" prop="paper">
+            <el-input v-model="form.paper" placeholder="请输入论文"></el-input>
+          </el-form-item>
+          <el-form-item label="备注" v-if="form.role == '6'" prop="remark">
+            <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: users } = createNamespacedHelpers('users');
+const { mapActions: exportuser } = createNamespacedHelpers('exportuser');
+export default {
+  name: 'mainForm',
+  props: {},
+  components: { upload },
+  data: () => ({
+    form: {},
+    // 性别
+    gender_list: [
+      {
+        name: '男',
+      },
+      {
+        name: '女',
+      },
+    ],
+    // 学历
+    edu_list: [
+      {
+        name: '中专及以上',
+      },
+      {
+        name: '大专及以上',
+      },
+      {
+        name: '本科及以上',
+      },
+      {
+        name: '研究生及以上',
+      },
+    ],
+    // 学位
+    degree_list: [
+      {
+        name: '学士',
+      },
+      {
+        name: '博士',
+      },
+      {
+        name: '其他',
+      },
+    ],
+  }),
+  created() {},
+  methods: {
+    ...users(['fetch', 'create', 'update']),
+    ...exportuser({ exportuserFetch: 'fetch', exportuserCreate: 'create', exportuserUpdate: 'update' }),
+    async search() {
+      if (this.role == '2' || this.role == '3') {
+        const res = await this.fetch(this.id);
+        if (this.$checkRes(res)) this.$set(this, `form`, res.data);
+      } else if (this.role == '6') {
+        const res = await this.exportuserFetch(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';
+        if (this.role == '2' || this.role == '3') {
+          res = await this.create(data);
+          msg = '用户创建成功';
+        } else if (this.role == '6') {
+          res = await this.exportuserCreate(data);
+          msg = '用户创建成功';
+        }
+      } else {
+        if (this.role == '2' || this.role == '3') {
+          res = await this.update(data);
+          msg = '用户审核成功';
+        } else if (this.role == '6') {
+          res = await this.exportuserUpdate(data);
+          msg = '用户审核成功';
+        }
+      }
+      if (this.$checkRes(res, msg)) {
+        this.handleCancel();
+      }
+    },
+    handleCancel() {
+      this.$router.push({ path: '/user/index' });
+    },
+    setIsQy(data) {
+      let val = '0';
+      data == '2' ? (val = '0') : (val = '1');
+      this.$set(this.form, `is_qy`, val);
+    },
+    uploadSuccess({ type, data }) {
+      this.$set(this.form, `${type}`, data.uri);
+    },
+  },
+  computed: {
+    id() {
+      return this.$route.query.id;
+    },
+    role() {
+      return this.$route.query.role;
+    },
+    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>

+ 3 - 3
src/plugins/check-res.js

@@ -5,7 +5,7 @@
 import Vue from 'vue';
 import _ from 'lodash';
 import { Message } from 'element-ui';
-import { Notify } from 'vant';
+// import { Notify } from 'vant';
 
 const vm = new Vue({});
 const Plugin = {
@@ -24,7 +24,7 @@ const Plugin = {
         }
         if (_okText) {
           Message.success(_okText);
-          Notify({ type: 'success', message: _okText });
+          // Notify({ type: 'success', message: _okText });
         }
         return true;
       }
@@ -32,7 +32,7 @@ const Plugin = {
         return _errText();
       }
       Message.error(_errText || errmsg);
-      Notify({ type: 'danger', message: _okText });
+      // Notify({ type: 'danger', message: _okText });
       // Message({ message: _errText || errmsg, duration: 60000 });
       return false;
     };

+ 1 - 7
src/router/index.js

@@ -21,7 +21,7 @@ const routes = [
   // 个人与企业
   {
     path: '/user/index',
-    meta: { title: '个人&企业用户管理' },
+    meta: { title: '个人&企业&专家用户管理' },
     component: () => import('../views/user/index.vue'),
   },
   // 添加+修改
@@ -30,12 +30,6 @@ const routes = [
     meta: { title: '个人&企业用户信息管理' },
     component: () => import('../views/user/detail.vue'),
   },
-  // 专家
-  {
-    path: '/user/exportIndex',
-    meta: { title: '专家用户管理' },
-    component: () => import('../views/user/exportIndex.vue'),
-  },
   // 临时
   {
     path: '/user/temporaryIndex',

+ 41 - 0
src/store/exportuser.js

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

+ 3 - 1
src/store/index.js

@@ -7,6 +7,7 @@ import codeitem from './codeitem';
 import codeCategory from './codeCategory';
 import liveTechnicalColumn from './liveTechnicalColumn';
 import liveTechnicalNews from './liveTechnicalNews';
+import exportuser from './exportuser';
 // 个人&企业
 import users from './user';
 Vue.use(Vuex);
@@ -19,7 +20,8 @@ export default new Vuex.Store({
     codeCategory, //字典表类别
     liveTechnicalColumn, //技术培训类别
     liveTechnicalNews, //技术培训内容
-    users,
+    users, //个人&7企业
+    exportuser, //专家
   },
   state: { ...ustate },
   mutations: { ...umutations },

+ 1 - 5
src/util/role_menu.js

@@ -30,13 +30,9 @@ export const user = {
   name: '用户管理',
   children: [
     {
-      name: '个人&企业用户管理',
+      name: '用户管理',
       path: '/user/index',
     },
-    {
-      name: '专家用户管理',
-      path: '/user/exportIndex',
-    },
     {
       name: '临时用户管理',
       path: '/user/temporaryIndex',

+ 5 - 4
src/views/user/detail.vue

@@ -6,7 +6,7 @@
           <topInfo :topTitle="pageTitle"></topInfo>
         </el-col>
         <el-col :span="24" class="main">
-          注冊
+          <mainForm></mainForm>
         </el-col>
       </el-col>
     </el-row>
@@ -15,15 +15,16 @@
 
 <script>
 import topInfo from '@/layout/public/top.vue';
+import mainForm from '@/layout/user/mainForm.vue';
+
 export default {
   name: 'detail',
   props: {},
   components: {
     topInfo, //头部标题
+    mainForm,
   },
-  data: () => ({
-    topTitle: '用户添加',
-  }),
+  data: () => ({}),
   created() {},
   methods: {},
   computed: {

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

@@ -1,36 +0,0 @@
-<template>
-  <div id="exportIndex">
-    <el-row>
-      <el-col :span="24" class="index">
-        <el-col :span="24" class="top">
-          <topInfo :topTitle="pageTitle"></topInfo>
-        </el-col>
-        <el-col :span="24" class="info">
-          主体
-        </el-col>
-      </el-col>
-    </el-row>
-  </div>
-</template>
-<script>
-import topInfo from '@/layout/public/top.vue';
-export default {
-  name: 'exportIndex',
-  props: {},
-  components: {
-    topInfo,
-  },
-  data: () => ({}),
-  created() {},
-  methods: {},
-  computed: {
-    pageTitle() {
-      return `${this.$route.meta.title}`;
-    },
-  },
-  metaInfo() {
-    return { title: this.$route.meta.title };
-  },
-};
-</script>
-<style lang="less" scoped></style>

+ 11 - 7
src/views/user/index.vue

@@ -20,6 +20,7 @@ import topInfo from '@/layout/public/top.vue';
 import dataTable from '@/components/data-table.vue';
 import { mapActions, mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: users } = createNamespacedHelpers('users');
+const { mapActions: exportuser } = createNamespacedHelpers('exportuser');
 export default {
   name: 'index',
   props: {},
@@ -30,7 +31,7 @@ export default {
   data: () => ({
     opera: [
       {
-        label: '编辑',
+        label: '审核',
         icon: 'el-icon-edit',
         method: 'edit',
       },
@@ -43,9 +44,9 @@ export default {
     ],
     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' ? '审核成功' : '审核拒绝') },
+      { label: '用戶类型', prop: 'role', format: i => (i == '2' ? '个人用户' : i == '3' ? '企业用户' : i == '6' ? '专家' : '临时用户') },
+      { label: '状态', prop: 'status', format: i => (i == '0' ? '待审核' : i == '1' ? '审核成功' : i == '2' ? '审核拒绝' : '待认证') },
     ],
     list: [],
     total: 0,
@@ -55,15 +56,18 @@ export default {
   },
   methods: {
     ...users(['query', 'delete', 'update']),
+    ...exportuser({ exportuserQuery: 'query' }),
     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);
+      const resTwo = await this.exportuserQuery({ skip, limit, ...info });
+      var newData = res.data.concat(resTwo.data);
+      if (this.$checkRes(newData)) {
+        this.$set(this, `list`, newData);
+        this.$set(this, `total`, newData.length);
       }
     },
     toEdit({ data }) {
-      this.$router.push({ path: './detail', query: { id: data.id } });
+      this.$router.push({ path: './detail', query: { id: data.id, role: data.role } });
     },
     async toDelete({ data }) {
       const res = await this.delete(data.id);