| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- <template>
- <div v-loading="state.loading">
- <div style="text-align: right">
- <div style="margin-right: 10px"><el-switch v-model="state.horizontal"></el-switch> 横向/纵向</div>
- </div>
- <div style="height: 500px">
- <vue3-tree-org
- :data="state.orgData"
- :props="{ id: 'id', pid: 'pid', label: 'name', expand: 'expand', children: 'children' }"
- :label-style="state.style"
- :default-expand-level="100"
- :horizontal="state.horizontal"
- :collapsable="state.collapsable"
- :only-one-node="state.onlyOneNode"
- :clone-node-drag="state.cloneNodeDrag"
- :node-draggable="state.nodeDraggable"
- style="background-color: var(--el-bg-color)"
- >
- <template v-slot="{ node }">
- <div class="tree-org-node__text node-label">
- <div class="node-title">{{ node.label }}</div>
- <div class="node-id">编码:{{ node.id }}</div>
- </div>
- </template>
- <template v-slot:expand="{ node }">
- <div>{{ node.children.length }}</div>
- </template>
- </vue3-tree-org>
- </div>
- </div>
- </template>
- <script lang="ts" setup name="orgTree">
- import { onMounted, reactive } from 'vue';
- import { storeToRefs } from 'pinia';
- import { useUserInfo } from '/@/stores/userInfo';
- import { getAPI } from '/@/utils/axios-utils';
- import { SysUserApi } from '/@/api-services/api';
- const stores = useUserInfo();
- const { userInfos } = storeToRefs(stores);
- const currentNodeStyle = { color: '#FFFFFF', background: '#3B3B3B' };
- const state = reactive({
- loading: false,
- orgData: [] as any,
- horizontal: false,
- collapsable: true,
- onlyOneNode: false,
- cloneNodeDrag: false,
- nodeDraggable: false,
- style: {
- background: 'var(--el-color-primary)', //'#FF5C00',
- color: '#FFFFFF',
- },
- });
- onMounted(async () => {
- state.loading = true;
- var res = await getAPI(SysUserApi).apiSysUserOrgInfoGet();
- var d = res.data.result ?? [];
- state.orgData = d[0] ?? []; // 默认第一个树分支
- if (state.orgData.id == userInfos.value.orgId) state.orgData.style = currentNodeStyle;
- else InitOrg(state.orgData.children, userInfos.value.orgId);
- state.loading = false;
- });
- // 递归遍历
- const InitOrg = (orgData: any, id: any) => {
- if (orgData && orgData.length > 0) {
- orgData.forEach(function (u: any) {
- if (u.id == id) {
- u.style = currentNodeStyle;
- return;
- } else {
- InitOrg(u.children, id);
- }
- });
- }
- };
- </script>
- <style lang="scss" scoped>
- .tree-org-node__text {
- // text-align: left;
- font-size: 14px;
- .node-title {
- padding-bottom: 8px;
- margin-bottom: 8px;
- border-bottom: 1px solid currentColor;
- }
- .node-id {
- font-size: 10px;
- }
- }
- </style>
|