A modern vue admin. It is based on Vue3, vite and TypeScript. It's fast!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

313 lines
7.4 KiB

import { ref, onMounted, reactive, createVNode, unref } from 'vue';
import type { Ref } from 'vue';
import { useI18n } from 'vue-i18n';
import { message, Modal } from 'ant-design-vue';
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
import { ApiServiceEnum, defHttp } from '@/utils/http/axios';
const defaultSearchModel = {
groupCode: '',
groupName: '',
useYn: 1,
};
/**
* 加载数据
*/
export const vueLoadData = () => {
const sortData = reactive({
sortName: 'seq',
sortOrder: 'asc',
});
// 数据
const data = ref([]);
// 数据加载状态
const loading = ref(false);
// 搜索表单
const searchModel = ref<any>(Object.assign({}, defaultSearchModel));
// 分页信息
const tablePage = reactive({
total: 0,
currentPage: 1,
pageSize: 500,
});
/**
* 加载数据函数
*/
const loadData = async () => {
// 构建参数
const allParameter: any = {
...sortData,
limit: tablePage.pageSize,
page: tablePage.currentPage,
};
// 自定义参数
const customParameter: any = {
QUERY_CREATE_UPDATE_USER: true,
};
Object.keys(searchModel.value).forEach((key) => {
const value = searchModel.value[key];
if (value !== null && value !== '') {
if (typeof value === 'string') {
if (value.trim() !== '') {
customParameter[key + '@like'] = value;
}
} else {
customParameter[key + '@='] = value;
}
}
});
allParameter.parameter = customParameter;
loading.value = true;
try {
const { rows, total } = await defHttp.post({
service: ApiServiceEnum.SMART_SYSTEM,
url: 'sys/userGroup/list',
data: allParameter,
});
tablePage.total = total;
data.value = rows;
} finally {
loading.value = false;
}
};
/**
* 排序变化时触发
*/
const handleSortChange = ({ property, order }: any) => {
sortData.sortOrder = order;
sortData.sortName = property;
loadData();
};
/**
* 分页触发事件
*/
const handlePageChange = ({ currentPage, pageSize }: any) => {
tablePage.currentPage = currentPage;
tablePage.pageSize = pageSize;
loadData();
};
/**
* 重置搜索表单
*/
const resetSearch = () => {
searchModel.value = Object.assign({}, defaultSearchModel);
};
onMounted(loadData);
return {
data,
loading,
searchModel,
tablePage,
handlePageChange,
resetSearch,
loadData,
handleSortChange,
};
};
const defaultAddEditModel = {
useYn: true,
seq: 1,
};
/**
* 添加修改编码验证规则
*/
const addEditFormRules = (t: Function) => {
return {
groupCode: [
{ required: true, trigger: 'blur', message: t('system.views.userGroup.validate.groupCode') },
],
groupName: [
{ required: true, trigger: 'blur', message: t('system.views.userGroup.validate.groupName') },
],
};
};
export const vueAddUpdate = (loadData: any) => {
const t = useI18n().t;
// 保存加载状态
const saveLoading = ref(false);
// 查询加载状态
const getLoading = ref(false);
// 弹窗状态
const addEditModalVisible = ref(false);
// 是否是添加
const isAdd = ref(false);
// 添加修改表单
const addEditModel = ref<any>(Object.assign({}, defaultAddEditModel));
/**
* 添加操作
*/
const handleShowAdd = () => {
addEditModel.value = Object.assign({}, defaultAddEditModel);
isAdd.value = true;
addEditModalVisible.value = true;
};
/**
* 编辑操作
* @param id
*/
const handleShowEdit = async (id: number) => {
isAdd.value = false;
addEditModalVisible.value = true;
getLoading.value = true;
try {
addEditModel.value = await defHttp.post({
service: ApiServiceEnum.SMART_SYSTEM,
url: 'sys/userGroup/getById',
data: id,
});
} finally {
getLoading.value = false;
}
};
/**
* 保存操作
*/
const handleSave = async () => {
saveLoading.value = true;
try {
await defHttp.post({
service: ApiServiceEnum.SMART_SYSTEM,
url: 'sys/userGroup/saveUpdate',
data: unref(addEditModel),
});
addEditModalVisible.value = false;
loadData();
} finally {
saveLoading.value = false;
}
};
return {
saveLoading,
getLoading,
addEditModalVisible,
isAdd,
addEditModel,
handleShowAdd,
handleShowEdit,
handleSave,
formRules: reactive(addEditFormRules(t)),
};
};
/**
* 删除操作
*/
export const vueDelete = (gridRef: Ref, loadData: any) => {
/**
* 删除操作
*/
const handleDelete = () => {
// 获取选中行
const selectRows = gridRef.value.getCheckboxRecords();
if (selectRows.length === 0) {
message.error('请选择要删除的数据');
return false;
}
Modal.confirm({
title: '确认',
icon: createVNode(ExclamationCircleOutlined),
content: '确定要删除吗?',
onOk: async () => {
await defHttp.post({
service: ApiServiceEnum.SMART_SYSTEM,
url: 'sys/userGroup/batchDeleteById',
data: selectRows.map((item: any) => item.groupId),
});
loadData();
},
});
};
return {
handleDelete,
};
};
/**
* 设置用户
*/
export const vueSetUser = () => {
const loadUserLoading = ref(false);
const setUserLoading = ref(false);
const setUserModalVisible = ref(false);
// 所有用户数据
const allUserData = ref<Array<any>>([]);
// 选中的key
const targetKeys = ref<Array<string>>([]);
let selectRow: any = null;
/**
* 设置用户操作
*/
const handleShowSetUser = async (row: any) => {
selectRow = row;
setUserModalVisible.value = true;
loadUserLoading.value = true;
try {
loadUserLoading.value = true;
// 加载所有用户数据
if (allUserData.value.length === 0) {
const result: Array<any> = await defHttp.post({
service: ApiServiceEnum.SMART_SYSTEM,
url: 'sys/user/list',
data: {
sortName: 'seq',
parameter: {
'useYn@=': true,
},
},
});
allUserData.value = result.map(({ userId, fullName, username }: any) => {
return {
key: userId + '',
title: `${fullName}[${username}]`,
};
});
}
// 加载用户关联数据
const result: Array<number> = await defHttp.post({
service: ApiServiceEnum.SMART_SYSTEM,
url: 'sys/userGroup/listUserIdById',
data: selectRow.groupId,
});
targetKeys.value = result.map((item) => item + '');
} finally {
loadUserLoading.value = false;
}
};
const handleTransChange = (targetKeyList: Array<string>) => {
targetKeys.value = targetKeyList;
};
/**
* 设置用户操作
*/
const handleSetUser = async () => {
try {
setUserLoading.value = true;
await defHttp.post({
service: ApiServiceEnum.SMART_SYSTEM,
url: 'sys/userGroup/saveUserGroupByGroupId',
data: {
groupId: selectRow.groupId,
userIdList: targetKeys.value,
},
});
setUserModalVisible.value = false;
} finally {
setUserLoading.value = false;
}
};
return {
loadUserLoading,
setUserLoading,
handleShowSetUser,
setUserModalVisible,
handleSetUser,
allUserData,
targetKeys,
handleTransChange,
};
};