Pārlūkot izejas kodu

Merge branch 'master' of http://git.cc-lotus.info/service-platform/mobile-official

guhongwei 4 gadi atpakaļ
vecāks
revīzija
d8b7bf758e

+ 203 - 0
src/layout/adminuser/release.vue

@@ -0,0 +1,203 @@
+<template>
+  <div id="person">
+    <el-col :span="24" class="info">
+      <van-form @submit="onSubmit">
+        <van-field name="radio" label="用户状态" v-if="this.id">
+          <template #input>
+            <van-radio-group v-model="form.status" direction="horizontal">
+              <van-radio name="0">已注册</van-radio>
+              <van-radio name="1">审核成功</van-radio>
+              <van-radio name="2">拒绝</van-radio>
+            </van-radio-group>
+          </template>
+        </van-field>
+
+        <van-field v-model="form.name" name="用户名称" label="用户名称" placeholder="请输入用户名称" :rules="[{ required: true, message: '请输入用户名称' }]" />
+
+        <van-field v-model="form.phone" name="手机号" label="手机号" placeholder="请输入手机号" v-if="this.id" disabled />
+        <van-field v-model="form.phone" name="手机号" label="手机号" placeholder="请输入手机号" v-else />
+        <van-field v-model="form.password" type="password" name="登录密码" label="登录密码" placeholder="请输入登录密码" />
+
+        <van-field
+          v-model="form.cardnumber"
+          name="身份证号"
+          label="身份证号"
+          placeholder="请输入身份证号"
+          :rules="[{ required: true, message: '请输入身份证号' }]"
+        />
+        <van-field v-model="form.email" name="邮箱" label="邮箱" placeholder="请输入邮箱" :rules="[{ required: true, message: '请输入邮箱' }]" />
+        <van-field v-model="form.addr" name="地址" label="地址" placeholder="请输入地址" :rules="[{ required: true, message: '请输入地址' }]" />
+        <van-field name="uploader" label="头像">
+          <!-- <template #input><upload :limit="1" :data="form.img_path" type="img_path" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></upload> </template> -->
+          <template #input><upload :limit="1" :data="form.img_path" type="img_path" :url="'/files/imgpath/upload'" @upload="uploadSuccess"></upload> </template>
+        </van-field>
+        <van-field name="radio" label="用户类型">
+          <template #input>
+            <van-radio-group v-model="form.role" direction="horizontal">
+              <van-radio name="2">个人</van-radio>
+              <van-radio name="3">企业</van-radio>
+              <van-radio name="6">专家</van-radio>
+            </van-radio-group>
+          </template>
+        </van-field>
+        <van-field name="uploader" label="身份证正面" v-if="form.role == '2' || form.role == '3'">
+          <template #input
+            ><upload
+              :limit="1"
+              v-if="form.role == '2' || form.role == '3'"
+              :data="form.cardfile_a"
+              type="cardfile_a"
+              :url="'/files/cardfilea/upload'"
+              @upload="uploadSuccess"
+            ></upload>
+          </template>
+        </van-field>
+        <van-field name="uploader" label="身份证背面" v-if="form.role == '2' || form.role == '3'">
+          <template #input
+            ><upload
+              :limit="1"
+              v-if="form.role == '2' || form.role == '3'"
+              :data="form.cardfile_b"
+              type="cardfile_b"
+              :url="'/files/cardfileb/upload'"
+              @upload="uploadSuccess"
+            ></upload>
+          </template>
+        </van-field>
+        <van-field name="uploader" label="组织机构图片" v-if="form.role == '3'">
+          <template #input
+            ><upload
+              :limit="1"
+              v-if="form.role == '2' || form.role == '3'"
+              :data="form.img_qy"
+              type="img_qy"
+              :url="'/files/img_qy/upload'"
+              @upload="uploadSuccess"
+            ></upload>
+          </template>
+        </van-field>
+        <template v-if="form.role == '3'">
+          <van-field v-model="form.institution_type" name="机构类型" label="机构类型" placeholder="请输入机构类型" />
+          <van-field v-model="form.institution_name" name="机构名称" label="机构名称" placeholder="请输入机构名称" />
+          <van-field v-model="form.institution_code" name="机构代码" label="机构代码" placeholder="请输入机构代码" />
+          <van-field v-model="form.institution_nature" name="机构性质" label="机构性质" placeholder="请输入机构性质" />
+        </template>
+        <van-field v-model="form.office_phone" v-if="form.role == '2' || form.role == '3'" name="办公电话" label="办公电话" placeholder="请输入办公电话" />
+        <van-field v-model="form.profession" v-if="form.role == '2' || form.role == '3'" name="所属行业" label="所属行业" placeholder="请输入所属行业" />
+        <van-field name="radio" label="性别" v-if="form.role == '6'">
+          <template #input>
+            <van-radio-group v-model="form.gender" direction="horizontal">
+              <van-radio name="男">男</van-radio>
+              <van-radio name="女">女</van-radio>
+            </van-radio-group>
+          </template>
+        </van-field>
+        <van-cell title="日期" is-link :value="form.birthday" @click="birthdayPopup" v-if="form.role == '6'" />
+        <van-popup v-model="birthdayShow" position="bottom">
+          <van-datetime-picker type="date" @cancel="birthdayShow = false" @confirm="birthdayPicker" />
+        </van-popup>
+        <van-field v-model="form.level" v-if="form.role == '6'" name="职称级别" label="职称级别" placeholder="请输入职称级别" />
+        <van-field v-model="form.levelname" v-if="form.role == '6'" name="职称" label="职称" placeholder="请输入职称" />
+        <van-field v-model="form.position" v-if="form.role == '6'" name="职务" label="职务" placeholder="请输入职务" />
+        <van-field v-model="form.school" v-if="form.role == '6'" name="院校" label="院校" placeholder="院校" />
+        <van-field readonly clickable name="picker" :value="form.xl" label="学历" v-if="form.role == '6'" placeholder="请选择学历" @click="xlPicker = true" />
+        <van-popup v-model="xlPicker" position="bottom">
+          <van-picker show-toolbar :columns="xlList" @confirm="onConfirm" @cancel="xlPicker = false" />
+        </van-popup>
+        <van-field readonly clickable name="picker" :value="form.xw" label="学位" v-if="form.role == '6'" placeholder="请选择学位" @click="xwPicker = true" />
+        <van-popup v-model="xwPicker" position="bottom">
+          <van-picker show-toolbar :columns="xwList" @confirm="onConfirms" @cancel="xwPicker = false" />
+        </van-popup>
+        <van-field v-model="form.major" v-if="form.role == '6'" name="专业" label="专业" placeholder="请输入专业" />
+        <van-field v-model="form.professional" v-if="form.role == '6'" name="从事专业" label="从事专业 " placeholder="请输入从事专业" />
+        <van-field
+          v-model="form.resume"
+          autosize
+          label="个人简历"
+          v-if="form.role == '2' || form.role == '6'"
+          type="textarea"
+          placeholder="请输入个人简历"
+          show-word-limit
+        />
+        <van-field v-model="form.project" v-if="form.role == '6'" name="项目" label="项目 " placeholder="请输入项目" />
+        <van-field v-model="form.academic" v-if="form.role == '6'" name="学术成就" label="学术成就 " placeholder="请输入学术成就" />
+        <van-field v-model="form.paper" v-if="form.role == '6'" name="论文" label="论文 " placeholder="请输入论文" />
+        <van-field v-model="form.remark" autosize label="备注" v-if="form.role == '6'" type="textarea" placeholder="请输入备注" show-word-limit />
+        <div style="margin: 16px;">
+          <van-button round block type="info" native-type="submit">
+            保存
+          </van-button>
+        </div>
+      </van-form>
+    </el-col>
+  </div>
+</template>
+
+<script>
+import upload from '@/components/upload.vue';
+export default {
+  name: 'person',
+  props: {
+    form: null,
+  },
+  components: {
+    upload,
+  },
+  data: () => ({
+    // 出生日期
+    birthday: '',
+    birthdayShow: false,
+    // 学历
+    xlPicker: false,
+    xlList: ['中专及以上', '大专及以上', '本科及以上', '研究生及以上'],
+    // 学位
+    xwPicker: false,
+    xwList: ['学士', '硕士', '博士', '其他'],
+  }),
+  created() {},
+  computed: {
+    id() {
+      return this.$route.query.id;
+    },
+  },
+  methods: {
+    // 出生日期
+    birthdayPopup() {
+      this.birthdayShow = true;
+    },
+    // 确认选择之后的时间
+    birthdayPicker(val) {
+      let year = val.getFullYear();
+      let month = val.getMonth() + 1;
+      let day = val.getDate();
+      let birthday = `${year}-${month}-${day}`;
+      this.$set(this.form, `birthday`, birthday);
+      this.birthdayShow = false;
+    },
+    // 学历
+    onConfirm(xl) {
+      this.$set(this.form, `xl`, xl);
+      this.xlPicker = false;
+    },
+    // 学位
+    onConfirms(xw) {
+      this.$set(this.form, `xw`, xw);
+      this.xwPicker = false;
+    },
+    onSubmit() {
+      this.$emit('onSubmit', { data: this.form });
+    },
+    // 图片上传
+    uploadSuccess({ type, data }) {
+      console.log(type, data);
+      this.$set(this.form, `${type}`, data.uri);
+    },
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.info {
+  margin: 0 0 50px 0;
+}
+</style>

+ 16 - 0
src/router/index.js

@@ -130,6 +130,22 @@ const routes = [
     meta: { title: '个人中心', isleftarrow: true },
     component: () => import('../views/user/index.vue'),
   },
+
+  // 管理员个人中心-用户管理
+  {
+    path: '/adminCenter/user/index',
+    name: 'adminCenter_user_index',
+    meta: { title: '用户管理', isleftarrow: true },
+    component: () => import('../views/adminCenter/user/index.vue'),
+  },
+  // 管理员个人中心-编辑审核
+  {
+    path: '/adminCenter/user/detail',
+    name: 'adminCenter_user_detail',
+    meta: { title: '用户详情', isleftarrow: true },
+    component: () => import('../views/adminCenter/user/detail.vue'),
+  },
+
   ,
 ];
 

+ 4 - 0
src/store/index.js

@@ -12,6 +12,8 @@ import market from '@common/store/market/market';
 import apply from '@common/store/live/apply';
 import transaction from '@common/store/market/transaction';
 import expertsaudit from '@common/store/market/expertsaudit';
+import exportuser from '@common/store/market/exportuser';
+import user from './user';
 import * as ustate from '@/store/common/state';
 import * as umutations from '@/store/common/mutations';
 
@@ -34,5 +36,7 @@ export default new Vuex.Store({
     transaction,
     expertsaudit,
     productpact,
+    exportuser,
+    user,
   },
 });

