Commit 332b01a11a5bac187104eff216e4f89da5b2614c

Authored by xp.Huang
2 parents 4152575a ec61e3d1

Merge branch 'fix/DEFECT-2063' into 'feat/account-role-manage'

fix: 修复子租户管理员新增组织可以创建平级组织

See merge request yunteng/thingskit-front!1313
... ... @@ -25,6 +25,7 @@
25 25 label: '编辑',
26 26 auth: 'api:yt:organization:update',
27 27 icon: 'clarity:note-edit-line',
  28 + disabled: record.isRoot && getIsChildTenant,
28 29 onClick: handleEdit.bind(null, record),
29 30 },
30 31 {
... ... @@ -32,6 +33,7 @@
32 33 auth: 'api:yt:organization:delete',
33 34 icon: 'ant-design:delete-outlined',
34 35 color: 'error',
  36 + disabled: record.isRoot && getIsChildTenant,
35 37 popConfirm: {
36 38 title: getDeleteTitle(), //是否确认删除//getDeleteTitle()
37 39 confirm: handleDeleteOrBatchDelete.bind(null, record),
... ... @@ -45,7 +47,7 @@
45 47 </div>
46 48 </template>
47 49 <script lang="ts">
48   - import { computed, defineComponent, nextTick } from 'vue';
  50 + import { computed, defineComponent, nextTick, unref } from 'vue';
49 51 import { BasicTable, useTable, TableAction } from '/@/components/Table';
50 52 // 加载自定义侧边弹出框 组件
51 53 import { useDrawer } from '/@/components/Drawer';
... ... @@ -56,6 +58,8 @@
56 58 import { useBatchDelete } from '/@/hooks/web/useBatchDelete';
57 59 import { Authority } from '/@/components/Authority';
58 60 import { Popconfirm } from 'ant-design-vue';
  61 + import { getJwtToken } from '/@/utils/auth';
  62 + import jwtDecode from 'jwt-decode';
59 63
60 64 export default defineComponent({
61 65 name: 'DeptManagement',
... ... @@ -65,6 +69,11 @@
65 69 const { t } = useI18n(); // 加载国际化
66 70 const getI18n = computed(() => t('routes.common.organization.toolCreateOrganization'));
67 71
  72 + const getIsChildTenant = computed(() => {
  73 + const token = getJwtToken();
  74 + return !!(jwtDecode(token as string) as Recordable)?.isCommonTenant;
  75 + });
  76 +
68 77 const [registerTable, { reload, expandAll, setProps }] = useTable({
69 78 title: t('routes.common.organization.toolOrganizationList'),
70 79 api: getOrganizationList,
... ... @@ -76,6 +85,14 @@
76 85 showTableSetting: true,
77 86 bordered: true,
78 87 showIndexColumn: false,
  88 + afterFetch: (data: Recordable[]) => {
  89 + if (data && data.length) {
  90 + data.forEach((item) => {
  91 + item.isRoot = true;
  92 + });
  93 + }
  94 + return data;
  95 + },
79 96 actionColumn: {
80 97 width: 200,
81 98 title: t('routes.common.common.operation'), //操作
... ... @@ -91,7 +108,15 @@
91 108 setProps
92 109 );
93 110 nextTick(() => {
94   - setProps(selectionOptions);
  111 + setProps({
  112 + ...selectionOptions,
  113 + rowSelection: {
  114 + ...selectionOptions.rowSelection,
  115 + getCheckboxProps: (data) => {
  116 + return { disabled: data?.isRoot && unref(getIsChildTenant) };
  117 + },
  118 + },
  119 + });
95 120 });
96 121 /**
97 122 * 获得删除提示框的文字
... ... @@ -124,6 +149,7 @@
124 149 }
125 150
126 151 return {
  152 + getIsChildTenant,
127 153 getI18n,
128 154 registerTable,
129 155 registerModal,
... ...
  1 +import jwtDecode from 'jwt-decode';
1 2 import { BasicColumn } from '/@/components/Table';
2 3 import { FormSchema } from '/@/components/Table';
3 4 import { useI18n } from '/@/hooks/web/useI18n';
  5 +import { getJwtToken } from '/@/utils/auth';
4 6 import { createOrganizationSearch } from '/@/utils/organizationSearch';
5 7 const { t } = useI18n();
6 8
... ... @@ -32,6 +34,12 @@ export const formSchema: FormSchema[] = [
32 34 field: 'parentId',
33 35 label: t('routes.common.organization.parentOrganization'),
34 36 component: 'TreeSelect',
  37 + dynamicRules: () => {
  38 + const token = getJwtToken();
  39 + const res = jwtDecode(token as string) as Record<'isCommonTenant', boolean>;
  40 + return [{ required: res?.isCommonTenant, message: '请选择上级组织' }];
  41 + },
  42 + rulesMessageJoinLabel: true,
35 43 componentProps: {
36 44 replaceFields: {
37 45 title: 'name',
... ...