function productDescription(card,item){ card.classList.add('product-detail');const value=item.product_template;const refs=new Set(); if(!value){card.append(node('p','body-text',item.body||'产品资料正在补充。'));return refs} if(value.subtitle)card.append(node('p','product-subtitle',value.subtitle)); const areas=[];const section=(key,title,english,show)=>{if(!show)return null;const area=node('section','product-section');area.dataset.section=key;const heading=node('h4','product-section-heading');heading.tabIndex=-1;heading.append(node('span','',title),node('small','',english));area.append(heading);areas.push({area,key,title});return area}; const prose=(area,text)=>{if(text)area.append(node('p','product-prose',text))}; const image=(picture,label,eager=false)=>{if(!picture?.url)return null;refs.add(picture.ref);const figure=node('figure','product-image');const img=node('img');img.src=APP_BASE+picture.url;img.alt=picture.caption||label+' · '+item.title;img.loading=eager?'eager':'lazy';if(picture.width&&picture.height){img.width=picture.width;img.height=picture.height;img.style.aspectRatio=picture.width+'/'+picture.height}img.addEventListener('error',()=>{img.remove();figure.classList.add('image-unavailable');figure.prepend(node('span','muted','图片暂不可用'))},{once:true});figure.append(img);if(picture.caption)figure.append(node('figcaption','',picture.caption));return figure}; const gallery=(area,items,label)=>{const grid=node('div','product-gallery product-gallery-grid');for(const picture of items||[]){const figure=image(picture,label);if(figure)grid.append(figure)}if(grid.childElementCount)area.append(grid)}; const video=section('main_video','主视频','Video',value.main_video?.url);if(video){const media=node('video','product-media');media.controls=true;media.preload='metadata';media.src=APP_BASE+value.main_video.url;media.setAttribute('playsinline','');refs.add(value.main_video.ref);video.append(media);prose(video,value.main_video.caption)} const intro=section('intro','主照片和文字介绍','Overview',value.intro_image?.url||value.intro_text);if(intro){const figure=image(value.intro_image,'产品主照片',true);if(figure)intro.append(figure);prose(intro,value.intro_text)} const composition=section('composition','产品构成','Composition',value.composition.length);if(composition){const list=node('ul','product-composition-icons');for(const entry of value.composition){const row=node('li');row.append(ProductIcons.svg(entry.icon),node('span','',entry.title));list.append(row)}composition.append(list)} const features=section('features','产品特点','Features',value.features.length);if(features){const list=node('div','product-feature-list');for(const entry of value.features){const row=node('article','product-feature');const text=node('div');text.append(node('h5','',entry.title));prose(text,entry.text);row.append(ProductIcons.svg(entry.icon),text);list.append(row)}features.append(list)} const content=section('content','内容清单','Content',value.content_items.length);if(content){const list=node('div','product-content-list');for(const entry of value.content_items){const row=node('article','product-content-item');const figure=image(entry.image,'内容图片');if(figure)row.append(figure);const text=node('div');if(entry.title)text.append(node('h5','',entry.title));prose(text,entry.text);if(text.childElementCount)row.append(text);list.append(row)}content.append(list)} const scenes=section('scenes','使用场景案例','Scenarios',value.scenes_images.length||value.scenes_text);if(scenes){gallery(scenes,value.scenes_images,'场景图片');prose(scenes,value.scenes_text)} const parameters=section('parameters','产品参数表','Specifications',value.parameters.length);if(parameters){for(const message of item.product_notes||[])parameters.append(node('p','product-source-note',message));const wrap=node('div','product-spec-table');const table=node('table');const head=node('thead');const header=node('tr');for(const label of ['参数项','参数说明']){const cell=node('th','',label);cell.scope='col';header.append(cell)}head.append(header);table.append(head);const body=node('tbody');for(const entry of value.parameters){const row=node('tr');const key=node('th','',entry.name);key.scope='row';row.append(key,node('td','',entry.text));body.append(row)}table.append(body);wrap.append(table);parameters.append(wrap)} const dimensions=section('dimensions','产品尺寸图','Dimensions',value.dimension_image?.url);if(dimensions){if(!parameters)for(const message of item.product_notes||[])dimensions.append(node('p','product-source-note',message));dimensions.append(image(value.dimension_image,'产品尺寸图'))} const cases=section('cases','案例','Cases',value.cases_images.length);if(cases)gallery(cases,value.cases_images,'案例图片'); if(areas.length){const toc=node('nav','product-toc');toc.setAttribute('aria-label','产品详情目录');for(const {area,title} of areas){const link=node('button','',title);link.type='button';link.addEventListener('click',()=>{const layoutTop=element=>{let top=0;for(let current=element;current;current=current.offsetParent)top+=current.offsetTop;return top};detailBody.scrollTop=layoutTop(area)-layoutTop(detailBody)-12;area.querySelector('h4').focus({preventScroll:true})});toc.append(link)}const directory=node('details','product-directory');directory.append(node('summary','','产品详情目录'),toc);card.append(directory,...areas.map(entry=>entry.area))}else card.append(node('p','muted','产品资料正在补充。')); if(item.html_package){const link=node('a','text-link product-original','查看完整原网页 ↗');link.href=APP_BASE+item.html_package.url;link.target='_blank';link.rel='noopener';card.append(link)}return refs; }