tangzy
2021-07-13 b57cec72605f7f8f6eb30a1852e581daace6c952
机构调整
2 files modified
2 files added
619 ■■■■ changed files
src/api/Jurs/jurs.js 81 ●●●●● patch | view | raw | blame | history
src/views/Juris/jurs.vue 333 ●●●●● patch | view | raw | blame | history
src/views/management/register.vue 6 ●●●● patch | view | raw | blame | history
src/views/system/user.vue 199 ●●●● patch | view | raw | blame | history
src/api/Jurs/jurs.js
New file
@@ -0,0 +1,81 @@
import request from '@/router/axios';
export const getList = (current, size, params) => {
  return request({
    url: '/api/jurisdiction/list',
    method: 'get',
    params: {
      ...params,
      current,
      size,
    }
  })
}
export const getLazyList = (parentId, params) => {
  return request({
    url: '/api/jurisdiction/lazy-list',
    method: 'get',
    params: {
      ...params,
      parentId
    }
  })
}
export const remove = (ids) => {
  return request({
    url: '/api/jurisdiction/remove',
    method: 'post',
    params: {
      ids,
    }
  })
}
export const add = (row) => {
  return request({
    url: '/api/jurisdiction/submit',
    method: 'post',
    data: row
  })
}
export const update = (row) => {
  return request({
    url: '/api/jurisdiction/submit',
    method: 'post',
    data: row
  })
}
export const getDept = (id) => {
  return request({
    url: '/api/jurisdiction/detail',
    method: 'get',
    params: {
      id,
    }
  })
}
export const getDeptTree = (tenantId) => {
  return request({
    url: '/api/jurisdiction/tree',
    method: 'get',
    params: {
      tenantId,
    }
  })
}
export const getDeptLazyTree = (parentId) => {
  return request({
    url: '/api/jurisdiction/lazy-tree',
    method: 'get',
    params: {
      parentId
    }
  })
}
src/views/Juris/jurs.vue
New file
@@ -0,0 +1,333 @@
<template>
  <basic-container>
    <avue-crud :option="option"
               :table-loading="loading"
               :data="data"
               ref="crud"
               v-model="form"
               :permission="permissionList"
               :before-open="beforeOpen"
               :before-close="beforeClose"
               @row-del="rowDel"
               @row-update="rowUpdate"
               @row-save="rowSave"
               @search-change="searchChange"
               @search-reset="searchReset"
               @selection-change="selectionChange"
               @current-change="currentChange"
               @size-change="sizeChange"
               @refresh-change="refreshChange"
               @on-load="onLoad"
               @tree-load="treeLoad">
      <template slot="menuLeft">
        <el-button type="danger"
                   size="small"
                   icon="el-icon-delete"
                   v-if="permission.dept_delete"
                   plain
                   @click="handleDelete">删 除
        </el-button>
      </template>
      <template slot-scope="scope" slot="menu">
        <el-button
          type="text"
          icon="el-icon-circle-plus-outline"
          size="small"
          @click.stop="handleAdd(scope.row,scope.index)"
          v-if="userInfo.role_name.includes('admin')"
        >新增子项
        </el-button>
      </template>
      <template slot-scope="{row}"
                slot="deptCategory">
        <el-tag>{{row.deptCategoryName}}</el-tag>
      </template>
    </avue-crud>
  </basic-container>
