123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 |
- <template>
- <div class="organiza">
- <div class="title">组织架构</div>
- <div class="organiza-body">
- <div class="but">
- <el-button v-pdpath="'add'" type="primary" @click="addHandler">
- 新增组织架构
- </el-button>
- </div>
- <div class="tree">
- <div class="treeTile">
- <span>组织架构</span>
- <span style="padding-right: 100px">操作</span>
- </div>
- <div class="treeList">
- <el-tree
- style="width: 100%"
- :props="{ children: 'children', label: 'name' }"
- :data="organTrees"
- node-key="id"
- :current-node-key="user.info.id"
- accordion
- default-expand-all
- >
- <template #default="{ node, data }">
- <span class="custom-tree-node">
- <span>{{ data.name }}</span>
- <div
- class="butList oper-span"
- v-if="!topDeptIds.includes(Number(data.id))"
- >
- <a
- @click.stop="showOrganizationDetail({ dept: data })"
- v-pdpath="['view']"
- >
- 查看
- </a>
- <a
- @click.stop="setHandler(data)"
- :class="{ disable: user.info.deptId === data.id }"
- v-pdpath="['edit']"
- >
- 编辑
- </a>
- <a
- :class="{ disable: user.info.deptId === data.id }"
- style="color: var(--primaryColor)"
- @click.stop="delHandler(data.id)"
- v-pdpath="['del']"
- >
- 删除
- </a>
- </div>
- </span>
- </template>
- </el-tree>
- </div>
- </div>
- </div>
- </div>
- </template>
- <script setup lang="ts">
- import { user } from "@/store/user";
- import { Organization, delOrganization, getOrganizationTree } from "@/store/organization";
- import { markRaw, onMounted, ref } from "vue";
- import { addOrganization, showOrganizationDetail, editOrganization } from "./quisk";
- import { confirm } from "@/helper/message";
- import { ElMessage, ElMessageBox } from "element-plus";
- import { RouteName, router } from "@/router";
- import { SuccessFilled } from "@element-plus/icons-vue";
- import { topDeptIds } from "@/constant/appDeptId";
- const organTrees = ref<Organization[]>([]);
- const addHandler = async () => {
- const data = await addOrganization({});
- if (data) {
- await refresh();
- const config = {
- icon: markRaw(SuccessFilled),
- confirmButtonText: "去创建",
- showClose: true,
- cancelButtonText: "我知道了",
- };
- if (await ElMessageBox.confirm("组织创建成功,快去创建用户吧", "温馨提示", config)) {
- router.push({ name: RouteName.user });
- }
- }
- };
- const setHandler = async (dept: Organization) => {
- if (await editOrganization({ dept })) {
- await refresh();
- ElMessage.success("操作成功");
- }
- };
- const delHandler = async (deptId: Organization["id"]) => {
- if (await confirm("确认要删除组织吗?")) {
- await delOrganization(deptId);
- ElMessage.success({ message: "删除成功", type: "success" });
- refresh();
- }
- };
- const refresh = async () => {
- organTrees.value = await getOrganizationTree("1");
- };
- onMounted(refresh);
- </script>
- <style lang="scss" scoped>
- .organiza {
- .title {
- height: 56px;
- padding: 0 24px;
- color: #303133;
- font-size: 16px;
- line-height: 56px;
- height: 56px;
- font-weight: 500;
- background-color: #fff;
- border-bottom: 1px solid #e4e7ed;
- }
- }
- .but {
- padding: 0 16px 16px 16px;
- background-color: #fff;
- text-align: right;
- }
- .title {
- height: 56px;
- padding: 0 24px;
- color: #303133;
- font-size: 16px;
- line-height: 56px;
- height: 56px;
- font-weight: 500;
- background-color: #fff;
- border-bottom: 1px solid #e4e7ed;
- }
- .organiza-body {
- margin-top: 15px;
- background-color: #fff;
- padding: 15px;
- .tree {
- border: 1px solid #ebeef5;
- // margin-top: 24px;
- .treeTile {
- display: flex;
- justify-content: space-between;
- border-bottom: 1px solid #ebeef5;
- background-color: #fafafa;
- padding: 12px 20px;
- }
- .treeList {
- max-height: 500px;
- overflow-y: auto;
- display: flex;
- justify-content: space-between;
- .custom-tree-node {
- flex: 1;
- display: flex;
- align-items: center;
- justify-content: space-between;
- font-size: 14px;
- padding-right: 8px;
- .butList {
- width: 140px;
- a {
- margin: 0 8px;
- }
- .disable {
- color: #bfbfbf !important;
- pointer-events: none;
- }
- }
- }
- }
- }
- }
- .table-ctrl-right {
- .search-scene {
- margin: 0 20px 0 26px;
- }
- i {
- margin-left: 20px;
- font-size: 1.7rem;
- vertical-align: middle;
- cursor: pointer;
- &.active {
- color: var(--primaryColor);
- }
- }
- }
- .camera-from {
- margin: 0 50px;
- }
- .share-from {
- width: 500px;
- margin: 0 auto;
- }
- .maker {
- font-weight: 400;
- color: #969799;
- line-height: 20px;
- }
- .oper-user {
- height: 40px;
- overflow: hidden; //超出的文本隐藏
- text-overflow: ellipsis; //溢出用省略号显示
- white-space: nowrap; //溢出不换行
- cursor: pointer;
- }
- </style>
- <style>
- .organiza .el-tree-node__content {
- padding: 12px 10px;
- border-bottom: 1px solid #ebeef5;
- }
- .camera-from .el-select,
- .dispatch-file-from .el-select {
- width: 100%;
- }
- .el-textarea__inner {
- font-family: "Microsoft YaHei";
- }
- .dispatch-detial .el-form-item__content {
- color: #323233;
- }
- .dispatch-detial .el-form-item__label {
- color: #646566;
- }
- </style>
|