guhongwei 4 years ago
parent
commit
b37954220b

+ 1 - 1
src/components/common/Header.vue

@@ -21,7 +21,7 @@
         <!-- 用户名下拉菜单 -->
         <el-dropdown class="user-name" trigger="click" @command="handleCommand">
           <span class="el-dropdown-link">
-            {{ user.name }}
+            {{ user.name || '游客' }}
             <i class="el-icon-caret-bottom"></i>
           </span>
           <el-dropdown-menu slot="dropdown">

+ 6 - 6
src/router/index.js

@@ -26,6 +26,12 @@ export default new Router({
           component: () => import('../views/menu/index.vue'),
           meta: { title: '菜单管理' },
         },
+        // 机构代码或邀请码
+        {
+          path: '/code',
+          component: () => import('../views/code/index.vue'),
+          meta: { title: '机构代码或邀请码' },
+        },
         // 管理员
         {
           path: '/gly',
@@ -59,12 +65,6 @@ export default new Router({
           component: () => import('../views/yw/detail.vue'),
           meta: { title: '业务管理员信息管理' },
         },
-        // 权限管理
-        {
-          path: '/qx',
-          component: () => import('../views/qx/index.vue'),
-          meta: { title: '权限管理' },
-        },
         // 用户管理
         {
           path: '/user',

+ 3 - 0
src/store/index.js

@@ -6,6 +6,8 @@ import * as umutations from './user/mutations';
 import adminLogin from './adminLogin';
 // 菜单
 import menu from '@common/src/store/menu';
+// 邀请码
+import inviteCode from '@common/src/store/inviteCode';
 // 个人
 import personal from '@common/src/store/personal';
 // 机构
@@ -31,6 +33,7 @@ export default new Vuex.Store({
   modules: {
     adminLogin,
     menu,
+    inviteCode,
     personal,
     organization,
     expert,

+ 56 - 0
src/views/code/index.vue

@@ -0,0 +1,56 @@
+<template>
+  <div id="index">
+    <el-row>
+      <el-col :span="24">
+        <data-table :fields="fields" :opera="opera" :data="list" :total="total" @query="search"></data-table>
+      </el-col>
+    </el-row>
+  </div>
+</template>
+
+<script>
+import dataTable from '@common/src/components/frame/filter-page-table.vue';
+import { mapState, createNamespacedHelpers } from 'vuex';
+const { mapActions: inviteCode } = createNamespacedHelpers('inviteCode');
+import _ from 'lodash';
+export default {
+  metaInfo() {
+    return { title: this.$route.meta.title };
+  },
+  name: 'index',
+  props: {},
+  components: {
+    dataTable,
+  },
+  data: function() {
+    return {
+      opera: [],
+      fields: [
+        { label: '机构代码或邀请码', prop: 'code', filter: 'input' },
+        { label: '所属人', prop: 'user_name', filter: 'input' },
+      ],
+      list: [],
+      total: 0,
+    };
+  },
+  async created() {
+    await this.search();
+  },
+  methods: {
+    ...inviteCode(['query']),
+    async search({ skip = 0, limit = 10, ...info } = {}) {
+      let res = await this.query({ skip, limit, ...info });
+      if (this.$checkRes(res)) {
+        this.$set(this, `list`, res.data);
+        this.$set(this, `total`, res.total);
+      }
+    },
+  },
+  computed: {
+    ...mapState(['user']),
+  },
+  watch: {},
+};
+</script>
+
+<style lang="less" scoped></style>

+ 11 - 5
src/views/menu/index.vue

@@ -11,7 +11,7 @@
       </el-col>
     </el-row>
     <el-dialog title="菜单信息管理" width="40%" :visible.sync="dialog" @closed="handleClose" :destroy-on-close="true">
-      <data-form :data="form" :fields="fields" :rules="rules" @save="toSave">
+      <data-form :data="form" :fields="formfields" :rules="rules" @save="toSave">
         <template #custom="{item, form}">
           <template v-if="item.model === 'sort'">
             <el-input-number v-model="form.sort" controls-position="right" :min="1" :max="20"></el-input-number>
@@ -60,15 +60,21 @@ export default {
         },
       ],
       fields: [
-        { label: '名称', prop: 'title', model: 'title' },
-        { label: '路由', prop: 'index', model: 'index' },
-        { label: '菜单等级', prop: 'sort', model: 'sort', custom: true },
-        { label: '菜单图标', prop: 'icon', model: 'icon', type: 'select' },
+        { label: '名称', prop: 'title' },
+        { label: '路由', prop: 'index' },
+        { label: '菜单等级', prop: 'sort' },
+        // { label: '菜单图标', prop: 'icon' },
       ],
       list: [],
       total: 0,
       dialog: false,
       form: {},
+      formfields: [
+        { label: '名称', model: 'title' },
+        { label: '路由', model: 'index' },
+        { label: '菜单等级', model: 'sort', custom: true },
+        { label: '菜单图标', model: 'icon', type: 'select' },
+      ],
       rules: {},
       // 图标列表
       iconList: iconmenu,

+ 0 - 147
src/views/qx/index.vue

@@ -1,147 +0,0 @@
-<template>
-  <div id="index">
-    <el-row>
-      <el-col :span="24" class="main">
-        <data-table :fields="fields" :opera="opera" :data="list" :total="total" @query="search" @edit="toEdit"></data-table>
-      </el-col>
-    </el-row>
-    <el-dialog title="菜单信息管理" width="40%" :visible.sync="dialog" @closed="handleClose" :destroy-on-close="true">
-      <data-form :data="form" :fields="formfields" :rules="rules" @save="toSave">
-        <template #custom="{item, form}">
-          <el-checkbox-group v-model="form.menus">
-            <el-checkbox v-for="(i, index) in menuList" :key="index" :label="i.id">{{ i.title }}</el-checkbox>
-          </el-checkbox-group>
-        </template>
-      </data-form>
-    </el-dialog>
-  </div>
-</template>
-
-<script>
-import dataTable from '@common/src/components/frame/filter-page-table.vue';
-import dataForm from '@common/src/components/frame/form.vue';
-import { iconmenu } from '@common/src/util/iconmenu';
-import { mapState, createNamespacedHelpers } from 'vuex';
-const { mapActions: adminLogin } = createNamespacedHelpers('adminLogin');
-const { mapActions: menu } = createNamespacedHelpers('menu');
-export default {
-  metaInfo() {
-    return { title: this.$route.meta.title };
-  },
-  name: 'index',
-  props: {},
-  components: {
-    dataTable,
-    dataForm,
-  },
-  data: function() {
-    return {
-      opera: [
-        {
-          label: '分配权限',
-          method: 'edit',
-        },
-      ],
-      fields: [
-        { label: '机构代码或邀请码', prop: 'code' },
-        { label: '用户名', prop: 'name' },
-        { label: '联系电话', prop: 'phone' },
-        { label: '机构名称', prop: 'deptname' },
-      ],
-      list: [
-        {
-          name: 'sadas',
-          menus: [
-            {
-              id: '1',
-              title: '菜单一',
-            },
-            {
-              id: '2',
-              title: '菜单二',
-            },
-          ],
-        },
-      ],
-      total: 0,
-      // 分配权限
-      dialog: false,
-      formfields: [
-        { label: '用户名', model: 'name' },
-        { label: '机构名称', model: 'deptname' },
-        { label: '权限', model: 'menus', custom: true },
-      ],
-      form: {
-        menus: [],
-      },
-      rules: {},
-      // 菜单列表
-      menuList: [
-        {
-          id: '1',
-          title: '菜单一',
-        },
-        {
-          id: '2',
-          title: '菜单二',
-        },
-        {
-          id: '3',
-          title: '菜单三',
-        },
-      ],
-    };
-  },
-  async created() {
-    await this.searchOther();
-    await this.search();
-  },
-  methods: {
-    ...adminLogin(['query']),
-    ...menu({ menuQuery: 'query' }),
-    // 查询列表
-    async search({ skip = 0, limit = 10, ...info } = {}) {
-      let 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.dialog = true;
-      this.$set(this, 'form', { ...data, menus: data.menus.map(i => i.id) });
-    },
-    // 提交分配
-    toSave({ data }) {
-      console.log(data);
-    },
-    // 取消添加
-    handleClose() {
-      this.form = {};
-      this.dialog = false;
-      this.search();
-    },
-    // 查询其他信息
-    async searchOther() {
-      let res = await this.menuQuery();
-      if (this.$checkRes(res)) {
-        // this.$set(this, `menuList`, res.data);
-      }
-    },
-  },
-  computed: {
-    ...mapState(['user']),
-  },
-  watch: {},
-};
-</script>
-
-<style lang="less" scoped>
-.main {
-  .add {
-    text-align: right;
-    margin: 0 0 10px 0;
-  }
-}
-</style>

+ 85 - 4
src/views/user/parts/mechUser.vue

@@ -4,24 +4,62 @@
       <el-col :span="24">
         <el-tabs v-model="active" type="card">
           <el-tab-pane label="待审核" name="first">
-            <data-table :fields="fields" :opera="opera" :data="oneList" :total="oneTotal" @query="search" @edit="toEdit" @delete="toDelete"></data-table>
+            <data-table
+              :fields="fields"
+              :opera="opera"
+              :data="oneList"
+              :total="oneTotal"
+              @query="search"
+              @change="toChange"
+              @edit="toEdit"
+              @delete="toDelete"
+            ></data-table>
           </el-tab-pane>
           <el-tab-pane label="审核通过" name="second">
-            <data-table :fields="fields" :opera="opera" :data="twoList" :total="twoTotal" @query="search" @edit="toEdit" @delete="toDelete"></data-table>
+            <data-table
+              :fields="fields"
+              :opera="opera"
+              :data="twoList"
+              :total="twoTotal"
+              @query="search"
+              @change="toChange"
+              @edit="toEdit"
+              @delete="toDelete"
+            ></data-table>
           </el-tab-pane>
           <el-tab-pane label="审核失败" name="third">
-            <data-table :fields="fields" :opera="opera" :data="thrList" :total="thrTotal" @query="search" @edit="toEdit" @delete="toDelete"></data-table>
+            <data-table
+              :fields="fields"
+              :opera="opera"
+              :data="thrList"
+              :total="thrTotal"
+              @query="search"
+              @change="toChange"
+              @edit="toEdit"
+              @delete="toDelete"
+            ></data-table>
           </el-tab-pane>
         </el-tabs>
       </el-col>
     </el-row>
+    <el-dialog title="更换管理员" width="40%" :visible.sync="dialog" @closed="handleClose" :destroy-on-close="true">
+      <data-form :data="form" :fields="formfields" :rules="{}" @save="toSave">
+        <template #options="{item}">
+          <template v-if="item.model === 'code'">
+            <el-option v-for="(i, index) in codeList" :key="index" :label="i.user_name" :value="i.code"></el-option>
+          </template>
+        </template>
+      </data-form>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import dataTable from '@common/src/components/frame/filter-page-table.vue';
+import dataForm from '@common/src/components/frame/form.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: organization } = createNamespacedHelpers('organization');
+const { mapActions: inviteCode } = createNamespacedHelpers('inviteCode');
 export default {
   metaInfo() {
     return { title: this.$route.meta.title };
@@ -30,11 +68,16 @@ export default {
   props: {},
   components: {
     dataTable,
+    dataForm,
   },
   data: function() {
     return {
       active: 'first',
       opera: [
+        {
+          label: '更换管理员',
+          method: 'change',
+        },
         {
           label: '审核&查看',
           method: 'edit',
@@ -67,13 +110,23 @@ export default {
       // 审核失败
       thrList: [],
       thrTotal: 0,
+      // 更换管理员
+      dialog: false,
+      codeList: [],
+      formfields: [
+        { label: '姓名', model: 'name', options: { readonly: true } },
+        { label: '所属机构', model: 'code', type: 'select' },
+      ],
+      form: {},
     };
   },
   async created() {
+    await this.searchOther();
     await this.search();
   },
   methods: {
-    ...organization(['query', 'delete']),
+    ...inviteCode({ codeQuery: 'query' }),
+    ...organization(['query', 'delete', 'update']),
     // 查询列表
     async search({ skip = 0, limit = 10, ...info } = {}) {
       let user = this.user;
@@ -105,6 +158,34 @@ export default {
         this.search();
       }
     },
+    // 更换管理员
+    toChange({ data }) {
+      this.$set(this, `form`, data);
+      this.dialog = true;
+    },
+    async toSave({ data }) {
+      let res = await this.update(data);
+      if (this.$checkRes(res)) {
+        this.$message({
+          message: '更换管理员成功',
+          type: 'success',
+        });
+        this.handleClose();
+      }
+    },
+    // 取消更换
+    handleClose() {
+      this.form = {};
+      this.dialog = false;
+      this.search();
+    },
+    // 查询机构代码
+    async searchOther() {
+      let res = await this.codeQuery();
+      if (this.$checkRes(res)) {
+        this.$set(this, `codeList`, res.data);
+      }
+    },
   },
   computed: {
     ...mapState(['user']),

+ 20 - 20
src/views/user/parts/orgDetail.vue

@@ -28,26 +28,26 @@ export default {
   data: function() {
     return {
       formFields: [
-        { label: '姓名', model: 'name' },
-        { label: '手机号', model: 'phone' },
-        { label: '机构代码', model: 'code' },
-        { label: '电子邮箱', model: 'email' },
-        { label: '联系地址', model: 'addr' },
-        { label: '办公电话', model: 'office_phone' },
-        { label: '所属行业', model: 'profession' },
-        { label: '机构代码', model: 'institution_code' },
-        { label: '统一社会信用代码', model: 'code' },
-        { label: '注册类型', model: 'companytype' },
-        { label: '注册时间', model: 'companydate' },
-        { label: '注册资金', model: 'companycapital' },
-        { label: '企业法人', model: 'companyperson' },
-        { label: '上年度企业总收入', model: 'sndqyzsr' },
-        { label: '上年度研发费用', model: 'sndyffy' },
-        { label: '企业总人数', model: 'companytotal' },
-        { label: '专&兼职研发人数', model: 'zjzyfrs' },
-        { label: '企业简介', model: 'companybrief', type: 'textarea' },
-        { label: '主要产品', model: 'mainproduct', type: 'textarea' },
-        { label: '企业资质&荣誉', model: 'qualifications', type: 'textarea' },
+        { label: '姓名', model: 'name', options: { readonly: true } },
+        { label: '手机号', model: 'phone', options: { readonly: true } },
+        { label: '机构代码', model: 'code', options: { readonly: true } },
+        { label: '电子邮箱', model: 'email', options: { readonly: true } },
+        { label: '联系地址', model: 'addr', options: { readonly: true } },
+        { label: '办公电话', model: 'office_phone', options: { readonly: true } },
+        { label: '所属行业', model: 'profession', options: { readonly: true } },
+        { label: '机构代码', model: 'institution_code', options: { readonly: true } },
+        { label: '统一社会信用代码', model: 'code', options: { readonly: true } },
+        { label: '注册类型', model: 'companytype', options: { readonly: true } },
+        { label: '注册时间', model: 'companydate', options: { readonly: true } },
+        { label: '注册资金', model: 'companycapital', options: { readonly: true } },
+        { label: '企业法人', model: 'companyperson', options: { readonly: true } },
+        { label: '上年度企业总收入', model: 'sndqyzsr', options: { readonly: true } },
+        { label: '上年度研发费用', model: 'sndyffy', options: { readonly: true } },
+        { label: '企业总人数', model: 'companytotal', options: { readonly: true } },
+        { label: '专&兼职研发人数', model: 'zjzyfrs', options: { readonly: true } },
+        { label: '企业简介', model: 'companybrief', type: 'textarea', options: { readonly: true } },
+        { label: '主要产品', model: 'mainproduct', type: 'textarea', options: { readonly: true } },
+        { label: '企业资质&荣誉', model: 'qualifications', type: 'textarea', options: { readonly: true } },
         { label: '状态', model: 'status', type: 'radio' },
       ],
     };

+ 7 - 7
src/views/user/parts/perDetail.vue

@@ -30,13 +30,13 @@ export default {
   data: function() {
     return {
       formFields: [
-        { label: '姓名', model: 'name' },
-        { label: '手机号', model: 'phone' },
-        { label: '机构代码', model: 'code' },
-        { label: '电子邮箱', model: 'email' },
-        { label: '地址', model: 'addr' },
-        { label: '办公电话', model: 'office_phone' },
-        { label: '所属行业', model: 'profession' },
+        { label: '姓名', model: 'name', options: { readonly: true } },
+        { label: '手机号', model: 'phone', options: { readonly: true } },
+        { label: '机构代码', model: 'code', options: { readonly: true } },
+        { label: '电子邮箱', model: 'email', options: { readonly: true } },
+        { label: '地址', model: 'addr', options: { readonly: true } },
+        { label: '办公电话', model: 'office_phone', options: { readonly: true } },
+        { label: '所属行业', model: 'profession', options: { readonly: true } },
         { label: '状态', model: 'status', type: 'radio' },
       ],
     };

+ 85 - 7
src/views/user/parts/perUser.vue

@@ -4,37 +4,77 @@
       <el-col :span="24">
         <el-tabs v-model="active" type="card">
           <el-tab-pane label="待审核" name="first">
-            <data-table :fields="fields" :opera="opera" :data="oneList" :total="oneTotal" @query="search" @edit="toEdit" @delete="toDelete"></data-table>
+            <data-table
+              :fields="fields"
+              :opera="opera"
+              :data="oneList"
+              :total="oneTotal"
+              @query="search"
+              @change="toChange"
+              @edit="toEdit"
+              @delete="toDelete"
+            ></data-table>
           </el-tab-pane>
           <el-tab-pane label="审核通过" name="second">
-            <data-table :fields="fields" :opera="opera" :data="twoList" :total="twoTotal" @query="search" @edit="toEdit" @delete="toDelete"></data-table>
+            <data-table
+              :fields="fields"
+              :opera="opera"
+              :data="twoList"
+              :total="twoTotal"
+              @query="search"
+              @change="toChange"
+              @edit="toEdit"
+              @delete="toDelete"
+            ></data-table>
           </el-tab-pane>
           <el-tab-pane label="审核失败" name="third">
-            <data-table :fields="fields" :opera="opera" :data="thrList" :total="thrTotal" @query="search" @edit="toEdit" @delete="toDelete"></data-table>
+            <data-table
+              :fields="fields"
+              :opera="opera"
+              :data="thrList"
+              :total="thrTotal"
+              @query="search"
+              @change="toChange"
+              @edit="toEdit"
+              @delete="toDelete"
+            ></data-table>
           </el-tab-pane>
         </el-tabs>
       </el-col>
     </el-row>
+    <el-dialog title="更换管理员" width="40%" :visible.sync="dialog" @closed="handleClose" :destroy-on-close="true">
+      <data-form :data="form" :fields="formfields" :rules="{}" @save="toSave">
+        <template #options="{item}">
+          <template v-if="item.model === 'code'">
+            <el-option v-for="(i, index) in codeList" :key="index" :label="i.user_name" :value="i.code"></el-option>
+          </template>
+        </template>
+      </data-form>
+    </el-dialog>
   </div>
 </template>
 
 <script>
 import dataTable from '@common/src/components/frame/filter-page-table.vue';
+import dataForm from '@common/src/components/frame/form.vue';
 import { mapState, createNamespacedHelpers } from 'vuex';
 const { mapActions: personal } = createNamespacedHelpers('personal');
+const { mapActions: inviteCode } = createNamespacedHelpers('inviteCode');
 export default {
-  metaInfo() {
-    return { title: this.$route.meta.title };
-  },
   name: 'perUser',
   props: {},
   components: {
     dataTable,
+    dataForm,
   },
   data: function() {
     return {
       active: 'first',
       opera: [
+        {
+          label: '更换管理员',
+          method: 'change',
+        },
         {
           label: '审核&查看',
           method: 'edit',
@@ -66,13 +106,23 @@ export default {
       // 审核失败
       thrList: [],
       thrTotal: 0,
+      // 更换管理员
+      dialog: false,
+      codeList: [],
+      formfields: [
+        { label: '姓名', model: 'name', options: { readonly: true } },
+        { label: '所属机构', model: 'code', type: 'select' },
+      ],
+      form: {},
     };
   },
   async created() {
+    await this.searchOther();
     await this.search();
   },
   methods: {
-    ...personal(['query', 'delete']),
+    ...inviteCode({ codeQuery: 'query' }),
+    ...personal(['query', 'delete', 'update']),
     // 查询列表
     async search({ skip = 0, limit = 10, ...info } = {}) {
       let user = this.user;
@@ -104,6 +154,34 @@ export default {
         this.search();
       }
     },
+    // 更换管理员
+    toChange({ data }) {
+      this.$set(this, `form`, data);
+      this.dialog = true;
+    },
+    async toSave({ data }) {
+      let res = await this.update(data);
+      if (this.$checkRes(res)) {
+        this.$message({
+          message: '更换管理员成功',
+          type: 'success',
+        });
+        this.handleClose();
+      }
+    },
+    // 取消更换
+    handleClose() {
+      this.form = {};
+      this.dialog = false;
+      this.search();
+    },
+    // 查询机构代码
+    async searchOther() {
+      let res = await this.codeQuery();
+      if (this.$checkRes(res)) {
+        this.$set(this, `codeList`, res.data);
+      }
+    },
   },
   computed: {
     ...mapState(['user']),