</template>
<script>
  import {
    getLazyList,
    remove,
    update,
    add,
    getDept,
    getDeptTree
  } from "@/api/Jurs/jurs";
  import {mapGetters} from "vuex";
  import website from '@/config/website';
  export default {
    data() {
      return {
        form: {},
        selectionList: [],
        query: {},
        loading: true,
        parentId: 0,
        page: {
          pageSize: 10,
          currentPage: 1,
          total: 0,
        },
        option: {
          lazy: true,
          tip: false,
          simplePage: true,
          searchShow: true,
          searchMenuSpan: 6,
          tree: true,
          border: true,
          index: true,
          selection: true,
          viewBtn: true,
          menuWidth: 300,
          dialogClickModal: false,
          column: [
            {
              label: "机构名称",
              prop: "deptName",
              search: true,
              rules: [{
                required: true,
                message: "请输入机构名称",
                trigger: "blur"
              }]
            },
            {
              label: "所属租户",
              prop: "tenantId",
              type: "tree",
              dicUrl: "/api/blade-system/tenant/select",
              addDisplay: false,
              editDisplay: false,
              viewDisplay: website.tenantMode,
              span: 24,
              props: {
                label: "tenantName",
                value: "tenantId"
              },
              hide: !website.tenantMode,
              search: website.tenantMode,
              rules: [{
                required: true,
                message: "请输入所属租户",
                trigger: "click"
              }]
            },
            {
              label: "机构全称",
              prop: "fullName",
              search: true,
              rules: [{
                required: true,
                message: "请输入机构全称",
                trigger: "blur"
              }]
            },
            {
              label: "上级机构",
              prop: "parentId",
              dicData: [],
              type: "tree",
              hide: true,
              addDisabled: false,
              props: {
                label: "title"
              },
              rules: [{
                required: false,
                message: "请选择上级机构",
                trigger: "click"
              }]
            },
            {
              label: "备注",
              prop: "remark",
              rules: [{
                required: false,
                message: "请输入备注",
                trigger: "blur"
              }],
              hide: true
            }
          ]
        },
        data: []
      };
    },
    computed: {
      ...mapGetters(["userInfo", "permission"]),
      permissionList() {
        return {
          addBtn: this.vaildData(this.permission.jurs_add, false),
          viewBtn: this.vaildData(this.permission.jurs_view, false),
          delBtn: this.vaildData(this.permission.jurs_delete, false),
          editBtn: this.vaildData(this.permission.jurs_edit, false)
        };
      },
      ids() {
        let ids = [];
        this.selectionList.forEach(ele => {
          ids.push(ele.id);
        });
        return ids.join(",");
      }
    },
    methods: {
      initData() {
        getDeptTree().then(res => {
          const column = this.findObject(this.option.column, "parentId");
          column.dicData = res.data.data;
        });
      },
      handleAdd(row) {
        this.parentId = row.id;
        const column = this.findObject(this.option.column, "parentId");
        column.value = row.id;
        column.addDisabled = true;
        this.$refs.crud.rowAdd();
      },
      rowSave(row, done, loading) {
        add(row).then((res) => {
          // 获取新增数据的相关字段
          const data = res.data.data;
          row.id = data.id;
          row.deptCategoryName = data.deptCategoryName;
          row.tenantId = data.tenantId;
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          // 数据回调进行刷新
          done(row);
        }, error => {
          window.console.log(error);
          loading();
        });
      },
      rowUpdate(row, index, done, loading) {
        update(row).then(() => {
          this.$message({
            type: "success",
            message: "操作成功!"
          });
          // 数据回调进行刷新
          done(row);
        }, error => {
          window.console.log(error);
          loading();
        });
      },
      rowDel(row, index, done) {
        this.$confirm("确定将选择数据删除?", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        })
          .then(() => {
            return remove(row.id);
          })
          .then(() => {
            this.$message({
              type: "success",
              message: "操作成功!"
            });
            // 数据回调进行刷新
            done(row);
          });
      },
      handleDelete() {
        if (this.selectionList.length === 0) {
          this.$message.warning("请选择至少一条数据");
          return;
        }
        this.$confirm("确定将选择数据删除?", {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning"
        })
          .then(() => {
            return remove(this.ids);
          })
          .then(() => {
            // 刷新表格数据并重载
            this.data = [];
            this.parentId = 0;
            this.$refs.crud.refreshTable();
            this.$refs.crud.toggleSelection();
            // 表格数据重载
            this.onLoad(this.page);
            this.$message({
              type: "success",
              message: "操作成功!"
            });
          });
      },
      searchReset() {
        this.query = {};
        this.parentId = 0;
        this.onLoad(this.page);
      },
      searchChange(params, done) {
        this.query = params;
        this.parentId = '';
        this.page.currentPage = 1;
        this.onLoad(this.page, params);
        done();
      },
      selectionChange(list) {
        this.selectionList = list;
      },
      selectionClear() {
        this.selectionList = [];
        this.$refs.crud.toggleSelection();
      },
      beforeOpen(done, type) {
        if (["add", "edit"].includes(type)) {
          this.initData();
        }
        if (["edit", "view"].includes(type)) {
          getDept(this.form.id).then(res => {
            this.form = res.data.data;
          });
        }
        done();
      },
      beforeClose(done) {
        this.parentId = "";
        const column = this.findObject(this.option.column, "parentId");
        column.value = "";
        column.addDisabled = false;
        done();
      },
      currentChange(currentPage) {
        this.page.currentPage = currentPage;
      },
      sizeChange(pageSize) {
        this.page.pageSize = pageSize;
      },
      refreshChange() {
        this.onLoad(this.page, this.query);
      },
      onLoad(page, params = {}) {
        this.loading = true;
        getLazyList(this.parentId, Object.assign(params, this.query)).then(res => {
          this.data = res.data.data;
          this.loading = false;
          this.selectionClear();
        });
      },
      treeLoad(tree, treeNode, resolve) {
        const parentId = tree.id;
        getLazyList(parentId).then(res => {
          resolve(res.data.data);
        });
      }
    }
  };
