diff --git a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/service/LicenseSnService.java b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/service/LicenseSnService.java
index bfe279d..2da11ea 100644
--- a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/service/LicenseSnService.java
+++ b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/service/LicenseSnService.java
@@ -243,6 +243,9 @@ public class LicenseSnService {
}
String oldJson = toJson(Map.of("status", from.name()));
row.setStatus(to.name());
+ if (to == LicenseSnStatus.ACTIVATED && request.getReasonCode() != null) {
+ row.setActivationRemark(request.getReasonCode());
+ }
row.setUpdatedAt(OffsetDateTime.now(ZoneOffset.UTC));
licenseSnMapper.updateById(row);
auditService.record(
diff --git a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/LicenseSnStatusPatchRequest.java b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/LicenseSnStatusPatchRequest.java
index 44105a2..ad6c144 100644
--- a/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/LicenseSnStatusPatchRequest.java
+++ b/services/delivery-platform-api/src/main/java/cn/craftlabs/platform/api/web/dto/LicenseSnStatusPatchRequest.java
@@ -7,6 +7,8 @@ public class LicenseSnStatusPatchRequest {
@NotBlank
private String status;
+ private String reasonCode;
+
public String getStatus() {
return status;
}
@@ -14,4 +16,12 @@ public class LicenseSnStatusPatchRequest {
public void setStatus(String status) {
this.status = status;
}
+
+ public String getReasonCode() {
+ return reasonCode;
+ }
+
+ public void setReasonCode(String reasonCode) {
+ this.reasonCode = reasonCode;
+ }
}
diff --git a/web/delivery-platform-ui/src/views/ContractDetailView.vue b/web/delivery-platform-ui/src/views/ContractDetailView.vue
index f11f74d..1510c98 100644
--- a/web/delivery-platform-ui/src/views/ContractDetailView.vue
+++ b/web/delivery-platform-ui/src/views/ContractDetailView.vue
@@ -31,6 +31,9 @@
{{ contract.remarks ?? "—" }}
+ {{ contract.signingDate || '—' }}
+ {{ contract.effectiveDate || '—' }}
+ {{ contract.endDate || '—' }}
@@ -54,6 +57,7 @@
+
编辑
@@ -106,6 +110,9 @@
+
+
+
取消
@@ -166,6 +173,7 @@ const lineForm = reactive({
itemName: "",
quantity: 1,
unit: "",
+ amount: undefined,
});
const lineRules = {
itemName: [{ required: true, message: "请输入行项名称", trigger: "blur" }],
@@ -400,11 +408,13 @@ function openLineDialog(row) {
lineForm.itemName = row.itemName ?? "";
lineForm.quantity = Number(row.quantity ?? 1);
lineForm.unit = row.unit ?? "";
+ lineForm.amount = row.amount ?? undefined;
} else {
lineEditingId.value = null;
lineForm.itemName = "";
lineForm.quantity = 1;
lineForm.unit = "";
+ lineForm.amount = undefined;
}
lineDialogVisible.value = true;
}
@@ -414,6 +424,7 @@ function resetLineForm() {
lineForm.itemName = "";
lineForm.quantity = 1;
lineForm.unit = "";
+ lineForm.amount = undefined;
lineFormRef.value?.resetFields?.();
}
@@ -431,6 +442,7 @@ async function submitLine() {
itemName: lineForm.itemName.trim(),
quantity: lineForm.quantity,
unit: lineForm.unit?.trim() || undefined,
+ amount: lineForm.amount ?? undefined,
};
lineSaving.value = true;
try {
diff --git a/web/delivery-platform-ui/src/views/ContractWizardView.vue b/web/delivery-platform-ui/src/views/ContractWizardView.vue
index 5bea097..6767fb3 100644
--- a/web/delivery-platform-ui/src/views/ContractWizardView.vue
+++ b/web/delivery-platform-ui/src/views/ContractWizardView.vue
@@ -60,6 +60,15 @@
+
+
+
+
+
+
+
+
+
@@ -83,6 +92,11 @@
+
+
+
+
+
删除
@@ -125,13 +139,16 @@ const headerFormRef = ref(null);
const header = reactive({
title: "",
remarks: "",
+ signingDate: null,
+ effectiveDate: null,
+ endDate: null,
});
const headerRules = {
title: [{ required: true, message: "请输入合同标题或编号", trigger: "blur" }],
};
-const lines = ref([{ itemName: "", quantity: 1, unit: "" }]);
+const lines = ref([{ itemName: "", quantity: 1, unit: "", amount: undefined }]);
const projectOptionsFiltered = computed(() => {
const cid = customerId.value;
@@ -186,7 +203,7 @@ async function loadAllProjects() {
}
function addLineRow() {
- lines.value.push({ itemName: "", quantity: 1, unit: "" });
+ lines.value.push({ itemName: "", quantity: 1, unit: "", amount: undefined });
}
function removeLine(index) {
@@ -233,6 +250,9 @@ async function submit() {
projectId: projectId.value,
title: header.title.trim(),
remarks: header.remarks?.trim() || undefined,
+ signingDate: header.signingDate || undefined,
+ effectiveDate: header.effectiveDate || undefined,
+ endDate: header.endDate || undefined,
});
const id = data?.id;
if (id == null) {
@@ -245,6 +265,7 @@ async function submit() {
itemName: r.itemName.trim(),
quantity: r.quantity,
unit: r.unit?.trim() || undefined,
+ amount: r.amount ?? undefined,
});
}
ElMessage.success("已创建草稿");
diff --git a/web/delivery-platform-ui/src/views/LicenseSnDetailView.vue b/web/delivery-platform-ui/src/views/LicenseSnDetailView.vue
index 5b4479c..7f6bba6 100644
--- a/web/delivery-platform-ui/src/views/LicenseSnDetailView.vue
+++ b/web/delivery-platform-ui/src/views/LicenseSnDetailView.vue
@@ -58,6 +58,15 @@
:value="opt.value"
/>
+
+
+
+
+
+
+
+
+
更新状态
@@ -92,6 +101,7 @@ const bindForm = reactive({
});
const statusPick = ref("");
+const reasonCode = ref("");
const statusOptions = [
{ value: "REGISTERED", label: "已登记 (REGISTERED)" },
@@ -214,9 +224,10 @@ async function applyStatus() {
if (id == null || !st) return;
patchingStatus.value = true;
try {
- await patchLicenseSnStatus(id, { status: st });
+ await patchLicenseSnStatus(id, { status: st, reasonCode: reasonCode.value || undefined });
ElMessage.success("状态已更新");
statusPick.value = "";
+ reasonCode.value = "";
await loadSn();
} catch (e) {
ElMessage.error(apiErrorMessage(e, "状态更新失败"));