feat: 完成分享、单会话与发布审批改造

- 增加工作流协作分享与知识库卡片分享入口,统一低版本浏览器复制反馈

- Web 新登录替换旧会话,并保持 API Key 会话隔离

- 发布审批增加必填说明并在审批详情展示

- 账号重置与导入改用可配置默认强密码
This commit is contained in:
2026-07-23 16:09:31 +08:00
parent caa1f07b66
commit 5a42826d44
71 changed files with 3191 additions and 132 deletions

View File

@@ -93,6 +93,7 @@ public class ApprovalInstanceServiceImpl implements ApprovalInstanceService {
instance.setCurrentStepNo(firstStep.getStepNo());
instance.setSnapshotJson(buildInstanceSnapshot(request, flow, steps));
instance.setSummary(request.getSummary());
instance.setApplicationReason(request.getApplicationReason());
instance.setApplicantId(request.getApplicantId());
instance.setSubmittedAt(now);
instance.setCreated(now);
@@ -102,11 +103,15 @@ public class ApprovalInstanceServiceImpl implements ApprovalInstanceService {
approvalInstanceMapper.insert(instance);
createTask(instance.getId(), firstStep, request.getApplicantId(), now);
appendLog(instance.getId(), ApprovalEventType.SUBMITTED.getCode(), request.getApplicantId(), Map.of(
"flowId", flow.getId(),
"flowVersion", flow.getVersion(),
"summary", request.getSummary()
), now);
Map<String, Object> submittedPayload = new LinkedHashMap<>();
submittedPayload.put("flowId", flow.getId());
submittedPayload.put("flowVersion", flow.getVersion());
submittedPayload.put("summary", request.getSummary());
if (request.getApplicationReason() != null) {
submittedPayload.put("applicationReason", request.getApplicationReason());
}
appendLog(instance.getId(), ApprovalEventType.SUBMITTED.getCode(), request.getApplicantId(),
submittedPayload, now);
appendLog(instance.getId(), ApprovalEventType.STEP_CREATED.getCode(), request.getApplicantId(),
buildStepCreatedPayload(firstStep), now);
return instance.getId();
@@ -228,6 +233,9 @@ public class ApprovalInstanceServiceImpl implements ApprovalInstanceService {
snapshot.put("deptId", request.getDeptId());
snapshot.put("flowId", flow.getId());
snapshot.put("flowVersion", flow.getVersion());
if (request.getApplicationReason() != null) {
snapshot.put("applicationReason", request.getApplicationReason());
}
snapshot.put("steps", steps.stream().map(item -> {
Map<String, Object> map = new LinkedHashMap<>();
map.put("stepNo", item.getStepNo());

View File

@@ -18,6 +18,7 @@ import tech.easyflow.approval.entity.vo.ApprovalFlowStepVo;
import tech.easyflow.approval.entity.vo.ApprovalLogVo;
import tech.easyflow.approval.entity.vo.ApprovalTaskVo;
import tech.easyflow.approval.enums.ApprovalActionType;
import tech.easyflow.approval.enums.ApprovalEventType;
import tech.easyflow.approval.enums.ApprovalInstanceStatus;
import tech.easyflow.approval.enums.ApprovalResourceType;
import tech.easyflow.approval.enums.ApprovalTaskStatus;
@@ -144,6 +145,7 @@ public class ApprovalQueryServiceImpl implements ApprovalQueryService {
detail.setStatus(instance.getStatus());
detail.setCurrentStepNo(instance.getCurrentStepNo());
detail.setSummary(instance.getSummary());
detail.setApplicationReason(instance.getApplicationReason());
detail.setApplicantId(instance.getApplicantId());
detail.setSubmittedAt(instance.getSubmittedAt());
detail.setFinishedAt(instance.getFinishedAt());
@@ -165,6 +167,7 @@ public class ApprovalQueryServiceImpl implements ApprovalQueryService {
taskVo.setId(item.getId());
taskVo.setStepNo(item.getStepNo());
taskVo.setStepName(resolveStepName(frozenStepMap, item.getStepNo()));
taskVo.setApplicationReason(instance.getApplicationReason());
taskVo.setStatus(item.getStatus());
taskVo.setAssigneeRoleCode(item.getAssigneeRoleCode());
taskVo.setAssigneeType(item.getAssigneeType());
@@ -185,6 +188,9 @@ public class ApprovalQueryServiceImpl implements ApprovalQueryService {
ApprovalLogVo logVo = new ApprovalLogVo();
logVo.setId(item.getId());
logVo.setEventType(item.getEventType());
if (ApprovalEventType.SUBMITTED.getCode().equals(item.getEventType())) {
logVo.setApplicationReason(instance.getApplicationReason());
}
logVo.setOperatorId(item.getOperatorId());
logVo.setOperatorAccount(resolveAccountLoginName(accountMap.get(item.getOperatorId())));
logVo.setOperatorName(resolveAccountName(accountMap.get(item.getOperatorId())));
@@ -305,6 +311,7 @@ public class ApprovalQueryServiceImpl implements ApprovalQueryService {
item.setCurrentStepNo(record.getCurrentStepNo());
item.setCurrentStepName(resolveCurrentStepName(record));
item.setSummary(record.getSummary());
item.setApplicationReason(record.getApplicationReason());
item.setApplicantId(record.getApplicantId());
item.setSubmittedAt(record.getSubmittedAt());
item.setFinishedAt(record.getFinishedAt());