</script>
<style>
</style>
src/views/management/register.vue
@@ -299,7 +299,7 @@
                        icon: 'el-icon-user-solid',
                        column: [
                            {
                                label: "所属租户",
                                label: "所属机构",
                                prop: "tenantId",
                                type: "tree",
                                dicUrl: "/api/blade-system/tenant/select",
@@ -313,7 +313,7 @@
                                viewDisplay: website.tenantMode,
                                rules: [{
                                    required: true,
                                    message: "请输入所属租户",
                                    message: "请输入所属机构",
                                    trigger: "click"
                                }],
                                span: 24,
@@ -464,7 +464,7 @@
                                }]
                            },
                            {
                                label: "所属部门",
                                label: "所属单位",
                                prop: "deptId",
                                type: "tree",
                                multiple: true,
src/views/system/user.vue
@@ -38,13 +38,13 @@
                       v-if="permission.user_delete"
                       @click="handleDelete">删 除
            </el-button>
            <el-button type="info"
                       size="small"
                       plain
                       v-if="permission.user_role"
                       icon="el-icon-user"
                       @click="handleGrant">角色配置
            </el-button>
<!--            <el-button type="info"-->
<!--                       size="small"-->
<!--                       plain-->
<!--                       v-if="permission.user_role"-->
<!--                       icon="el-icon-user"-->
<!--                       @click="handleGrant">角色配置-->
<!--            </el-button>-->
            <el-button type="info"
                       size="small"
                       plain
@@ -52,27 +52,27 @@
                       icon="el-icon-refresh"
                       @click="handleReset">密码重置
            </el-button>
            <el-button type="info"
                       size="small"
                       plain
                       v-if="userInfo.role_name.includes('admin')"
                       icon="el-icon-setting"
                       @click="handlePlatform">平台配置
            </el-button>
            <el-button type="success"
                       size="small"
                       plain
                       v-if="userInfo.role_name.includes('admin')"
                       icon="el-icon-upload2"
                       @click="handleImport">导入
            </el-button>
            <el-button type="warning"
                       size="small"
                       plain
                       v-if="userInfo.role_name.includes('admin')"
                       icon="el-icon-download"
                       @click="handleExport">导出
            </el-button>
<!--            <el-button type="info"-->
<!--                       size="small"-->
<!--                       plain-->
<!--                       v-if="userInfo.role_name.includes('admin')"-->
<!--                       icon="el-icon-setting"-->
<!--                       @click="handlePlatform">平台配置-->
<!--            </el-button>-->
<!--            <el-button type="success"-->
<!--                       size="small"-->
<!--                       plain-->
<!--                       v-if="userInfo.role_name.includes('admin')"-->
<!--                       icon="el-icon-upload2"-->
<!--                       @click="handleImport">导入-->
<!--            </el-button>-->
<!--            <el-button type="warning"-->
<!--                       size="small"-->
<!--                       plain-->
<!--                       v-if="userInfo.role_name.includes('admin')"-->
<!--                       icon="el-icon-download"-->
<!--                       @click="handleExport">导出-->
<!--            </el-button>-->
          </template>
          <template slot-scope="{row}"
                    slot="tenantName">
@@ -91,68 +91,68 @@
            <el-tag>{{row.userTypeName}}</el-tag>
          </template>
        </avue-crud>
        <el-dialog title="用户角色配置"
                   append-to-body
                   :visible.sync="roleBox"
                   width="345px">
<!--        <el-dialog title="用户角色配置"-->
<!--                   append-to-body-->
<!--                   :visible.sync="roleBox"-->
<!--                   width="345px">-->
          <el-tree :data="roleGrantList"
                   show-checkbox
                   check-strictly
                   default-expand-all
                   node-key="id"
                   ref="treeRole"
                   :default-checked-keys="roleTreeObj"
                   :props="props">
          </el-tree>
<!--          <el-tree :data="roleGrantList"-->
<!--                   show-checkbox-->
<!--                   check-strictly-->
<!--                   default-expand-all-->
<!--                   node-key="id"-->
<!--                   ref="treeRole"-->
<!--                   :default-checked-keys="roleTreeObj"-->
<!--                   :props="props">-->
<!--          </el-tree>-->
          <span slot="footer" class="dialog-footer">
            <el-button @click="roleBox = false">取 消</el-button>
            <el-button type="primary"
                       @click="submitRole">确 定</el-button>
          </span>
        </el-dialog>
        <el-dialog title="用户数据导入"
                   append-to-body
                   :visible.sync="excelBox"
                   width="555px">
          <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">
            <template slot="excelTemplate">
              <el-button type="primary" @click="handleTemplate">
                点击下载<i class="el-icon-download el-icon--right"></i>
              </el-button>
            </template>
          </avue-form>
        </el-dialog>
        <el-dialog title="用户平台配置"
                   append-to-body
                   :visible.sync="platformBox">
          <avue-crud :option="platformOption"
                     :table-loading="platformLoading"
                     :data="platformData"
                     ref="platformCrud"
                     v-model="platformForm"
                     :before-open="platformBeforeOpen"
                     :page.sync="platformPage"
                     :permission="platformPermissionList"
                     @row-update="platformRowUpdate"
                     @search-change="platformSearchChange"
                     @search-reset="platformSearchReset"
                     @selection-change="platformSelectionChange"
                     @current-change="platformCurrentChange"
                     @size-change="platformSizeChange"
                     @refresh-change="platformRefreshChange"
                     @on-load="platformOnLoad">
            <template slot-scope="{row}"
                      slot="tenantName">
              <el-tag>{{row.tenantName}}</el-tag>
            </template>
            <template slot-scope="{row}"
                      slot="userTypeName">
              <el-tag>{{row.userTypeName}}</el-tag>
            </template>
          </avue-crud>
        </el-dialog>
<!--          <span slot="footer" class="dialog-footer">-->
<!--            <el-button @click="roleBox = false">取 消</el-button>-->
<!--            <el-button type="primary"-->
<!--                       @click="submitRole">确 定</el-button>-->
<!--          </span>-->
<!--        </el-dialog>-->
<!--        <el-dialog title="用户数据导入"-->
<!--                   append-to-body-->
<!--                   :visible.sync="excelBox"-->
<!--                   width="555px">-->
<!--          <avue-form :option="excelOption" v-model="excelForm" :upload-after="uploadAfter">-->
<!--            <template slot="excelTemplate">-->
<!--              <el-button type="primary" @click="handleTemplate">-->
<!--                点击下载<i class="el-icon-download el-icon&#45;&#45;right"></i>-->
<!--              </el-button>-->
<!--            </template>-->
<!--          </avue-form>-->
<!--        </el-dialog>-->
<!--        <el-dialog title="用户平台配置"-->
<!--                   append-to-body-->
<!--                   :visible.sync="platformBox">-->
<!--          <avue-crud :option="platformOption"-->
<!--                     :table-loading="platformLoading"-->
<!--                     :data="platformData"-->
<!--                     ref="platformCrud"-->
<!--                     v-model="platformForm"-->
<!--                     :before-open="platformBeforeOpen"-->
<!--                     :page.sync="platformPage"-->
<!--                     :permission="platformPermissionList"-->
<!--                     @row-update="platformRowUpdate"-->
<!--                     @search-change="platformSearchChange"-->
<!--                     @search-reset="platformSearchReset"-->
<!--                     @selection-change="platformSelectionChange"-->
<!--                     @current-change="platformCurrentChange"-->
<!--                     @size-change="platformSizeChange"-->
<!--                     @refresh-change="platformRefreshChange"-->
<!--                     @on-load="platformOnLoad">-->
<!--            <template slot-scope="{row}"-->
<!--                      slot="tenantName">-->
<!--              <el-tag>{{row.tenantName}}</el-tag>-->
<!--            </template>-->
<!--            <template slot-scope="{row}"-->
<!--                      slot="userTypeName">-->
<!--              <el-tag>{{row.userTypeName}}</el-tag>-->
<!--            </template>-->
<!--          </avue-crud>-->
<!--        </el-dialog>-->
      </basic-container>
    </el-col>
  </el-row>
@@ -272,7 +272,7 @@
              display: false
            },
            {
              label: "所属租户",
              label: "所属机构",
              prop: "tenantName",
              slot: true,
              display: false
@@ -290,7 +290,7 @@
              display: false
            },
            {
              label: "所属部门",
              label: "所属单位",
              prop: "deptName",
              slot: true,
              display: false
@@ -328,13 +328,13 @@
              icon: 'el-icon-user-solid',
              column: [
                {
                  label: "所属租户",
                  prop: "tenantId",
                  label: "所属组织机构",
                  prop: "deptId",
                  type: "tree",
                  dicUrl: "/api/blade-system/tenant/select",
                  dicUrl: "/api/blade-system/dept/lazy-tree",
                  props: {
                    label: "tenantName",
                    value: "tenantId"
                    label: "title",
                    value: "id"
                  },
                  hide: !website.tenantMode,
                  addDisplay: website.tenantMode,
@@ -493,7 +493,7 @@
                  }]
                },
                {
                  label: "所属部门",
                  label: "所属单位",
                  prop: "deptId",
                  type: "tree",
                  multiple: true,
@@ -553,7 +553,7 @@
              display: false
            },
            {
              label: "所属租户",
              label: "所属机构",
              prop: "tenantName",
              slot: true,
              display: false
@@ -661,6 +661,9 @@
          this.initData(this.form.tenantId);
        }
      },
      "form.deptId"() {
        this.initData(this.form.tenantId);
      },
      'excelForm.isCovered'() {
        if (this.excelForm.isCovered !== '') {
          const column = this.findObject(this.excelOption.column, "excelFile");
@@ -732,7 +735,7 @@
        });
      },
      rowSave(row, done, loading) {
        row.deptId = row.deptId.join(",");
        row.deptId = row.deptId;
        row.roleId = row.roleId.join(",");
        row.postId = row.postId.join(",");
        add(row).then(() => {