+ 39 - 0
src/store/user.js

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

+ 137 - 0
src/views/adminCenter/user/detail.vue

@@ -0,0 +1,137 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <person :form="form" @onSubmit="onSubmit"></person>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import NavBar from '@/layout/common/topInfo.vue';
+import person from '@/layout/adminuser/release.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: market } = createNamespacedHelpers('market');
+const { mapActions: expertsuser } = createNamespacedHelpers('expertsuser');
+export default {
+  name: 'index',
+  props: {},
+  components: {
+    NavBar,
+    person, //个人信息维护
+  },
+  data: () => ({
+    // 头部标题
+    title: '',
+    // meta为true
+    isleftarrow: '',
+    // 返回
+    navShow: true,
+    // 个人信息
+    form: {},
+  }),
+  created() {
+    this.searchInfo();
+  },
+  computed: {
+    ...mapState(['user']),
+    id() {
+      return this.$route.query.id;
+    },
+    role() {
+      return this.$route.query.role;
+    },
+  },
+  methods: {
+    ...market(['fetch', 'update', 'create']),
+    ...expertsuser({ expertsuserFetch: 'fetch', expertsuserUpdate: 'update', expertsuserUpgrade: 'upgrade', expertsuserCreate: 'create' }),
+    async searchInfo() {
+      if (this.role == '2' || this.role == '3' || this.role == '7') {
+        let res = await this.fetch(this.id);
+        console.log(res.data);
+
+        if (res.errcode === 0) {
+          console.log(res.data);
+          this.$set(this, `form`, res.data);
+        }
+      } else if (this.role == '6') {
+        let res = await this.expertsuserFetch(this.id);
+        if (res.errcode === 0) {
+          this.$set(this, `form`, res.data);
+        }
+      }
+    },
+    async onSubmit({ data }) {
+      if (data.role == '2' || data.role == '3' || data.role == '7') {
+        let res;
+        let msg;
+        console.log(data);
+
+        if (data.id) {
+          res = await this.update(data);
+          this.$message({
+            message: '个人信息修改成功',
+            type: 'success',
+          });
+        } else {
+          data.status = '0';
+          res = await this.create(data);
+          this.$message({
+            message: '个人信息创建成功',
+            type: 'success',
+          });
+        }
+      } else if (data.role == '6') {
+        let res;
+        let msg;
+        if (data.id) {
+          res = await this.expertsuserUpdate(data);
+          this.$message({
+            message: '个人信息修改成功',
+            type: 'success',
+          });
+        } else {
+          res = await this.expertsuserCreate(data);
+          this.$message({
+            message: '个人信息添加成功',
+            type: 'success',
+          });
+        }
+      }
+      this.$router.push({ path: './index' });
+    },
+  },
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  width: 100%;
+  min-height: 667px;
+  position: relative;
+  background-color: #f9fafc;
+}
+.top {
+  height: 46px;
+  overflow: hidden;
+  position: relative;
+  z-index: 999;
+}
+.main {
+  min-height: 570px;
+}
+.foot {
+  position: absolute;
+  bottom: 0;
+}
+</style>

