diff --git a/vue2/apps/web-antd/src/views/traceability/admin.vue b/vue2/apps/web-antd/src/views/traceability/admin.vue index c96c36c..35decd3 100644 --- a/vue2/apps/web-antd/src/views/traceability/admin.vue +++ b/vue2/apps/web-antd/src/views/traceability/admin.vue @@ -125,10 +125,13 @@ const createTemplateForm = reactive<{ }); const currentNode = computed(() => editor.nodes?.[nodeIndex.value] ?? null); -const currentTemplateField = computed(() => - currentNode.value?.fields.find((field) => field.key === selectedTemplateFieldKey.value) ?? - currentNode.value?.fields[0] ?? - null, +const currentTemplateField = computed( + () => + currentNode.value?.fields.find( + (field) => field.key === selectedTemplateFieldKey.value, + ) ?? + currentNode.value?.fields[0] ?? + null, ); const publicNodes = computed(() => (editor.nodes ?? []).filter((item) => item.category === 'public'), @@ -144,12 +147,17 @@ const isTemplatePublished = computed( ); const isTemplateDraft = computed(() => !isTemplatePublished.value); const currentLibraryNode = computed(() => - nodeLibrary.value.find((item) => item.libraryId === selectedLibraryNodeId.value), + nodeLibrary.value.find( + (item) => item.libraryId === selectedLibraryNodeId.value, + ), ); -const currentLibraryField = computed(() => - currentLibraryNode.value?.fields.find((field) => field.key === selectedLibraryFieldKey.value) ?? - currentLibraryNode.value?.fields[0] ?? - null, +const currentLibraryField = computed( + () => + currentLibraryNode.value?.fields.find( + (field) => field.key === selectedLibraryFieldKey.value, + ) ?? + currentLibraryNode.value?.fields[0] ?? + null, ); const businessLibraryNodes = computed(() => nodeLibrary.value.filter((item) => item.category === 'business'), @@ -164,10 +172,13 @@ function syncSelectedTemplateField() { } function syncSelectedLibraryField() { - selectedLibraryFieldKey.value = currentLibraryNode.value?.fields[0]?.key || ''; + selectedLibraryFieldKey.value = + currentLibraryNode.value?.fields[0]?.key || ''; } -function toEditableLibraryNode(item: TraceabilityApi.NodeLibraryItem): EditableTemplateNode { +function toEditableLibraryNode( + item: TraceabilityApi.NodeLibraryItem, +): EditableTemplateNode { return { category: item.category, consumerVisible: item.consumerVisible, @@ -199,7 +210,7 @@ function buildLibraryPayload(node: EditableTemplateNode) { defaultValue: field.type === 'image' ? stripOssTempUrl(field.defaultValue ?? '') - : field.defaultValue ?? '', + : (field.defaultValue ?? ''), fieldStyle: { bold: field.fieldStyle?.bold ?? false, color: field.fieldStyle?.color ?? '', @@ -261,7 +272,9 @@ function applyEditor(detail: TraceabilityApi.TemplateDetail) { const hasTemplateChanges = computed(() => { if (!selectedTemplateId.value) return false; - return templateSnapshot.value !== JSON.stringify(cloneTemplateForSave(editor)); + return ( + templateSnapshot.value !== JSON.stringify(cloneTemplateForSave(editor)) + ); }); function openTemplateLeaveDialog(nextId: string) { @@ -354,7 +367,9 @@ async function deleteHistoryCover(item: TraceabilityApi.FileAssetItem) { deletingCoverAssetId.value = item.id; try { await deleteTraceabilityFileAsset(item.id); - coverHistoryItems.value = coverHistoryItems.value.filter((asset) => asset.id !== item.id); + coverHistoryItems.value = coverHistoryItems.value.filter( + (asset) => asset.id !== item.id, + ); message.success('历史封面图已删除'); } catch (error: any) { message.error(error?.message || '删除失败'); @@ -457,7 +472,9 @@ async function createLibraryNode(category: 'business' | 'public') { function selectLibraryTab(category: 'business' | 'public') { libraryTab.value = category; const target = - category === 'business' ? businessLibraryNodes.value[0] : publicLibraryNodes.value[0]; + category === 'business' + ? businessLibraryNodes.value[0] + : publicLibraryNodes.value[0]; selectedLibraryNodeId.value = target?.libraryId || ''; syncSelectedLibraryField(); } @@ -475,7 +492,10 @@ function addPlainNode(category: 'business' | 'public') { syncSelectedTemplateField(); } -function addNodeFromLibrary(category: 'business' | 'public', libraryId?: string) { +function addNodeFromLibrary( + category: 'business' | 'public', + libraryId?: string, +) { if (isTemplatePublished.value) return; const source = nodeLibrary.value.find( (item) => item.libraryId === libraryId && item.category === category, @@ -550,7 +570,9 @@ function moveTemplateNode( node.category === category ? movedNodes[cursor++] : node, ); - const nextIndex = (editor.nodes ?? []).findIndex((node) => node.id === draggedId); + const nextIndex = (editor.nodes ?? []).findIndex( + (node) => node.id === draggedId, + ); if (nextIndex !== -1) { nodeIndex.value = nextIndex; } @@ -566,11 +588,7 @@ function handleTemplateNodeDrop( targetNodeId?: string, ) { if (isTemplatePublished.value) return; - moveTemplateNode( - category, - draggingTemplateNodeId.value, - targetNodeId || '', - ); + moveTemplateNode(category, draggingTemplateNodeId.value, targetNodeId || ''); draggingTemplateNodeId.value = ''; } @@ -591,22 +609,34 @@ function addField(target: EditableTemplateNode | null | undefined) { } } -function removeField(target: EditableTemplateNode | null | undefined, index: number) { +function removeField( + target: EditableTemplateNode | null | undefined, + index: number, +) { if (target?.locked) return; const removed = target?.fields[index]; target?.fields.splice(index, 1); target?.fields.forEach((field, fieldIndex) => { field.sort = fieldIndex; }); - if (target === currentNode.value && removed?.key === selectedTemplateFieldKey.value) { + if ( + target === currentNode.value && + removed?.key === selectedTemplateFieldKey.value + ) { selectedTemplateFieldKey.value = target?.fields[0]?.key || ''; } - if (target === currentLibraryNode.value && removed?.key === selectedLibraryFieldKey.value) { + if ( + target === currentLibraryNode.value && + removed?.key === selectedLibraryFieldKey.value + ) { selectedLibraryFieldKey.value = target?.fields[0]?.key || ''; } } -function confirmRemoveField(target: EditableTemplateNode | null | undefined, index: number) { +function confirmRemoveField( + target: EditableTemplateNode | null | undefined, + index: number, +) { const field = target?.fields[index]; if (!target || target.locked || !field) return; Modal.confirm({ @@ -645,7 +675,11 @@ function handleTemplateFieldDragStart(fieldKey?: string) { function handleTemplateFieldDrop(targetFieldKey?: string) { if (isTemplatePublished.value || currentNodeLocked.value) return; - moveField(currentNode.value, draggingTemplateFieldKey.value, targetFieldKey || ''); + moveField( + currentNode.value, + draggingTemplateFieldKey.value, + targetFieldKey || '', + ); draggingTemplateFieldKey.value = ''; } @@ -658,7 +692,11 @@ function handleLibraryFieldDragStart(fieldKey?: string) { } function handleLibraryFieldDrop(targetFieldKey?: string) { - moveField(currentLibraryNode.value, draggingLibraryFieldKey.value, targetFieldKey || ''); + moveField( + currentLibraryNode.value, + draggingLibraryFieldKey.value, + targetFieldKey || '', + ); draggingLibraryFieldKey.value = ''; } @@ -666,15 +704,24 @@ function clearLibraryFieldDragState() { draggingLibraryFieldKey.value = ''; } -function getFieldUploadKey(scope: string, field: TraceabilityApi.FieldDefinition) { +function getFieldUploadKey( + scope: string, + field: TraceabilityApi.FieldDefinition, +) { return `${scope}:${field.key}`; } -function getFieldInputId(scope: string, field: TraceabilityApi.FieldDefinition) { +function getFieldInputId( + scope: string, + field: TraceabilityApi.FieldDefinition, +) { return `traceability-admin-upload-${getFieldUploadKey(scope, field)}`; } -function triggerFieldImageSelect(scope: string, field: TraceabilityApi.FieldDefinition) { +function triggerFieldImageSelect( + scope: string, + field: TraceabilityApi.FieldDefinition, +) { const input = document.getElementById(getFieldInputId(scope, field)); input?.click(); } @@ -693,7 +740,10 @@ async function handleFieldImageUpload( try { const formData = new FormData(); formData.append('file', file); - formData.append('objectDir', `traceability/node-library/${scope}/${field.key}`); + formData.append( + 'objectDir', + `traceability/node-library/${scope}/${field.key}`, + ); const result = await uploadTraceabilityImage(formData); field.defaultValue = buildOssStoredValue(result); field.defaultPreviewUrl = result.tempUrl || ''; @@ -721,11 +771,17 @@ function getFieldStyleConfig(field: TraceabilityApi.FieldDefinition) { return field.fieldStyle; } -function updateFieldStyleBold(field: TraceabilityApi.FieldDefinition, checked: boolean) { +function updateFieldStyleBold( + field: TraceabilityApi.FieldDefinition, + checked: boolean, +) { getFieldStyleConfig(field).bold = checked; } -function updateFieldStyleColor(field: TraceabilityApi.FieldDefinition, color: string) { +function updateFieldStyleColor( + field: TraceabilityApi.FieldDefinition, + color: string, +) { getFieldStyleConfig(field).color = color || ''; } @@ -751,12 +807,12 @@ function getPresetValue(field: TraceabilityApi.FieldDefinition) { if (field.type === 'multi_select') { return Array.isArray(field.defaultValue) ? field.defaultValue - : (field.defaultValue + : field.defaultValue ? String(field.defaultValue) .split(',') .map((item) => item.trim()) .filter(Boolean) - : []); + : []; } return field.defaultValue; } @@ -790,7 +846,9 @@ function updatePresetValue(field: TraceabilityApi.FieldDefinition, value: any) { function sanitizeIntegerPreset(value: string) { const cleaned = value.replaceAll(/[^\d-]/g, ''); const hasLeadingMinus = cleaned.startsWith('-'); - const unsigned = hasLeadingMinus ? cleaned.slice(1).replaceAll('-', '') : cleaned.replaceAll('-', ''); + const unsigned = hasLeadingMinus + ? cleaned.slice(1).replaceAll('-', '') + : cleaned.replaceAll('-', ''); return hasLeadingMinus ? `-${unsigned}` : unsigned; } @@ -802,7 +860,9 @@ function sanitizeDecimalPreset(value: string) { ? cleaned : `${cleaned.slice(0, firstDot + 1)}${cleaned.slice(firstDot + 1).replaceAll('.', '')}`; const hasLeadingMinus = normalizedDot.startsWith('-'); - const unsigned = hasLeadingMinus ? normalizedDot.slice(1).replaceAll('-', '') : normalizedDot; + const unsigned = hasLeadingMinus + ? normalizedDot.slice(1).replaceAll('-', '') + : normalizedDot; return hasLeadingMinus ? `-${unsigned}` : unsigned.replaceAll('-', ''); } @@ -833,14 +893,16 @@ async function removeLibraryNode() { title: '删除节点库节点', content: `确认删除节点库节点“${currentName}”吗?`, async onOk() { - if (currentLibraryNode.value?.persisted) { - await deleteTraceabilityNodeLibrary(currentId); - await loadNodeLibrary(); - } else { - nodeLibrary.value = nodeLibrary.value.filter((item) => item.libraryId !== currentId); - } - selectedLibraryNodeId.value = nodeLibrary.value[0]?.libraryId || ''; - message.success('节点库节点已删除'); + if (currentLibraryNode.value?.persisted) { + await deleteTraceabilityNodeLibrary(currentId); + await loadNodeLibrary(); + } else { + nodeLibrary.value = nodeLibrary.value.filter( + (item) => item.libraryId !== currentId, + ); + } + selectedLibraryNodeId.value = nodeLibrary.value[0]?.libraryId || ''; + message.success('节点库节点已删除'); }, }); } @@ -943,11 +1005,15 @@ onMounted(async () => {