sy-form-components 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +5 -1
- package/dist/index.d.ts +5 -1
- package/dist/index.js +96 -13
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +97 -15
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs
CHANGED
|
@@ -4331,6 +4331,15 @@ var TASK_STATUS_META = {
|
|
|
4331
4331
|
};
|
|
4332
4332
|
|
|
4333
4333
|
// src/core/processApi.ts
|
|
4334
|
+
var normalizeProcessTasks = (value) => {
|
|
4335
|
+
if (Array.isArray(value)) return value;
|
|
4336
|
+
if (!value || typeof value !== "object") return [];
|
|
4337
|
+
if (Array.isArray(value.tasks)) return value.tasks;
|
|
4338
|
+
if (Array.isArray(value.list)) return value.list;
|
|
4339
|
+
if (Array.isArray(value.items)) return value.items;
|
|
4340
|
+
if (Array.isArray(value.records)) return value.records;
|
|
4341
|
+
return [];
|
|
4342
|
+
};
|
|
4334
4343
|
async function getProcessBasic(request, formInstId) {
|
|
4335
4344
|
const response = await request({
|
|
4336
4345
|
url: `/workflow/instance/${formInstId}/basic`,
|
|
@@ -4340,10 +4349,10 @@ async function getProcessBasic(request, formInstId) {
|
|
|
4340
4349
|
}
|
|
4341
4350
|
async function getProcessProgress(request, formInstId) {
|
|
4342
4351
|
const response = await request({
|
|
4343
|
-
url: `/workflow/instance/${formInstId}`,
|
|
4352
|
+
url: `/workflow/instance/${formInstId}/all-tasks`,
|
|
4344
4353
|
method: "get"
|
|
4345
4354
|
});
|
|
4346
|
-
return response.data || response.result
|
|
4355
|
+
return normalizeProcessTasks(response.data || response.result);
|
|
4347
4356
|
}
|
|
4348
4357
|
async function checkUserApproval(request, formInstId) {
|
|
4349
4358
|
const response = await request({
|
|
@@ -4945,6 +4954,75 @@ function useFieldPermission(options) {
|
|
|
4945
4954
|
|
|
4946
4955
|
// src/hooks/useFormDetail.ts
|
|
4947
4956
|
import { useState as useState20, useEffect as useEffect27, useCallback as useCallback7, useRef as useRef7 } from "react";
|
|
4957
|
+
|
|
4958
|
+
// src/utils/formInstanceData.ts
|
|
4959
|
+
var FORM_INSTANCE_METADATA_KEYS = /* @__PURE__ */ new Set([
|
|
4960
|
+
"appType",
|
|
4961
|
+
"code",
|
|
4962
|
+
"createdAt",
|
|
4963
|
+
"createdBy",
|
|
4964
|
+
"createdByDepartmentId",
|
|
4965
|
+
"createdByDepartmentName",
|
|
4966
|
+
"createdByName",
|
|
4967
|
+
"creator",
|
|
4968
|
+
"data",
|
|
4969
|
+
"error",
|
|
4970
|
+
"formInstId",
|
|
4971
|
+
"formInstanceId",
|
|
4972
|
+
"formUuid",
|
|
4973
|
+
"instanceTitle",
|
|
4974
|
+
"message",
|
|
4975
|
+
"result",
|
|
4976
|
+
"success",
|
|
4977
|
+
"title",
|
|
4978
|
+
"updatedAt"
|
|
4979
|
+
]);
|
|
4980
|
+
var isPlainRecord = (value) => Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
4981
|
+
var parseJsonRecord = (value) => {
|
|
4982
|
+
if (typeof value !== "string" || value.trim() === "") return null;
|
|
4983
|
+
try {
|
|
4984
|
+
const parsed = JSON.parse(value);
|
|
4985
|
+
return isPlainRecord(parsed) ? parsed : null;
|
|
4986
|
+
} catch {
|
|
4987
|
+
return null;
|
|
4988
|
+
}
|
|
4989
|
+
};
|
|
4990
|
+
var pickKnownFields = (source, fieldIds) => {
|
|
4991
|
+
if (fieldIds?.length) {
|
|
4992
|
+
const values = {};
|
|
4993
|
+
for (const fieldId of fieldIds) {
|
|
4994
|
+
if (Object.prototype.hasOwnProperty.call(source, fieldId)) {
|
|
4995
|
+
values[fieldId] = source[fieldId];
|
|
4996
|
+
}
|
|
4997
|
+
}
|
|
4998
|
+
return values;
|
|
4999
|
+
}
|
|
5000
|
+
return Object.fromEntries(
|
|
5001
|
+
Object.entries(source).filter(([key]) => !FORM_INSTANCE_METADATA_KEYS.has(key))
|
|
5002
|
+
);
|
|
5003
|
+
};
|
|
5004
|
+
var extractFormValues = (formInstance, fieldIds) => {
|
|
5005
|
+
if (!isPlainRecord(formInstance)) return null;
|
|
5006
|
+
const nestedCandidates = [
|
|
5007
|
+
formInstance.data,
|
|
5008
|
+
parseJsonRecord(formInstance.data),
|
|
5009
|
+
formInstance.formData,
|
|
5010
|
+
parseJsonRecord(formInstance.formData),
|
|
5011
|
+
formInstance.values,
|
|
5012
|
+
formInstance.fieldValues,
|
|
5013
|
+
parseJsonRecord(formInstance.formDataJson),
|
|
5014
|
+
parseJsonRecord(formInstance.dataJson)
|
|
5015
|
+
];
|
|
5016
|
+
for (const candidate of nestedCandidates) {
|
|
5017
|
+
if (isPlainRecord(candidate)) {
|
|
5018
|
+
return pickKnownFields(candidate, fieldIds);
|
|
5019
|
+
}
|
|
5020
|
+
}
|
|
5021
|
+
const flatValues = pickKnownFields(formInstance, fieldIds);
|
|
5022
|
+
return Object.keys(flatValues).length > 0 ? flatValues : null;
|
|
5023
|
+
};
|
|
5024
|
+
|
|
5025
|
+
// src/hooks/useFormDetail.ts
|
|
4948
5026
|
function buildFieldBehaviors(permissions, mode) {
|
|
4949
5027
|
const behaviors = {};
|
|
4950
5028
|
if (!permissions) return behaviors;
|
|
@@ -4960,7 +5038,7 @@ function buildFieldBehaviors(permissions, mode) {
|
|
|
4960
5038
|
return behaviors;
|
|
4961
5039
|
}
|
|
4962
5040
|
function useFormDetail(options) {
|
|
4963
|
-
const { formUuid, appType, formInstanceId, onPermissionDenied } = options;
|
|
5041
|
+
const { formUuid, appType, formInstanceId, fieldIds, onPermissionDenied } = options;
|
|
4964
5042
|
const { api } = useFormContext();
|
|
4965
5043
|
const request = api.request;
|
|
4966
5044
|
const [loading, setLoading] = useState20(true);
|
|
@@ -4989,7 +5067,7 @@ function useFormDetail(options) {
|
|
|
4989
5067
|
}
|
|
4990
5068
|
setPermissions(permResult);
|
|
4991
5069
|
setInstanceInfo(formResult);
|
|
4992
|
-
setFormData(formResult
|
|
5070
|
+
setFormData(extractFormValues(formResult, fieldIds));
|
|
4993
5071
|
} catch (error) {
|
|
4994
5072
|
console.error("[useFormDetail] Failed to load data:", error);
|
|
4995
5073
|
if (mountedRef.current) {
|
|
@@ -5002,7 +5080,7 @@ function useFormDetail(options) {
|
|
|
5002
5080
|
setLoading(false);
|
|
5003
5081
|
}
|
|
5004
5082
|
}
|
|
5005
|
-
}, [request, formUuid, appType, formInstanceId, onPermissionDenied]);
|
|
5083
|
+
}, [request, formUuid, appType, formInstanceId, fieldIds, onPermissionDenied]);
|
|
5006
5084
|
useEffect27(() => {
|
|
5007
5085
|
loadData();
|
|
5008
5086
|
}, [loadData]);
|
|
@@ -5067,7 +5145,7 @@ function useFormDetail(options) {
|
|
|
5067
5145
|
// src/hooks/useProcessDetail.ts
|
|
5068
5146
|
import { useState as useState21, useEffect as useEffect28, useCallback as useCallback8, useRef as useRef8 } from "react";
|
|
5069
5147
|
function useProcessDetail(options) {
|
|
5070
|
-
const { formUuid, appType, formInstanceId } = options;
|
|
5148
|
+
const { formUuid, appType, formInstanceId, fieldIds } = options;
|
|
5071
5149
|
const { api } = useFormContext();
|
|
5072
5150
|
const request = api.request;
|
|
5073
5151
|
const [loading, setLoading] = useState21(true);
|
|
@@ -5115,7 +5193,7 @@ function useProcessDetail(options) {
|
|
|
5115
5193
|
setCanWithdraw(approvalResult?.canUndo ?? false);
|
|
5116
5194
|
setPermissions(permResult);
|
|
5117
5195
|
setInstanceInfo(formResult);
|
|
5118
|
-
setFormData(formResult
|
|
5196
|
+
setFormData(extractFormValues(formResult, fieldIds));
|
|
5119
5197
|
if (permResult?.operations?.includes("VIEW_PROCESS") || permResult?.operations?.length > 0) {
|
|
5120
5198
|
try {
|
|
5121
5199
|
const progress = await getProcessProgress(request, formInstanceId);
|
|
@@ -5149,7 +5227,7 @@ function useProcessDetail(options) {
|
|
|
5149
5227
|
setLoading(false);
|
|
5150
5228
|
}
|
|
5151
5229
|
}
|
|
5152
|
-
}, [request, formUuid, appType, formInstanceId]);
|
|
5230
|
+
}, [request, formUuid, appType, formInstanceId, fieldIds]);
|
|
5153
5231
|
useEffect28(() => {
|
|
5154
5232
|
loadData();
|
|
5155
5233
|
}, [loadData]);
|
|
@@ -5868,15 +5946,16 @@ var ApprovalTimeline = ({
|
|
|
5868
5946
|
showRemarks = true,
|
|
5869
5947
|
compactMode = false
|
|
5870
5948
|
}) => {
|
|
5871
|
-
|
|
5949
|
+
const taskList = Array.isArray(tasks) ? tasks : [];
|
|
5950
|
+
if (taskList.length === 0) {
|
|
5872
5951
|
return /* @__PURE__ */ jsx77("div", { className: `bg-white rounded-xl shadow-sm border border-gray-100 p-6 ${className}`, children: /* @__PURE__ */ jsx77("p", { className: "text-sm text-gray-400 text-center", children: "\u6682\u65E0\u5BA1\u6279\u8BB0\u5F55" }) });
|
|
5873
5952
|
}
|
|
5874
|
-
return /* @__PURE__ */ jsx77("div", { className: `${className}`, children:
|
|
5953
|
+
return /* @__PURE__ */ jsx77("div", { className: `${className}`, children: taskList.map((task, index) => {
|
|
5875
5954
|
if (renderNode) {
|
|
5876
5955
|
return /* @__PURE__ */ jsx77("div", { children: renderNode(task, index) }, task.taskId);
|
|
5877
5956
|
}
|
|
5878
5957
|
const phase = getNodePhase(task);
|
|
5879
|
-
const isLast = index ===
|
|
5958
|
+
const isLast = index === taskList.length - 1;
|
|
5880
5959
|
const statusMeta = TASK_STATUS_META[task.status];
|
|
5881
5960
|
return /* @__PURE__ */ jsxs23("div", { className: "flex gap-4", children: [
|
|
5882
5961
|
/* @__PURE__ */ jsxs23("div", { className: "flex flex-col items-center", children: [
|
|
@@ -6526,7 +6605,7 @@ var FormSubmitTemplate = ({
|
|
|
6526
6605
|
};
|
|
6527
6606
|
|
|
6528
6607
|
// src/templates/FormDetailTemplate.tsx
|
|
6529
|
-
import { useCallback as useCallback14 } from "react";
|
|
6608
|
+
import { useCallback as useCallback14, useMemo as useMemo8 } from "react";
|
|
6530
6609
|
|
|
6531
6610
|
// src/templates/PageSkeleton.tsx
|
|
6532
6611
|
import { Skeleton as Skeleton3 } from "antd";
|
|
@@ -6606,6 +6685,7 @@ var InnerDetailContent = ({
|
|
|
6606
6685
|
onDelete,
|
|
6607
6686
|
onSave
|
|
6608
6687
|
}) => {
|
|
6688
|
+
const fieldIds = useMemo8(() => schema.fields.map((field) => field.fieldId), [schema.fields]);
|
|
6609
6689
|
const {
|
|
6610
6690
|
loading,
|
|
6611
6691
|
mode,
|
|
@@ -6619,7 +6699,7 @@ var InnerDetailContent = ({
|
|
|
6619
6699
|
canEdit,
|
|
6620
6700
|
canDelete,
|
|
6621
6701
|
canViewChangeRecords
|
|
6622
|
-
} = useFormDetail({ formUuid, appType, formInstanceId });
|
|
6702
|
+
} = useFormDetail({ formUuid, appType, formInstanceId, fieldIds });
|
|
6623
6703
|
const {
|
|
6624
6704
|
records,
|
|
6625
6705
|
loading: recordsLoading,
|
|
@@ -6730,7 +6810,7 @@ var FormDetailTemplate = (props) => {
|
|
|
6730
6810
|
};
|
|
6731
6811
|
|
|
6732
6812
|
// src/templates/ProcessDetailTemplate.tsx
|
|
6733
|
-
import { useCallback as useCallback15, useRef as useRef12 } from "react";
|
|
6813
|
+
import { useCallback as useCallback15, useMemo as useMemo9, useRef as useRef12 } from "react";
|
|
6734
6814
|
import { Fragment as Fragment7, jsx as jsx85, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
6735
6815
|
function FormDataBridge({
|
|
6736
6816
|
formDataRef
|
|
@@ -6752,6 +6832,7 @@ var InnerProcessContent = ({
|
|
|
6752
6832
|
onActionComplete
|
|
6753
6833
|
}) => {
|
|
6754
6834
|
const formDataRef = useRef12(void 0);
|
|
6835
|
+
const fieldIds = useMemo9(() => schema.fields.map((field) => field.fieldId), [schema.fields]);
|
|
6755
6836
|
const {
|
|
6756
6837
|
loading,
|
|
6757
6838
|
processInfo,
|
|
@@ -6768,7 +6849,7 @@ var InnerProcessContent = ({
|
|
|
6768
6849
|
switchToEdit,
|
|
6769
6850
|
switchToReadonly,
|
|
6770
6851
|
refreshProgress
|
|
6771
|
-
} = useProcessDetail({ formUuid, appType, formInstanceId });
|
|
6852
|
+
} = useProcessDetail({ formUuid, appType, formInstanceId, fieldIds });
|
|
6772
6853
|
const { approve, reject, withdraw, save, resubmit } = useApprovalActions({
|
|
6773
6854
|
formInstanceId,
|
|
6774
6855
|
formUuid,
|
|
@@ -6967,6 +7048,7 @@ export {
|
|
|
6967
7048
|
defineFormSchema,
|
|
6968
7049
|
deleteFormData,
|
|
6969
7050
|
evaluateEffects,
|
|
7051
|
+
extractFormValues,
|
|
6970
7052
|
getChangeRecords,
|
|
6971
7053
|
getFormData,
|
|
6972
7054
|
getProcessBasic,
|