fix(bpm): 流程管理员固定为超级管理员(去掉选择人员)、步骤可自由切换

一、流程管理员固定超级管理员(客户要求)
- 原来新建时默认当前登录用户、且可点「选择人员」自由增删。
- 改为:进入页面即强制把 managerUserIds 回写为超级管理员(admin)的 id,
新建/修改场景都生效;界面由可编辑标签+选择按钮改为只读文本展示。
注意:保存/发布时的 managerUserIds 仍有值(超管 id),不影响后端校验。

二、流程模型步骤切换不再卡住(客户反馈「填完基本信息点第二步/第三步提示请先完成当前步骤必填信息」)
- handleStepClick 改成自由切换,前进后退都不做校验;
必填校验统一由「保存」「发布」触发(validateAllSteps),
避免用户在表单设计/流程设计阶段被卡住无法继续或返回。
已修改2个文件
71 ■■■■■ 文件已修改
src/views/bpm/model/form/index.vue 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/model/form/modules/basic-info.vue 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/model/form/index.vue
@@ -366,32 +366,9 @@
/** 步骤切换处理 */
async function handleStepClick(index: number) {
  // 往回退(点击更靠前的步骤)不做校验,避免用户在第 2 步「表单设计」未完成时被卡住无法返回
  if (index < currentStep.value) {
    currentStep.value = index;
    return;
  }
  try {
    if (index !== 0) {
      await validateBasic();
    }
    if (index !== 1) {
      await validateForm();
    }
    if (index !== 2) {
      await validateProcess();
    }
    if (index !== 3) {
      await validateExtra();
    }
    // 切换步骤
    currentStep.value = index;
  } catch (error) {
    console.error('步骤切换失败:', error);
    if (currentStep.value !== 2) {
      message.warning('请先完善当前步骤必填信息');
    }
  }
  // 步骤之间允许自由切换(含前进和后退),切换时不做校验;
  // 必填信息的校验统一在「保存」「发布」时执行(validateAllSteps),避免卡在中间步骤出不去
  currentStep.value = index;
}
/** 返回列表页 */
src/views/bpm/model/form/modules/basic-info.vue
@@ -113,6 +113,14 @@
          newVal.managerUserIds.includes(user.id),
        ) as SystemUserApi.User[])
      : [];
    // 流程管理员固定为超级管理员:进入页面即强制回写,修改场景同样生效
    const admin = props.userList.find(
      (user: SystemUserApi.User) => user.username === 'admin',
    );
    if (admin) {
      newVal.managerUserIds = [admin.id];
      selectedManagerUsers.value = [admin as SystemUserApi.User];
    }
  },
  {
    immediate: true,
@@ -398,36 +406,10 @@
        </div>
      </Form.Item>
      <Form.Item label="流程管理员" name="managerUserIds">
        <div class="flex flex-wrap gap-1">
          <div
            v-for="user in selectedManagerUsers"
            :key="user.id"
            class="relative flex h-9 items-center rounded-full bg-gray-100 pr-2 hover:bg-gray-200 dark:border dark:border-gray-500 dark:bg-gray-700 dark:hover:bg-gray-600"
          >
            <Avatar class="m-1 size-7" v-if="user.avatar" :src="user.avatar" />
            <Avatar class="m-1 size-7" v-else>
              {{ user.nickname?.substring(0, 1) }}
            </Avatar>
            <span class="text-gray-700 dark:text-gray-200">
              {{ user.nickname }}
            </span>
            <IconifyIcon
              icon="lucide:x"
              class="ml-2 size-4 cursor-pointer text-gray-400 hover:text-red-500"
              @click="handleRemoveManagerUser(user)"
            />
          </div>
          <Button
            type="link"
            @click="openManagerUserSelect"
            class="flex items-center"
          >
            <template #icon>
              <IconifyIcon icon="lucide:user-plus" class="size-4" />
            </template>
            选择人员
          </Button>
        </div>
        <!-- 流程管理员固定为超级管理员,不允许选择 -->
        <span class="text-gray-700 dark:text-gray-200">
          {{ selectedManagerUsers[0]?.nickname || '超级管理员' }}
        </span>
      </Form.Item>
    </Form>