租户套餐管理优化体验

This commit is contained in:
JEECG
2025-02-07 16:38:02 +08:00
parent 7257dfe5ba
commit d6c6a1c01f
11 changed files with 149 additions and 59 deletions

View File

@ -26,12 +26,12 @@
>邀请用户加入</a-button
>
<a-button
preIcon="ant-design:plus-outlined"
preIcon="ant-design:sliders-outlined"
type="primary"
@click="handlePack"
style="margin-right: 5px"
:disabled="selectedRowKeys.length === 0"
>套餐</a-button
>套餐管理</a-button
>
<a-button type="primary" @click="recycleBinClick" preIcon="ant-design:hdd-outlined">回收站</a-button>
</template>

View File

@ -16,7 +16,7 @@
<TableAction :actions="getActions(record)" />
</template>
</BasicTable>
<!-- 产品 -->
<!-- 套餐 -->
<TenantPackMenuModal @register="registerPackMenuModal" @success="handleSuccess"/>
</div>
</template>
@ -66,7 +66,7 @@
{
label: '删除',
popConfirm: {
title: '是否确认删除租户产品包',
title: '是否确认删除租户套餐包',
confirm: handleDelete.bind(null, record.id),
},
},
@ -74,7 +74,7 @@
}
/**
* 编辑产品
* 编辑套餐
*/
function handleAdd() {
packModal(true, {
@ -86,7 +86,7 @@
/**
* 删除默认产品
* 删除默认套餐
*/
async function handleDelete(id) {
await deleteTenantPack({ ids: id }, handleSuccess);
@ -104,7 +104,7 @@
}
/**
* 新增产品
* 新增套餐
*/
async function handlePack() {
if (unref(selectedRowKeys).length > 1) {
@ -124,12 +124,12 @@
}
/**
* 批量删除产品
* 批量删除套餐
*/
async function handlePackBatch() {
Modal.confirm({
title: '删除租户产品包',
content: '是否删除租户产品包',
title: '删除租户套餐包',
content: '是否删除租户套餐包',
okText: '确认',
cancelText: '取消',
onOk: async () => {

View File

@ -11,6 +11,13 @@
style="margin-right: 5px"
>批量删除
</a-button>
<a-button
preIcon="ant-design:sync-outlined"
type="primary"
@click="handleSyncDefaultPack"
style="margin-right: 5px"
>初始化默认套餐
</a-button>
</template>
<template #action="{ record }">
<TableAction :actions="getActions(record)" :dropDownActions="getDropDownAction(record)" />
@ -24,7 +31,7 @@
import { reactive, ref, unref } from 'vue';
import { BasicModal, useModal, useModalInner } from '/@/components/Modal';
import { packColumns, userColumns, packFormSchema } from '../tenant.data';
import { getTenantUserList, leaveTenant, packList, deleteTenantPack } from '../tenant.api';
import { getTenantUserList, leaveTenant, packList, deleteTenantPack, syncDefaultTenantPack } from '../tenant.api';
import { useListPage } from '/@/hooks/system/useListPage';
import { BasicTable, TableAction } from '/@/components/Table';
import TenantPackMenuModal from './TenantPackMenuModal.vue';
@ -64,7 +71,7 @@
const [registerTable, { reload }, { rowSelection, selectedRowKeys, selectedRows }] = tableContext;
// Emits声明
const emit = defineEmits(['register', 'success']);
//是否显示新增和编辑产品
//是否显示新增和编辑套餐
const showPackAddAndEdit = ref<boolean>(false);
//表单赋值
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
@ -73,7 +80,7 @@
success();
});
//设置标题
const title = '租户产品包列表';
const title = '租户个性化套餐包';
//表单提交事件
async function handleSubmit(v) {
@ -115,40 +122,40 @@
});
}
//默认系统产品包不允许删除,包含(超级管理员、组织账户管理员、组织应用管理员)
//默认系统套餐包不允许删除,包含(超级管理员、组织账户管理员、组织应用管理员)
const packCode = reactive<any>(['superAdmin','accountAdmin','appAdmin']);
const { createMessage } = useMessage();
/**
* 删除产品
* 删除套餐
* @param 删除
*/
async function handleDelete(record) {
//update-begin---author:wangshuai ---date:20230222 for系统默认产品包不允许删除------------
//update-begin---author:wangshuai ---date:20230222 for系统默认套餐包不允许删除------------
if(packCode.indexOf(record.packCode) != -1){
createMessage.warning("默认系统产品包不允许删除");
createMessage.warning("默认系统套餐包不允许删除");
return;
}
//update-end---author:wangshuai ---date:20230222 for系统默认产品包不允许删除------------
//update-end---author:wangshuai ---date:20230222 for系统默认套餐包不允许删除------------
await deleteTenantPack({ ids: record.id }, success);
}
/**
* 批量删除产品
* 批量删除套餐
*/
async function handlePackBatch() {
let value = selectedRows.value;
if(value && value.length>0){
for (let i = 0; i < value.length; i++) {
if(packCode.indexOf(value[i].packCode) != -1){
createMessage.warning("默认系统产品包不允许删除");
createMessage.warning("默认系统套餐包不允许删除");
return;
}
}
}
Modal.confirm({
title: '删除租户产品包',
content: '是否删除租户产品包',
title: '删除租户套餐包',
content: '是否删除租户套餐包',
okText: '确认',
cancelText: '取消',
onOk: async () => {
@ -157,6 +164,18 @@
})
}
async function handleSyncDefaultPack() {
Modal.confirm({
title: '初始化默认套餐包',
content: '是否初始化默认套餐包',
okText: '确认',
cancelText: '取消',
onOk: async () => {
await syncDefaultTenantPack({tenantId: unref(tenantId)}, success);
},
});
}
/**
*
* 新增表单
@ -171,7 +190,7 @@
}
/**
* 产品包下面的用户
* 套餐包下面的用户
* @param record
*/
function seeTenantPackUser(record) {
@ -193,7 +212,7 @@
{
label: '删除',
popConfirm: {
title: '是否确认删除租户产品包',
title: '是否确认删除租户套餐包',
confirm: handleDelete.bind(null, record),
},
},

View File

@ -20,7 +20,7 @@
});
//租户
const tenantId = ref<number>();
//产品包类型
//套餐包类型
const packType = ref<number>();
//表单赋值
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {
@ -36,14 +36,14 @@
console.log(data.record)
await setFieldsValue({ ...data.record });
}
//update-begin---author:wangshuai ---date:20230705 for【QQYUN-5685】2 产品包增加一个查看:添加底部有没有按钮及表单禁用------------
//update-begin---author:wangshuai ---date:20230705 for【QQYUN-5685】2 套餐包增加一个查看:添加底部有没有按钮及表单禁用------------
setModalProps({ confirmLoading: false, showCancelBtn:!!data?.showFooter, showOkBtn:!!data?.showFooter });
// 隐藏底部时禁用整个表单
setProps({ disabled: !data?.showFooter })
//update-end---author:wangshuai ---date:20230705 for【QQYUN-5685】2 产品包增加一个查看:添加底部有没有按钮及表单禁用------------
//update-end---author:wangshuai ---date:20230705 for【QQYUN-5685】2 套餐包增加一个查看:添加底部有没有按钮及表单禁用------------
});
//设置标题
const title = computed(() => (unref(isUpdate) ? '编辑租户产品包' : '新增租户产品包'));
const title = computed(() => (unref(isUpdate) ? '编辑租户套餐包' : '新增租户套餐包'));
//表单提交事件
async function handleSubmit(v) {
const values = await validate();

View File

@ -43,7 +43,7 @@
return tenantPackData.tenantId;
})
//产品包信息
//套餐包信息
const tenantPackData = reactive<any>({});
//表单赋值
const [registerModal, { setModalProps, closeModal }] = useModalInner(async (data) => {

View File

@ -20,6 +20,7 @@ enum Api {
recycleBinPageList = '/sys/tenant/recycleBinPageList',
deleteLogicDeleted = '/sys/tenant/deleteLogicDeleted',
revertTenantLogic = '/sys/tenant/revertTenantLogic',
syncDefaultPack = '/sys/tenant/syncDefaultPack',
//用户产品包关系api
queryTenantPackUserList = '/sys/tenant/queryTenantPackUserList',
deleteTenantPackUser = '/sys/tenant/deleteTenantPackUser',
@ -156,6 +157,17 @@ export const deleteTenantPack = (params, handleSuccess) => {
});
};
/**
* 初始化套餐包
* @param params
* @param handleSuccess
*/
export const syncDefaultTenantPack = (params, handleSuccess) => {
return defHttp.post({ url: Api.syncDefaultPack, data: params }, { joinParamsToUrl: true }).then(() => {
handleSuccess();
});
};
/**
* 获取租户回收站的列表
* @param params

View File

@ -251,10 +251,10 @@ export const userSearchFormSchema: FormSchema[] = [
},
];
//产品包列表
//套餐包列表
export const packColumns: BasicColumn[] = [
{
title: '产品包名称',
title: '套餐包名称',
dataIndex: 'packName',
width: 100,
},
@ -277,21 +277,21 @@ export const packColumns: BasicColumn[] = [
},
];
//产品包搜索表单
//套餐包搜索表单
export const packFormSchema: FormSchema[] = [
{
field: 'packName',
label: '产品包名称',
label: '套餐包名称',
component: 'JInput',
colProps: { xxl: 8 },
},
];
//产品包表单
//套餐包表单
export const packMenuFormSchema: FormSchema[] = [
{
field: 'packName',
label: '产品包名称',
label: '套餐包名称',
component: 'Input',
},
{
@ -377,7 +377,7 @@ export const searchRecycleFormSchema : FormSchema[] = [
},
]
//产品包用户列表
//套餐包用户列表
export const tenantPackUserColumns: BasicColumn[] = [
{
title: '用户',