From 29d7fb412c27600215ec098fb36d5d4d1c511dab Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E9=9B=B7=E6=A0=A1=E4=BA=91?=
<14135925+chenxilxy@user.noreply.gitee.com>
Date: Tue, 9 Dec 2025 21:43:31 +0800
Subject: [PATCH] =?UTF-8?q?=E8=A7=92=E8=89=B2=E7=AE=A1=E7=90=86=E6=8E=A5?=
=?UTF-8?q?=E5=8F=A3=E5=AF=B9=E6=8E=A5?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/api/calibration/department/index.ts | 11 +-
.../calibration/personnelManagement/index.ts | 8 +-
src/utils/auxiliaryFunction/index.ts | 10 +-
src/views/system/role/index.vue | 127 +++++++++---------
src/views/system/user/index.vue | 50 ++++---
5 files changed, 116 insertions(+), 90 deletions(-)
diff --git a/src/api/calibration/department/index.ts b/src/api/calibration/department/index.ts
index 3b9d1dd..e3badcb 100644
--- a/src/api/calibration/department/index.ts
+++ b/src/api/calibration/department/index.ts
@@ -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",
diff --git a/src/api/calibration/personnelManagement/index.ts b/src/api/calibration/personnelManagement/index.ts
index 47b4c12..f045238 100644
--- a/src/api/calibration/personnelManagement/index.ts
+++ b/src/api/calibration/personnelManagement/index.ts
@@ -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",
diff --git a/src/utils/auxiliaryFunction/index.ts b/src/utils/auxiliaryFunction/index.ts
index 870e107..b40ae71 100644
--- a/src/utils/auxiliaryFunction/index.ts
+++ b/src/utils/auxiliaryFunction/index.ts
@@ -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;
+}
diff --git a/src/views/system/role/index.vue b/src/views/system/role/index.vue
index db7aaa4..013748d 100644
--- a/src/views/system/role/index.vue
+++ b/src/views/system/role/index.vue
@@ -42,18 +42,8 @@
@selection-change="handleSelectionChange"
>
-
-
-
-
-
- 正常
- 禁用
-
-
-
-
-
+
+
删除
@@ -95,19 +85,8 @@
@close="handleCloseDialog"
>
-
-
-
-
-
-
-
-
+
+
@@ -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([]);
const total = ref(0);
-const queryParams = reactive({
+const queryParams = reactive({
pageNum: 1,
pageSize: 10,
});
@@ -223,16 +206,12 @@ const dialog = reactive({
const drawerSize = computed(() => (appStore.device === DeviceEnum.DESKTOP ? "600px" : "90%"));
// 角色表单
-const formData = reactive({
- sort: 1,
- status: 1,
+const formData = reactive({
+ 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() {
diff --git a/src/views/system/user/index.vue b/src/views/system/user/index.vue
index ebccfdb..8586592 100644
--- a/src/views/system/user/index.vue
+++ b/src/views/system/user/index.vue
@@ -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 {
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 {
}
}
-// 将 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;
+// }
/**
* 导出用户列表