From 0aa7d55a23e7406cf600fccade4d3a32d0fabd53 Mon Sep 17 00:00:00 2001 From: Wdp-ab <2182606194@qq.com> Date: Tue, 30 Sep 2025 12:12:53 +0800 Subject: [PATCH] 5 --- admin/src/views/parts/UserParts.vue | 35 +++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/admin/src/views/parts/UserParts.vue b/admin/src/views/parts/UserParts.vue index 287175c..e5c79a4 100644 --- a/admin/src/views/parts/UserParts.vue +++ b/admin/src/views/parts/UserParts.vue @@ -23,7 +23,7 @@ - {{ k }}: {{ v }} + {{ item.label }}: {{ item.value }} @@ -69,11 +69,21 @@ const q = reactive({ kw: '' }) const rows = ref([]) const visible = ref(false) const form = reactive({}) +const templates = ref([]) // 模板列表缓存 const imagesConcat = computed({ get(){ return (form.images||[]).join(', ') }, set(v: string){ form.images = v.split(',').map(s=>s.trim()).filter(Boolean) } }) +async function loadTemplates(){ + try { + const data = await get('/api/product-templates') + templates.value = Array.isArray(data?.list) ? data.list : (Array.isArray(data)?data:[]) + } catch(e){ + console.error('Failed to load templates', e) + } +} + async function fetch(){ const data = await get('/api/admin/parts', { kw: q.kw }) rows.value = Array.isArray(data?.list) ? data.list : (Array.isArray(data)?data:[]) @@ -82,7 +92,10 @@ function reset(){ q.kw=''; fetch() } function edit(row: any){ visible.value=true; Object.assign(form, JSON.parse(JSON.stringify(row))) } async function save(){ await put(`/api/admin/parts/${form.id}`, form); visible.value=false; await fetch() } -onMounted(fetch) +onMounted(async () => { + await loadTemplates() + await fetch() +}) function parseAttrs(json: any): Record { try { @@ -93,6 +106,24 @@ function parseAttrs(json: any): Record { return {} } } + +// 根据 templateId 和 fieldKey 获取 fieldLabel +function getFieldLabel(templateId: any, fieldKey: string): string { + if (!templateId) return fieldKey + const tpl = templates.value.find((t: any) => String(t.id) === String(templateId)) + if (!tpl || !Array.isArray(tpl.params)) return fieldKey + const param = tpl.params.find((p: any) => p.fieldKey === fieldKey) + return param?.fieldLabel || fieldKey +} + +// 获取格式化的参数标签列表 +function getFormattedAttrs(row: any): Array<{label: string, value: any}> { + const attrs = parseAttrs(row.attributesJson) + return Object.keys(attrs).map(k => ({ + label: getFieldLabel(row.templateId, k), + value: attrs[k] + })) +}