角色管理接口对接
This commit is contained in:
@@ -30,9 +30,9 @@ export const UserAddDepartment = (name: string) => {
|
||||
};
|
||||
|
||||
// 删除部门
|
||||
export const UserDeleteDepartment = (name: string) => {
|
||||
export const UserDeleteDepartment = (id: string) => {
|
||||
const formData = new FormData();
|
||||
formData.append("name", name);
|
||||
formData.append("id", id);
|
||||
return request({
|
||||
url: `${AUTH_BASE_URL}/user/delete_department`,
|
||||
method: "post",
|
||||
@@ -43,10 +43,11 @@ export const UserDeleteDepartment = (name: string) => {
|
||||
});
|
||||
};
|
||||
|
||||
// 公司部门人员名单
|
||||
export const UserPersonlist = (name: string) => {
|
||||
// 部门分页
|
||||
export const UserPersonlist = (data: any) => {
|
||||
const formData = new FormData();
|
||||
formData.append("name", name);
|
||||
formData.append("per_page", data.pageSize);
|
||||
formData.append("page", data.pageNum);
|
||||
return request({
|
||||
url: `${AUTH_BASE_URL}/user/personlist`,
|
||||
method: "post",
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import { isFile, isString } from "@/utils/auxiliaryFunction";
|
||||
import request from "@/utils/request";
|
||||
const AUTH_BASE_URL = "/api2";
|
||||
|
||||
@@ -64,10 +65,11 @@ export const UserEditorialStaff = (data: any) => {
|
||||
formData.append("Dateofjoining", data.Dateofjoining);
|
||||
formData.append("Confirmationtime", data.Confirmationtime);
|
||||
formData.append("Practicingcertificatetime", data.Practicingcertificatetime);
|
||||
formData.append("AcademicResume", data.AcademicResume);
|
||||
formData.append("academic", JSON.stringify(data.academic));
|
||||
formData.append("contract", data.contract);
|
||||
formData.append("ApplicationForm", data.ApplicationForm);
|
||||
console.log(data.AcademicResume, data.contract, data.ApplicationForm);
|
||||
if (isFile(data.AcademicResume)) formData.append("AcademicResume", data.AcademicResume);
|
||||
if (isFile(data.contract)) formData.append("contract", data.contract);
|
||||
if (isFile(data.ApplicationForm)) formData.append("ApplicationForm", data.ApplicationForm);
|
||||
return request({
|
||||
url: `${AUTH_BASE_URL}/user/editorial-staff`,
|
||||
method: "post",
|
||||
|
||||
@@ -127,8 +127,7 @@ export function convertFilePathsToObject(filePaths: string | string[]): Array<{
|
||||
|
||||
// 分割文件名和UUID
|
||||
const lastUnderscoreIndex = filePart.lastIndexOf("_");
|
||||
const name =
|
||||
lastUnderscoreIndex > 0 ? filePart.substring(0, lastUnderscoreIndex) : filePart;
|
||||
const name = lastUnderscoreIndex > 0 ? filePart.substring(0, lastUnderscoreIndex) : filePart;
|
||||
const uuid = lastUnderscoreIndex > 0 ? filePart.substring(lastUnderscoreIndex + 1) : "";
|
||||
|
||||
return {
|
||||
@@ -139,3 +138,10 @@ export function convertFilePathsToObject(filePaths: string | string[]): Array<{
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
export function isString(value: any): boolean {
|
||||
return typeof value === "string";
|
||||
}
|
||||
export function isFile(obj: any): obj is File {
|
||||
return obj instanceof File;
|
||||
}
|
||||
|
||||
@@ -42,18 +42,8 @@
|
||||
@selection-change="handleSelectionChange"
|
||||
>
|
||||
<el-table-column type="selection" width="55" align="center" />
|
||||
<el-table-column label="角色名称" prop="name" min-width="100" />
|
||||
<el-table-column label="角色编码" prop="code" width="150" />
|
||||
|
||||
<el-table-column label="状态" align="center" width="100">
|
||||
<template #default="scope">
|
||||
<el-tag v-if="scope.row.status === 1" type="success">正常</el-tag>
|
||||
<el-tag v-else type="info">禁用</el-tag>
|
||||
</template>
|
||||
</el-table-column>
|
||||
|
||||
<el-table-column label="排序" align="center" width="80" prop="sort" />
|
||||
|
||||
<el-table-column label="部门名称" prop="department" />
|
||||
<el-table-column label="在职情况" prop="state" />
|
||||
<el-table-column fixed="right" label="操作" width="220">
|
||||
<template #default="scope">
|
||||
<el-button
|
||||
@@ -70,7 +60,7 @@
|
||||
size="small"
|
||||
link
|
||||
icon="delete"
|
||||
@click="handleDelete(scope.row.id)"
|
||||
@click="onUserDeleteDepartment(scope.row.id)"
|
||||
>
|
||||
删除
|
||||
</el-button>
|
||||
@@ -95,19 +85,8 @@
|
||||
@close="handleCloseDialog"
|
||||
>
|
||||
<el-form ref="roleFormRef" :model="formData" :rules="rules" label-width="100px">
|
||||
<el-form-item label="角色名称" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入角色名称" />
|
||||
</el-form-item>
|
||||
<el-form-item label="角色编码" prop="code">
|
||||
<el-input v-model="formData.code" placeholder="请输入角色编码" disabled />
|
||||
</el-form-item>
|
||||
<el-form-item label="排序" prop="sort">
|
||||
<el-input-number
|
||||
v-model="formData.sort"
|
||||
controls-position="right"
|
||||
:min="0"
|
||||
style="width: 100px"
|
||||
/>
|
||||
<el-form-item label="部门名称" prop="name">
|
||||
<el-input v-model="formData.name" placeholder="请输入部门名称" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
|
||||
@@ -186,8 +165,12 @@
|
||||
import { useAppStore } from "@/store/modules/app-store";
|
||||
import { DeviceEnum } from "@/enums/settings/device-enum";
|
||||
|
||||
import RoleAPI, { RolePageVO, RoleForm, RolePageQuery } from "@/api/system/role-api";
|
||||
import MenuAPI from "@/api/system/menu-api";
|
||||
import RoleAPI, { RolePageVO } from "@/api/system/role-api";
|
||||
import {
|
||||
UserAddDepartment,
|
||||
UserDeleteDepartment,
|
||||
UserPersonlist,
|
||||
} from "@/api/calibration/department";
|
||||
|
||||
defineOptions({
|
||||
name: "Role",
|
||||
@@ -204,7 +187,7 @@ const loading = ref(false);
|
||||
const ids = ref<number[]>([]);
|
||||
const total = ref(0);
|
||||
|
||||
const queryParams = reactive<RolePageQuery>({
|
||||
const queryParams = reactive<any>({
|
||||
pageNum: 1,
|
||||
pageSize: 10,
|
||||
});
|
||||
@@ -223,16 +206,12 @@ const dialog = reactive({
|
||||
const drawerSize = computed(() => (appStore.device === DeviceEnum.DESKTOP ? "600px" : "90%"));
|
||||
|
||||
// 角色表单
|
||||
const formData = reactive<RoleForm>({
|
||||
sort: 1,
|
||||
status: 1,
|
||||
const formData = reactive<any>({
|
||||
name: "",
|
||||
});
|
||||
|
||||
const rules = reactive({
|
||||
name: [{ required: true, message: "请输入角色名称", trigger: "blur" }],
|
||||
code: [{ required: true, message: "请输入角色编码", trigger: "blur" }],
|
||||
dataScope: [{ required: true, message: "请选择数据权限", trigger: "blur" }],
|
||||
status: [{ required: true, message: "请选择状态", trigger: "blur" }],
|
||||
name: [{ required: true, message: "请输入部门名称", trigger: "blur" }],
|
||||
});
|
||||
|
||||
// 选中的角色
|
||||
@@ -251,10 +230,10 @@ const parentChildLinked = ref(true);
|
||||
// 获取数据
|
||||
function fetchData() {
|
||||
loading.value = true;
|
||||
RoleAPI.getPage(queryParams)
|
||||
.then((data) => {
|
||||
roleList.value = data.list;
|
||||
total.value = data.total;
|
||||
UserPersonlist(queryParams)
|
||||
.then((res: any) => {
|
||||
roleList.value = res.data;
|
||||
total.value = res.total;
|
||||
})
|
||||
.finally(() => {
|
||||
loading.value = false;
|
||||
@@ -307,7 +286,7 @@ function handleSubmit() {
|
||||
})
|
||||
.finally(() => (loading.value = false));
|
||||
} else {
|
||||
RoleAPI.create(formData)
|
||||
UserAddDepartment(formData.name)
|
||||
.then(() => {
|
||||
ElMessage.success("新增成功");
|
||||
handleCloseDialog();
|
||||
@@ -331,6 +310,26 @@ function handleCloseDialog() {
|
||||
formData.status = 1;
|
||||
}
|
||||
|
||||
const onUserDeleteDepartment = (id: string) => {
|
||||
ElMessageBox.confirm("确认删除已选中的数据项?", "警告", {
|
||||
confirmButtonText: "确定",
|
||||
cancelButtonText: "取消",
|
||||
type: "warning",
|
||||
}).then(
|
||||
() => {
|
||||
loading.value = true;
|
||||
UserDeleteDepartment(id)
|
||||
.then(() => {
|
||||
ElMessage.success("删除成功");
|
||||
handleResetQuery();
|
||||
})
|
||||
.finally(() => (loading.value = false));
|
||||
},
|
||||
() => {
|
||||
ElMessage.info("已取消删除");
|
||||
}
|
||||
);
|
||||
};
|
||||
// 删除角色
|
||||
function handleDelete(roleId?: number) {
|
||||
const roleIds = [roleId || ids.value].join(",");
|
||||
@@ -360,29 +359,29 @@ function handleDelete(roleId?: number) {
|
||||
}
|
||||
|
||||
// 打开分配菜单权限弹窗
|
||||
async function handleOpenAssignPermDialog(row: RolePageVO) {
|
||||
const roleId = row.id;
|
||||
if (roleId) {
|
||||
assignPermDialogVisible.value = true;
|
||||
loading.value = true;
|
||||
|
||||
checkedRole.value.id = roleId;
|
||||
checkedRole.value.name = row.name;
|
||||
|
||||
// 获取所有的菜单
|
||||
menuPermOptions.value = await MenuAPI.getOptions();
|
||||
|
||||
// 回显角色已拥有的菜单
|
||||
RoleAPI.getRoleMenuIds(roleId)
|
||||
.then((data) => {
|
||||
const checkedMenuIds = data;
|
||||
checkedMenuIds.forEach((menuId) => permTreeRef.value!.setChecked(menuId, true, false));
|
||||
})
|
||||
.finally(() => {
|
||||
loading.value = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
// async function handleOpenAssignPermDialog(row: RolePageVO) {
|
||||
// const roleId = row.id;
|
||||
// if (roleId) {
|
||||
// assignPermDialogVisible.value = true;
|
||||
// loading.value = true;
|
||||
//
|
||||
// checkedRole.value.id = roleId;
|
||||
// checkedRole.value.name = row.name;
|
||||
//
|
||||
// // 获取所有的菜单
|
||||
// menuPermOptions.value = await MenuAPI.getOptions();
|
||||
//
|
||||
// // 回显角色已拥有的菜单
|
||||
// RoleAPI.getRoleMenuIds(roleId)
|
||||
// .then((data) => {
|
||||
// const checkedMenuIds = data;
|
||||
// checkedMenuIds.forEach((menuId) => permTreeRef.value!.setChecked(menuId, true, false));
|
||||
// })
|
||||
// .finally(() => {
|
||||
// loading.value = false;
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
|
||||
// 分配菜单权限提交
|
||||
function handleAssignPermSubmit() {
|
||||
|
||||
@@ -396,7 +396,7 @@ import {
|
||||
UserEditorialStaff,
|
||||
UserPersonnelList,
|
||||
} from "@/api/calibration/personnelManagement";
|
||||
import { formatJsonString, convertFilePathsToObject } from "@/utils/auxiliaryFunction";
|
||||
import { convertFilePathsToObject } from "@/utils/auxiliaryFunction";
|
||||
|
||||
// ==================== 组件配置 ====================
|
||||
defineOptions({
|
||||
@@ -670,13 +670,13 @@ async function handleOpenDialog(data?: any): Promise<void> {
|
||||
if (data?.id) {
|
||||
dialog.title = "修改用户";
|
||||
try {
|
||||
data.academic = parseJsonToArray(data.academic);
|
||||
const data1 = deepCloneByJSON(data);
|
||||
data1.academic = parseJsonToArray(data1.academic);
|
||||
|
||||
data.AcademicResume = convertFilePathsToObject(JSON.parse(data.AcademicResume))[0];
|
||||
data.contract = convertFilePathsToObject(JSON.parse(data.contract))[0];
|
||||
data.ApplicationForm = convertFilePathsToObject(JSON.parse(data.ApplicationForm))[0];
|
||||
console.log(data);
|
||||
Object.assign(formData, data);
|
||||
data1.AcademicResume = convertFilePathsToObject(JSON.parse(data1.AcademicResume))[0];
|
||||
data1.contract = convertFilePathsToObject(JSON.parse(data1.contract))[0];
|
||||
data1.ApplicationForm = convertFilePathsToObject(JSON.parse(data1.ApplicationForm))[0];
|
||||
Object.assign(formData, data1);
|
||||
} catch (error) {
|
||||
ElMessage.error("加载用户数据失败");
|
||||
console.error("加载用户数据失败:", error);
|
||||
@@ -687,16 +687,34 @@ async function handleOpenDialog(data?: any): Promise<void> {
|
||||
}
|
||||
}
|
||||
|
||||
// 将 JSON 字符串转换为数组对象
|
||||
function parseJsonToArray(jsonString: string): any[] {
|
||||
function deepCloneByJSON(obj: any) {
|
||||
try {
|
||||
const result = JSON.parse(jsonString);
|
||||
return Array.isArray(result) ? result : [];
|
||||
return JSON.parse(JSON.stringify(obj));
|
||||
} catch (error) {
|
||||
console.error("JSON解析失败:", error);
|
||||
return [];
|
||||
console.error("深拷贝失败:", error);
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
// 将 JSON 字符串转换为数组对象
|
||||
function parseJsonToArray(jsonString: any) {
|
||||
// 检查是否已经是对象
|
||||
if (typeof jsonString === "object" && jsonString !== null) {
|
||||
return Array.isArray(jsonString) ? jsonString : [jsonString];
|
||||
}
|
||||
|
||||
// 检查是否为字符串
|
||||
if (typeof jsonString === "string") {
|
||||
try {
|
||||
const parsed = JSON.parse(jsonString);
|
||||
return Array.isArray(parsed) ? parsed : [parsed];
|
||||
} catch (e) {
|
||||
console.error("JSON解析失败:", e);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭用户表单弹窗
|
||||
@@ -850,9 +868,9 @@ function removeFile(field: string): void {
|
||||
/**
|
||||
* 打开导入弹窗
|
||||
*/
|
||||
function handleOpenImportDialog(): void {
|
||||
importDialogVisible.value = true;
|
||||
}
|
||||
// function handleOpenImportDialog(): void {
|
||||
// importDialogVisible.value = true;
|
||||
// }
|
||||
|
||||
/**
|
||||
* 导出用户列表
|
||||
|
||||
Reference in New Issue
Block a user