+ 92 - 0
src/views/adminCenter/user/index.vue

@@ -0,0 +1,92 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24" class="style">
+        <el-col :span="24" class="top">
+          <NavBar v-show="navShow" :title="title" :isleftarrow="isleftarrow"> </NavBar>
+        </el-col>
+        <el-col :span="24" class="main">
+          <el-col :span="24" class="main">
+            <el-col :span="24" class="one">
+              <userlist></userlist>
+            </el-col>
+          </el-col>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+import NavBar from '@/layout/common/topInfo.vue';
+import userlist from './parts/userlist.vue';
+export default {
+  name: 'index',
+  props: {},
+  components: { NavBar, userlist },
+  data: () => ({
+    // 头部标题
+    title: '',
+    // meta为true
+    isleftarrow: '',
+    // 返回
+    navShow: true,
+    img_path: require('@/assets/logo.png'),
+    active: 0,
+    show: false,
+    newform: {},
+  }),
+  created() {},
+  computed: {},
+  methods: {},
+  mounted() {
+    this.title = this.$route.meta.title;
+    this.isleftarrow = this.$route.meta.isleftarrow;
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.style {
+  width: 100%;
+  min-height: 667px;
+  position: relative;
+  background-color: #f9fafc;
+}
+.top {
+  height: 46px;
+  overflow: hidden;
+  position: relative;
+  z-index: 999;
+}
+.main {
+  min-height: 570px;
+  .two {
+    position: fixed;
+    top: 80%;
+
+    left: 10px;
+    z-index: 999;
+  }
+}
+/deep/.van-tab {
+  text-align: center;
+}
+/deep/.van-tabs--line .van-tabs__wrap {
+  height: 70px;
+  margin: 0 0 10px 0;
+}
+/deep/.van-tab--active {
+  color: red;
+}
+.van-icon {
+  font-size: 20px;
+}
+/deep/.van-popup--bottom {
+  bottom: 0;
+  left: 0;
+  width: 100%;
+  height: 300px;
+}
+</style>

+ 139 - 0
src/views/adminCenter/user/parts/userlist.vue

@@ -0,0 +1,139 @@
+<template>
+  <div id="auditList">
+    <el-row>
+      <el-col :span="24" class="info">
+        <el-col class="newuser"><van-button type="info" size="small" @click="usersubmit()">新建用户</van-button> </el-col>
+        <el-col :span="24" class="list" v-for="(item, index) in list" :key="index">
+          <p class="textOver">
+            <span>{{ item.name }}</span>
+            <span style="float:right"><van-button type="info" size="small" @click="submit(item)">审核</van-button> </span>
+            <span style="float:right"> <van-button type="info" size="small" @click="toDelete(item)">删除用户</van-button></span>
+          </p>
+          <p>
+            <span class="ptwo"
+              ><span>电话:{{ item.phone || '暂无' }}</span></span
+            >
+            <span class="ptwo"
+              ><span>用户类型:</span>{{ item.role == '2' ? '个人用户' : item.role == '3' ? '企业用户' : item.role == '6' ? '专家用户' : '临时用户' }}</span
+            >
+          </p>
+          <p class="newptwo">
+            <span>状态:</span>{{ item.status == '0' ? '待审核' : item.status == '1' ? '审核成功' : item.status == '2' ? '审核拒绝' : '待认证' }}
+          </p>
+        </el-col>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: exportuser } = createNamespacedHelpers('exportuser');
+const { mapActions: user } = createNamespacedHelpers('user');
+export default {
+  name: 'auditList',
+  props: {},
+  components: {},
+  data: function() {
+    return {
+      list: [],
+    };
+  },
+  created() {
+    this.search();
+  },
+  methods: {
+    ...user(['query', 'delete', 'update']),
+    ...exportuser({ exportuserQuery: 'query' }),
+    async search() {
+      if (this.user.code.length == 3) {
+        const res = await this.query();
+        const resTwo = await this.exportuserQuery();
+        var newData = res.data.concat(resTwo.data);
+        if (this.$checkRes(newData)) {
+          var arr = newData.filter(item => item.pid == undefined && item.status != '3');
+          this.$set(this, `list`, arr);
+        }
+      } else {
+        const res = await this.query({ code: this.user.code });
+        const resTwo = await this.exportuserQuery({ skip, limit, code: this.user.code });
+        var newData = res.data.concat(resTwo.data);
+        if (this.$checkRes(newData)) {
+          var arr = newData.filter(item => item.pid == undefined && item.status != '3');
+          this.$set(this, `list`, arr);
+        }
+      }
+    },
+    async submit(item) {
+      this.$router.push({ path: './detail', query: { id: item.id, role: item.role } });
+    },
+
+    usersubmit() {
+      this.$router.push({ path: './detail' });
+    },
+
+    async toDelete(item) {
+      const res = await this.delete(item.id);
+      if (this.$checkRes(res, '删除成功', res.errmsg || '删除失败')) this.search();
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+    pageTitle() {
+      return `${this.$route.meta.title}`;
+    },
+  },
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+};
+</script>
+
+<style lang="less" scoped>
+.newuser {
+  float: right;
+  padding: 10px 0 10px 10px;
+}
+.info {
+  border-top: 1px solid #f5f5f5;
+
+  .list {
+    background: #fff;
+    padding: 0 10px;
+    border-bottom: 1px solid #ccc;
+    p {
+      font-size: 14px;
+      color: #000;
+      padding: 5px 0;
+    }
+    p:first-child {
+      font-size: 16px;
+    }
+    p:nth-child(2) .ptwo {
+      display: inline-block;
+      width: 50%;
+    }
+    p:nth-child(2) .ptwo span:first-child {
+      color: #ccc;
+    }
+    p:last-child span {
+      color: #ccc;
+    }
+  }
+}
+.content {
+  padding: 16px 16px 160px;
+  height: 160px;
+  background-color: aqua;
+}
+.newptwo {
+  color: #ccc !important;
+}
+/deep/.van-button--small {
+  min-width: 60px;
+  height: 30px;
+  padding: 0 8px;
+  font-size: 12px;
+  margin: 0 5px 0 0;
+}
+</style>

+ 1 - 1
src/views/user/parts/clickBtn.vue

@@ -10,7 +10,7 @@
         </span>
         <span v-else>
           <span v-if="user.role == '1'">
-            <van-cell is-link title="用户管理" />
+            <van-cell is-link title="用户管理" @click="$router.push({ path: '/adminCenter/user/index' })" />
             <van-cell is-link title="对接会管理" />
             <van-cell is-link title="产品供求审核管理" />
             <van-cell is-link title="产品供求交易状态审核管理" />