chenhj
2026-04-23 fa34a64369d443e697c5b0520349878eeaaa8802
src/views/collaborativeApproval/approvalManagement/index.vue
@@ -188,6 +188,8 @@
  Suitcase, Calendar, Location, Money, ShoppingCart, DocumentChecked,
  Van, ArrowRight, User, InfoFilled
} from '@element-plus/icons-vue';
import { getApproveProcessConfigNodeList, addApproveProcessConfigNode } from '@/api/collaborativeApproval/approvalManagement';
import { userListNoPage } from '@/api/system/user';
// 当前选中的标签页
const activeTab = ref('1');
@@ -271,44 +273,8 @@
  return texts[index] || `第${index + 1}级`;
};
// 获取审批人数量
const getApproverCount = (typeValue) => {
  const type = Number(typeValue);
  const data = mockConfigData[type] || [];
  return data.length;
};
// 模拟用户列表数据
const userList = ref([
  { userId: 1, nickName: '张三' },
  { userId: 2, nickName: '李四' },
  { userId: 3, nickName: '王五' },
  { userId: 4, nickName: '赵六' },
  { userId: 5, nickName: '孙七' },
  { userId: 6, nickName: '周八' },
  { userId: 7, nickName: '吴九' },
  { userId: 8, nickName: '郑十' },
]);
// 模拟审批配置数据存储(按审批类型分类)
const mockConfigData = {
  1: [
    { id: 1, approveType: 1, approverId: 1, approverName: '张三', sortOrder: 1 },
    { id: 2, approveType: 1, approverId: 2, approverName: '李四', sortOrder: 2 },
  ],
  2: [
    { id: 3, approveType: 2, approverId: 3, approverName: '王五', sortOrder: 1 },
  ],
  3: [],
  4: [
    { id: 4, approveType: 4, approverId: 1, approverName: '张三', sortOrder: 1 },
    { id: 5, approveType: 4, approverId: 3, approverName: '王五', sortOrder: 2 },
    { id: 6, approveType: 4, approverId: 5, approverName: '孙七', sortOrder: 3 },
  ],
  5: [],
  6: [],
  7: [],
};
// 审批人列表(真实接口)
const userList = ref([]);
// 审批人列表
const approverList = ref([]);
@@ -326,14 +292,40 @@
};
// 加载审批配置数据(模拟)
const loadData = () => {
const loadData = async () => {
  loading.value = true;
  setTimeout(() => {
    const data = mockConfigData[currentApproveType.value] || [];
    approverList.value = data.sort((a, b) => a.sortOrder - b.sortOrder);
  try {
    const res = await getApproveProcessConfigNodeList(currentApproveType.value);
    const source = Array.isArray(res?.data)
      ? res.data
      : Array.isArray(res?.rows)
        ? res.rows
        : Array.isArray(res?.data?.records)
          ? res.data.records
          : [];
    const data = source.map((item, index) => ({
      ...item,
      sortOrder: item.nodeOrder ?? item.sortOrder ?? index + 1,
    }));
    approverList.value = data.sort((a, b) => (a.sortOrder || 0) - (b.sortOrder || 0));
    originalList.value = JSON.parse(JSON.stringify(approverList.value));
  } catch (error) {
    approverList.value = [];
    originalList.value = [];
    ElMessage.error('加载审批配置失败');
  } finally {
    loading.value = false;
  }, 300);
  }
};
const loadUserList = async () => {
  try {
    const res = await userListNoPage();
    userList.value = Array.isArray(res?.data) ? res.data : [];
  } catch (error) {
    userList.value = [];
    ElMessage.error('加载人员列表失败');
  }
};
// 审批人选择变化
@@ -393,8 +385,8 @@
  approverList.value[index + 1].sortOrder = index + 2;
};
// 保存配置(模拟)
const handleSave = () => {
// 保存配置
const handleSave = async () => {
  if (approverList.value.length === 0) {
    ElMessage.warning('请至少配置一个审批人');
    return;
@@ -414,17 +406,21 @@
  }
  saveLoading.value = true;
  setTimeout(() => {
    mockConfigData[currentApproveType.value] = approverList.value.map((item, index) => ({
      ...item,
      id: item.id || Date.now() + index,
      sortOrder: index + 1,
  try {
    const payload = approverList.value.map((item, index) => ({
      approveType: currentApproveType.value,
      nodeOrder: index + 1,
      approverId: item.approverId,
      approverName: item.approverName,
    }));
    originalList.value = JSON.parse(JSON.stringify(mockConfigData[currentApproveType.value]));
    approverList.value = JSON.parse(JSON.stringify(originalList.value));
    await addApproveProcessConfigNode(payload);
    ElMessage.success('保存成功');
    await loadData();
  } catch (error) {
    ElMessage.error('保存失败');
  } finally {
    saveLoading.value = false;
  }, 500);
  }
};
// 重置
@@ -445,8 +441,9 @@
    .catch(() => {});
};
onMounted(() => {
  loadData();
onMounted(async () => {
  await loadUserList();
  await loadData();
});
</script>