diff --git a/src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.api.ts b/src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.api.ts
index d4e5f7d74..1996c7a5a 100644
--- a/src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.api.ts
+++ b/src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.api.ts
@@ -11,6 +11,12 @@ enum Api {
listNoBindUser = '/sys/tenant/manager/listNoBindUser',
bindTenantUser = '/sys/tenant/manager/bindTenantUser',
removeBindUser = '/sys/tenant/manager/removeBindUser',
+
+ listSubscribe = '/sys/tenant/subscribe/listWithPackage',
+ setSubscribeUseYn = '/sys/tenant/subscribe/setUseYn',
+ getSubscribeById = '/sys/tenant/subscribe/getById',
+ batchSaveUpdateSubscribe = '/sys/tenant/subscribe/saveUpdateBatch',
+ listNoBindPackageByTenantId = '/sys/tenant/manager/listNoBindPackageByTenantId',
}
export const listApi = (params) => {
@@ -104,3 +110,56 @@ export const removeBindUserApi = (data) => {
data,
});
};
+
+export const listSubscribeApi = (params) => {
+ return defHttp.post({
+ service: ApiServiceEnum.SMART_SYSTEM,
+ url: Api.listSubscribe,
+ data: {
+ ...params,
+ },
+ });
+};
+
+export const setSubscribeUseYnApi = (rows: any[], useYn: boolean) => {
+ return defHttp.post({
+ service: ApiServiceEnum.SMART_SYSTEM,
+ url: Api.setSubscribeUseYn,
+ data: {
+ idList: rows.map((item) => item.id),
+ useYn,
+ },
+ });
+};
+
+export const getSubscribeByIdApi = (id: number) => {
+ return defHttp.post({
+ service: ApiServiceEnum.SMART_SYSTEM,
+ url: Api.getSubscribeById,
+ data: id,
+ });
+};
+
+/**
+ * 根据租户ID查询没有绑定的套餐
+ * @param data
+ */
+export const listNoBindPackageByTenantIdApi = (data) => {
+ return defHttp.post({
+ service: ApiServiceEnum.SMART_SYSTEM,
+ url: Api.listNoBindPackageByTenantId,
+ data,
+ });
+};
+
+/**
+ * 根据租户ID查询没有绑定的套餐
+ * @param data
+ */
+export const batchSaveUpdateSubscribeApi = (data: Recordable) => {
+ return defHttp.post({
+ service: ApiServiceEnum.SMART_SYSTEM,
+ url: Api.batchSaveUpdateSubscribe,
+ data,
+ });
+};
diff --git a/src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.config.ts b/src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.config.ts
index 5cb4c2edf..0692789b0 100644
--- a/src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.config.ts
+++ b/src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.config.ts
@@ -3,11 +3,17 @@ import type { FormSchema } from '@/components/Form';
import { tableUseYnClass } from '@/components/SmartTable';
import { Ref, unref } from 'vue';
+import { listNoBindPackageByTenantIdApi } from './SysTenantListView.api';
+
export enum Permission {
save = 'sys:tenant:manager:save',
update = 'sys:tenant:manager:update',
delete = 'sys:tenant:manager:delete',
useYn = 'sys:tenant:manager:setUseYn',
+ bindUser = 'sys:tenant:manager:bindUser',
+ subscribeAddUpdate = 'sys:tenant:manager:subscribe:addUpdate',
+ subscribeDelete = 'sys:tenant:manager:subscribe:delete',
+ subscribeSetUseYn = 'sys:tenant:manager:subscribe:setUseYn',
}
export const SYSTEM_TENANT_TYPE_DICT = 'SYSTEM_TENANT_TYPE';
@@ -433,3 +439,187 @@ export const getBindUserModalListColumns = (): SmartColumn[] => {
},
];
};
+
+export const getSubscribeTableColumns = (): SmartColumn[] => {
+ return [
+ {
+ type: 'checkbox',
+ width: 60,
+ align: 'center',
+ fixed: 'left',
+ field: 'checkbox',
+ },
+ {
+ field: 'packageId',
+ title: '{system.views.tenant.manager.title.subscribe.packageId}',
+ width: 200,
+ formatter({ row }) {
+ const tenantPackage = row.tenantPackage;
+ if (!tenantPackage) {
+ return '';
+ }
+ return `${tenantPackage.packageCode || ''} - ${tenantPackage.packageName || ''}`;
+ },
+ },
+ {
+ field: 'effectTime',
+ sortable: true,
+ title: '{system.views.tenant.manager.title.subscribe.effectTime}',
+ width: 165,
+ },
+ {
+ field: 'expireTime',
+ sortable: true,
+ title: '{system.views.tenant.manager.title.subscribe.expireTime}',
+ width: 165,
+ },
+ {
+ field: 'remark',
+ title: '{common.table.remark}',
+ minWidth: 200,
+ },
+ {
+ field: 'userNumber',
+ sortable: true,
+ title: '{system.views.tenant.manager.title.subscribe.userNumber}',
+ width: 120,
+ },
+ {
+ ...tableUseYnClass(),
+ width: 120,
+ },
+ {
+ field: 'createTime',
+ title: '{common.table.createTime}',
+ width: 165,
+ },
+ {
+ field: 'createBy',
+ title: '{common.table.createUser}',
+ width: 120,
+ },
+ {
+ field: 'updateTime',
+ title: '{common.table.updateTime}',
+ width: 165,
+ },
+ {
+ field: 'updateBy',
+ title: '{common.table.updateUser}',
+ width: 120,
+ },
+ ];
+};
+
+/**
+ * 添加修改表单
+ */
+export const getSubscribeFormSchemas = (t: Function, tenantIdRef: Ref): FormSchema[] => {
+ return [
+ {
+ field: 'id',
+ label: t('system.views.tenant.manager.title.subscribe.id'),
+ component: 'Input',
+ show: false,
+ componentProps: {},
+ },
+ {
+ field: 'isAdd',
+ label: '',
+ component: 'Switch',
+ show: false,
+ },
+ {
+ field: 'packageId',
+ label: t('system.views.tenant.manager.title.subscribe.packageId'),
+ component: 'SmartPulldownTable',
+ dynamicDisabled({ model }) {
+ const isAdd = model.isAdd;
+ return isAdd === false;
+ },
+ componentProps: () => {
+ return {
+ alwaysLoad: true,
+ transfer: true,
+ showFunction: (row) => `${row.packageCode}-${row.packageName}`,
+ valueField: 'id',
+ tableProps: {
+ border: true,
+ columns: [
+ {
+ field: 'packageCode',
+ sortable: true,
+ title: '{system.views.tenant.package.title.packageCode}',
+ width: 120,
+ },
+ {
+ field: 'packageName',
+ title: '{system.views.tenant.package.title.packageName}',
+ width: 120,
+ },
+ {
+ field: 'effectTime',
+ sortable: true,
+ title: '{system.views.tenant.package.title.effectTime}',
+ width: 165,
+ },
+ {
+ field: 'expireTime',
+ sortable: true,
+ title: '{system.views.tenant.package.title.expireTime}',
+ width: 165,
+ },
+ {
+ field: 'remark',
+ title: '{common.table.remark}',
+ minWidth: 120,
+ },
+ {
+ ...tableUseYnClass(),
+ width: 120,
+ },
+ ],
+ proxyConfig: {
+ ajax: {
+ async query({ ajaxParameter }) {
+ const tenantId = unref(tenantIdRef);
+ if (!tenantId) {
+ return [];
+ }
+ return listNoBindPackageByTenantIdApi({
+ ...ajaxParameter,
+ id: tenantId,
+ });
+ },
+ },
+ },
+ },
+ };
+ },
+ },
+ {
+ field: 'times',
+ label: t('system.views.tenant.manager.title.subscribe.effectTime'),
+ component: 'RangePicker',
+ componentProps: {
+ showTime: true,
+ },
+ required: true,
+ },
+
+ {
+ field: 'userNumber',
+ label: t('system.views.tenant.manager.title.subscribe.userNumber'),
+ component: 'InputNumber',
+ componentProps: {},
+ required: true,
+ defaultValue: 1000,
+ },
+ {
+ field: 'remark',
+ label: t('common.table.remark'),
+ component: 'InputTextArea',
+ componentProps: {},
+ },
+ ];
+};
diff --git a/src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.vue b/src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.vue
index 34ea7b6a2..46a13f6de 100644
--- a/src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.vue
+++ b/src/modules/smart-system/views/tenant/tenantManager/SysTenantListView.vue
@@ -20,11 +20,12 @@
-
+
+
+
-
@@ -34,7 +35,6 @@
import { useSizeSetting } from '@/hooks/setting/UseSizeSetting';
import { SmartTable, useSmartTable } from '@/components/SmartTable';
- import { useModal } from '@/components/Modal';
import {
getFormSchemas,
@@ -53,20 +53,17 @@
} from './SysTenantListView.api';
import { useInjectPageDict } from '@/components/SmartPageProvider';
import { computed, onMounted, ref, unref } from 'vue';
- import { warnMessage } from '@/utils/message/SystemNotice';
import { SmartLayoutSeparate } from '@/components/SmartLayoutSeparate';
import { useDesign } from '@/hooks/web/useDesign';
- import TenantSetPackageModal from './components/TenantSetPackageModal.vue';
import TenantUserList from './components/TenantUserList.vue';
+ import TenantSubscribeList from './components/TenantSubscribeList.vue';
const { prefixCls } = useDesign('system-tenant-manager');
const { t } = useI18n();
const { getTableSize } = useSizeSetting();
- const [registerSetPackageModal, { openModal }] = useModal();
-
const isolationStrategyListRef = ref([]);
const computedIsolationStrategyMap = computed(() => {
return mapValues(keyBy(unref(isolationStrategyListRef), 'value'), 'label');
@@ -81,12 +78,12 @@
});
onMounted(() => pageDictRegister(SYSTEM_TENANT_TYPE_DICT));
- const currentTenantRef = ref(null);
+ const currentTenantRef = ref(null);
const handleCurrentChange = ({ row }) => {
currentTenantRef.value = row;
};
- const [registerTable, { getCheckboxRecords }] = useSmartTable({
+ const [registerTable] = useSmartTable({
id: 'system-tenant-manager',
columns: getTableColumns(),
height: 'auto',
@@ -170,22 +167,6 @@
code: 'useYnFalse',
auth: Permission.useYn,
},
- {
- name: t('system.views.tenant.manager.title.setPackage'),
- customRender: 'ant',
- props: {
- preIcon: 'ant-design:setting-outlined',
- type: 'primary',
- onClick: () => {
- const selectRows = getCheckboxRecords();
- if (!selectRows || selectRows.length !== 1) {
- warnMessage(t('system.views.tenant.manager.message.selectOneRow'));
- return false;
- }
- openModal(true, { tenantId: selectRows[0].id });
- },
- },
- },
],
},
});
diff --git a/src/modules/smart-system/views/tenant/tenantManager/components/TenantSetPackageModal.vue b/src/modules/smart-system/views/tenant/tenantManager/components/TenantSetPackageModal.vue
deleted file mode 100644
index 20923a4c0..000000000
--- a/src/modules/smart-system/views/tenant/tenantManager/components/TenantSetPackageModal.vue
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/src/modules/smart-system/views/tenant/tenantManager/components/TenantSubscribeList.vue b/src/modules/smart-system/views/tenant/tenantManager/components/TenantSubscribeList.vue
new file mode 100644
index 000000000..a11df4262
--- /dev/null
+++ b/src/modules/smart-system/views/tenant/tenantManager/components/TenantSubscribeList.vue
@@ -0,0 +1,136 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/modules/smart-system/views/tenant/tenantManager/components/TenantUserList.vue b/src/modules/smart-system/views/tenant/tenantManager/components/TenantUserList.vue
index 92cb960d5..2d38a1865 100644
--- a/src/modules/smart-system/views/tenant/tenantManager/components/TenantUserList.vue
+++ b/src/modules/smart-system/views/tenant/tenantManager/components/TenantUserList.vue
@@ -12,11 +12,16 @@
import { useSizeSetting } from '@/hooks/setting/UseSizeSetting';
import { useModal } from '@/components/Modal';
- import { getTabUserListColumns, getTabUserListSearchSchemas } from '../SysTenantListView.config';
+ import {
+ getTabUserListColumns,
+ getTabUserListSearchSchemas,
+ Permission,
+ } from '../SysTenantListView.config';
import { listTenantUserApi, removeBindUserApi } from '../SysTenantListView.api';
import { useDesign } from '@/hooks/web/useDesign';
import { useI18n } from '@/hooks/web/useI18n';
import TenantAddUserModal from './TenantAddUserModal.vue';
+ import { hasPermission } from '@/utils/auth';
const props = defineProps({
tenantId: propTypes.number,
@@ -98,7 +103,7 @@
props: computed(() => {
return {
onClick: () => openAddUserModal(true, { tenantId: props.tenantId }),
- disabled: !unref(computedChoseTenant),
+ disabled: !unref(computedChoseTenant) || !hasPermission(Permission.bindUser),
};
}),
},
@@ -106,7 +111,7 @@
code: 'delete',
props: computed(() => {
return {
- disabled: !unref(computedChoseTenant),
+ disabled: !unref(computedChoseTenant) || !hasPermission(Permission.bindUser),
};
}),
},
diff --git a/src/modules/smart-system/views/tenant/tenantManager/lang/zh_CN.ts b/src/modules/smart-system/views/tenant/tenantManager/lang/zh_CN.ts
index 9b197e45d..c8db8379b 100644
--- a/src/modules/smart-system/views/tenant/tenantManager/lang/zh_CN.ts
+++ b/src/modules/smart-system/views/tenant/tenantManager/lang/zh_CN.ts
@@ -33,6 +33,13 @@ export default {
bindTime: '绑定时间',
bindBy: '绑定人',
},
+ subscribe: {
+ tenantId: '租户',
+ packageId: '套餐包',
+ effectTime: '生效日期',
+ expireTime: '失效日期',
+ userNumber: '用户数',
+ },
},
validate: {
tenantCode: '请输入租户编号',
diff --git a/src/modules/smart-system/views/tenant/tenantPackage/SysTenantPackageListView.config.ts b/src/modules/smart-system/views/tenant/tenantPackage/SysTenantPackageListView.config.ts
index e4c52e357..087f0838c 100644
--- a/src/modules/smart-system/views/tenant/tenantPackage/SysTenantPackageListView.config.ts
+++ b/src/modules/smart-system/views/tenant/tenantPackage/SysTenantPackageListView.config.ts
@@ -117,6 +117,7 @@ export const getFormSchemas = (t: Function): FormSchema[] => {
componentProps: {
showTime: true,
},
+ required: true,
},
{
field: 'seq',