2025-09-27 17:21:55 +08:00
<!doctype html>
2025-06-04 22:43:00 +08:00
< html lang = "zh-CN" >
2025-09-27 17:21:55 +08:00
< head >
< meta charset = "UTF-8" / >
< meta content = "width=device-width, initial-scale=1.0" name = "viewport" / >
< title > 捷配PCB下单< / title >
< link rel = "stylesheet" href = "/iframe/css/index.css" / >
< style >
/* 新增的禁用样式 */
.item.disabled {
cursor: not-allowed;
opacity: 0.6; /* 降低透明度以示禁用 */
}
.item.disabled span {
border-color: #e2e8f0; /* 更柔和的边框颜色 */
background-color: #f8fafc; /* 浅灰色背景 */
color: #94a3b8; /* 灰色文字 */
pointer-events: none; /* 确保span内部元素也无法点击 */
}
/* 移除 hover 和 checked 效果 */
.item.disabled span:hover {
border-color: #e2e8f0;
background-color: #f8fafc;
color: #94a3b8;
}
.item.disabled input.peer:checked + span {
border-color: #e2e8f0; /* 保持非选中状态的边框色 */
background-color: #f8fafc; /* 保持非选中状态的背景色 */
color: #94a3b8; /* 保持非选中状态的文字色 */
}
em.example-color {
width: 12px;
height: 12px;
margin-right: 4px;
display: inline-block;
border: 1px gray solid;
border-radius: inherit;
}
::-webkit-scrollbar {
height: 0.25rem;
width: 0.25rem;
}
::-webkit-scrollbar-thumb {
background: rgba(0, 0, 0, 0.2);
}
*:focus {
outline: none;
}
< / style >
< / head >
< body class = "bg-gray-100 p-4 sm:p-8" >
< div id = "Preset-panel" class = "bg-white rounded-lg shadow-md p-4 sm:p-6 max-w-4xl mx-auto mb-2" >
< div class = "flex justify-between items-center mb-4 border-b pb-2" >
< h2 class = "text-lg sm:text-xl font-semibold text-gray-800" > 订单工艺预设< / h2 >
< / div >
< div class = "mb-4" >
< div class = "flex items-center space-x-2" >
< label class = "item cursor-pointer" >
< input
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
id="PresetName"
type="text"
placeholder="请输入预设名称"
/>
< / label >
< label class = "item cursor-pointer" >
< button
class="w-full sm:w-auto px-2 py-1 bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors duration-200 ease-in-out"
id="CreatePreset"
>
新建预设
< / button >
< / label >
< / div >
< / div >
< div >
< div class = "flex flex-wrap gap-1" id = "PresetList" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" type = "radio" value = "0" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>默认< /span
>
< / label >
< / div >
< / div >
2025-06-04 22:43:00 +08:00
< / div >
2025-09-27 17:21:55 +08:00
< div class = "bg-white rounded-lg shadow-md p-4 sm:p-6 max-w-4xl mx-auto" >
< div class = "flex justify-between items-center mb-4 border-b pb-2" >
< h2 class = "text-lg sm:text-xl font-semibold text-gray-800" > PCB 基本信息< / h2 >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1" > 板材类别< / label >
< div class = "grid grid-cols-3 sm:grid-cols-6 gap-1.5" id = "proCategory" >
< label class = "item flex items-center justify-center cursor-pointer" >
< input class = "hidden peer" name = "proCategory" type = "radio" value = "fr4Item" / >
< span
class="block flex items-center justify-center p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700 w-full h-full"
>
< img alt = "FR-4" class = "mr-1" src = "/iframe/img/img_pro_FR4.png" / > FR-4
< / span >
< / label >
< label class = "item flex items-center justify-center cursor-pointer" >
< input class = "hidden peer" name = "proCategory" type = "radio" value = "aluminumItem" / >
< span
class="block flex items-center justify-center p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700 w-full h-full"
>
< img alt = "铝基板" class = "mr-1" src = "/iframe/img/img_pro_Aluminum.png" / >
铝基板
< / span >
< / label >
< label class = "item flex items-center justify-center cursor-pointer" >
< input class = "hidden peer" name = "proCategory" type = "radio" value = "copperItem" / >
< span
class="block flex items-center justify-center p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700 w-full h-full"
>
< img alt = "铜基板" class = "mr-1" src = "/iframe/img/img_pro_Copper.png" / > 铜基板
< / span >
< / label >
< label class = "item flex items-center justify-center cursor-pointer" >
< input class = "hidden peer" name = "proCategory" type = "radio" value = "rogersItem" / >
< span
class="block flex items-center justify-center p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700 w-full h-full"
>
< img alt = "高频/混压" class = "mr-1" src = "/iframe/img/img_pro_Rogers.png" / >
高频/混压
< / span >
< / label >
< label class = "item flex items-center justify-center cursor-pointer" >
< input class = "hidden peer" name = "proCategory" type = "radio" value = "hdiItem" / >
< span
class="block flex items-center justify-center p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700 w-full h-full"
>
< img alt = "HDI" class = "mr-1" src = "/iframe/img/img_pro_HDI.png" / > HDI
< / span >
< / label >
< label class = "item flex items-center justify-center cursor-pointer" >
< input class = "hidden peer" name = "proCategory" type = "radio" value = "cem1Item" / >
< span
class="block flex items-center justify-center p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700 w-full h-full"
>
< img alt = "CEM-1" class = "mr-1" src = "/iframe/img/img_pro_CEM1.png" / >
CEM-1
< / span >
< / label >
< label class = "item flex items-center justify-center cursor-pointer" >
< input class = "hidden peer" name = "proCategory" type = "radio" value = "22fItem" / >
< span
class="block flex items-center justify-center p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700 w-full h-full"
>
< img alt = "22F" class = "mr-1" src = "/iframe/img/img_pro_22F.png" / > 22F
< / span >
< / label >
< label class = "item flex items-center justify-center cursor-pointer" >
< input class = "hidden peer" name = "proCategory" type = "radio" value = "fr1Item" / >
< span
class="block flex items-center justify-center p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700 w-full h-full"
>
< img alt = "FR-1" class = "mr-1" src = "/iframe/img/img_pro_FR1.png" / > FR-1
< / span >
< / label >
< label class = "item flex items-center justify-center cursor-pointer" >
< input class = "hidden peer" name = "proCategory" type = "radio" value = "cem3Item" / >
< span
class="block flex items-center justify-center p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700 w-full h-full"
>
< img alt = "CEM-3" class = "mr-1" src = "/iframe/img/img_pro_CEM3.png" / >
CEM-3
< / span >
< / label >
< / div >
< / div >
< div class = "mb-4" id = "MixedCategory-container" >
< label class = "block text-gray-700 text-sm mb-1" > 混压类别< / label >
< div class = "flex items-center space-x-2" id = "MixedCategory" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "MixedCategory" type = "radio" value = "1" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>纯压(罗杰斯)< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "MixedCategory" type = "radio" value = "2" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>混压(罗杰斯+FR-4)< /span
>
< / label >
< / div >
< / div >
< div class = "mb-4" id = "HDIBuilds-container" >
< label class = "block text-gray-700 text-sm mb-1" > 阶数< / label >
< div class = "flex items-center space-x-2" id = "HDIBuilds" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "HDIBuilds" type = "radio" value = "1" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>1阶< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "HDIBuilds" type = "radio" value = "2" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>2阶< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "HDIBuilds" type = "radio" value = "3" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>3阶< /span
>
< / label >
< / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1" >
板子层数
< button
id="calcLayers"
class="px-2 py-0.5 border border-grey-300 rounded-md text-xs hover:border-blue-500 transition-colors duration-200 ease-in-out"
>
识别
< / button >
< / label >
< div class = "flex flex-wrap gap-1" id = "BoardLayers" > < / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1" >
板子大小
< button
id="selectBoard"
class="px-2 py-0.5 border border-grey-300 rounded-md text-xs hover:border-blue-500 transition-colors duration-200 ease-in-out"
>
选择板框
< / button >
< / label >
< div class = "flex flex-wrap items-center gap-x-1 sm:gap-x-2 gap-y-1 text-sm" >
< span class = "text-gray-700" > 长(x)< / span >
< input
class="w-16 p-1 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 text-sm"
id="BoardWidth"
type="number"
value="10"
/>
< span class = "text-gray-700" > CM × 宽(y)< / span >
< input
class="w-16 p-1 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 text-sm"
id="BoardHeight"
type="number"
value="10"
/>
< span class = "text-gray-700" > CM, 数量< / span >
< input
class="w-16 p-1 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-blue-500 text-sm"
id="num"
type="number"
value="3"
/>
< span class = "text-gray-700" > PCS< / span >
< / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1" >
总面积 < span class = "font-bold text-blue-600 text-sm" id = "totalArea" > 0.030m²< / span >
< / label >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1" > 出货方式< / label >
< div class = "flex items-center space-x-2" id = "BoardType" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "BoardType" type = "radio" value = "pcs" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>单片出货< /span
>
< / label >
< label class = "item disabled" >
< input class = "hidden peer" name = "BoardType" type = "radio" value = "set" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>客户拼版< /span
>
< / label >
< label class = "item disabled" >
< input class = "hidden peer" name = "BoardType" type = "radio" value = "jpset" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>捷配代拼< /span
>
< / label >
< / div >
< / div >
< div >
< label class = "block text-gray-700 text-sm mb-1" > 订单阶段< / label >
< div class = "flex items-center space-x-2" id = "OrderStage" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "OrderStage" type = "radio" value = "0" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>研发打样< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "OrderStage" type = "radio" value = "1" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>量产试样< /span
>
< / label >
< / div >
< / div >
2025-06-04 22:43:00 +08:00
< / div >
2025-09-27 17:21:55 +08:00
< div class = "bg-white rounded-lg shadow-md p-4 sm:p-6 max-w-4xl mx-auto mt-2" >
< div class = "flex justify-between items-center mb-4 border-b pb-2" >
< h2 class = "text-lg sm:text-xl font-semibold text-gray-800" > PCB 工艺信息< / h2 >
< / div >
< div class = "mb-4" id = "AluminumType-container" style = "display: none" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 基板结构< / label >
< div class = "flex flex-wrap gap-1" id = "AluminumType" > < / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 板子厚度< / label >
< div class = "flex flex-wrap gap-1" id = "BoardThickness" > < / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 铜箔厚度(外层)< / label >
< div class = "flex flex-wrap gap-1" id = "CopperThickness" > < / div >
< / div >
< div class = "mb-4" id = "InnerCopperThickness-container" style = "display: none" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 铜箔厚度(内层)< / label >
< div class = "flex flex-wrap gap-1" id = "InnerCopperThickness" > < / div >
< / div >
< div class = "mb-4" id = "CopperStructure-container" style = "display: none" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 铜基结构< / label >
< div class = "flex flex-wrap gap-1" id = "CopperStructure" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "CopperStructure" type = "radio" value = "1" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>热电分离< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "CopperStructure" type = "radio" value = "2" checked = "checked" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>普通导热< /span
>
< / label >
< / div >
< / div >
< div class = "mb-4" id = "Invoice-container" style = "display: none" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 导热系数< / label >
< div class = "flex flex-wrap gap-1" id = "Invoice" > < / div >
< / div >
< div class = "mb-4" id = "WithstandVoltage-container" style = "display: none" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 板材耐压值< / label >
< div class = "flex flex-wrap gap-1" id = "WithstandVoltage" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "WithstandVoltage" type = "radio" value = "3000" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>AC3000V< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "WithstandVoltage" type = "radio" value = "4000" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>AC4000V< /span
>
< / label >
< / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 阻焊颜色< / label >
< div class = "flex flex-wrap gap-1" id = "SolderColor" > < / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 字符颜色< / label >
< div class = "flex flex-wrap gap-1" id = "FontColor" > < / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 最小线宽/线距< / label >
< div class = "flex flex-wrap gap-1" id = "LineWeight" > < / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 最小孔径< / label >
< div class = "flex flex-wrap gap-1" id = "Vias" > < / div >
< / div >
< div class = "mb-4" id = "SolderCover-container" style = "display: none" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 阻焊覆盖< / label >
< div class = "flex flex-wrap gap-1" id = "SolderCover" > < / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 测试方法< / label >
< div class = "flex flex-wrap gap-1" id = "FlyingProbe" > < / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 焊盘表面处理< / label >
< div class = "flex flex-wrap gap-1" id = "SurfaceFinish" > < / div >
< / div >
< div class = "mb-4" id = "ImGoldThinckness-container" style = "display: none" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 沉金厚度< / label >
< div class = "flex flex-wrap gap-1" id = "ImGoldThinckness" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "ImGoldThinckness" type = "radio" value = "1" checked = "checked" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>1U"< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "ImGoldThinckness" type = "radio" value = "2" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>2U"< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "ImGoldThinckness" type = "radio" value = "3" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>3U"< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "ImGoldThinckness" type = "radio" value = "4" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>4U"< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "ImGoldThinckness" type = "radio" value = "5" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>5U"< /span
>
< / label >
< / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 成型方式< / label >
< div class = "flex flex-wrap gap-1" id = "FormingType" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "FormingType" type = "radio" value = "mechanical" checked = "checked" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>机械成型< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "FormingType" type = "radio" value = "module" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>模具成型< /span
>
< / label >
< / div >
< / div >
< div class = "mb-4" id = "ImpedanceSize-container" style = "display: none" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 阻抗< / label >
< div class = "flex flex-wrap gap-1" id = "ImpedanceSize" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "ImpedanceSize" type = "radio" value = "1" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>是< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "ImpedanceSize" type = "radio" value = "0" checked = "checked" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>否< /span
>
< / label >
< / div >
< / div >
< div class = "mb-4" id = "StackedStructure-container" style = "display: none" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 叠层结构< / label >
< div class = "flex flex-wrap gap-1" id = "StackedStructure" >
< label class = "item disabled" >
< span class = "text-red-500" > 🚧 暂不支持 🚧< / span >
< / label >
< / div >
< / div >
< div class = "mb-4" id = "HalfHole-container" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 半孔< / label >
< div class = "flex flex-wrap gap-1" id = "HalfHole" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "HalfHole" type = "radio" value = "0" checked = "checked" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>无< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "HalfHole" type = "radio" value = "1" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>一边< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "HalfHole" type = "radio" value = "2" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>两边< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "HalfHole" type = "radio" value = "3" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>三边< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "HalfHole" type = "radio" value = "4" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>四边< /span
>
< / label >
< / div >
< / div >
< div id = "HoleThickness_-container" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 孔铜< / label >
< div class = "flex flex-wrap gap-1" id = "HoleThickness_" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "HoleThickness_" type = "radio" value = "18" checked = "checked" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>18um< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "HoleThickness_" type = "radio" value = "20" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>20um< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "HoleThickness_" type = "radio" value = "25" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>25um< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "HoleThickness_" type = "radio" value = "30" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>30um< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "HoleThickness_" type = "radio" value = "35" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>35um< /span
>
< / label >
< / div >
< / div >
2025-06-04 22:43:00 +08:00
< / div >
2025-09-27 17:21:55 +08:00
< div class = "bg-white rounded-lg shadow-md p-4 sm:p-6 max-w-4xl mx-auto mt-2" >
< div class = "flex justify-between items-center mb-4 border-b pb-2" >
< h2 class = "text-lg sm:text-xl font-semibold text-gray-800" > PCB 特殊工艺< / h2 >
< / div >
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
< div >
< div class = "flex items-center justify-center h-16 bg-gray-100 border border-gray-300 rounded-md" >
< span class = "text-gray-500" > 🚧 暂不支持特殊工艺预设 🚧< / span >
< / div >
< / div >
2025-06-04 22:43:00 +08:00
< / div >
2025-09-27 17:21:55 +08:00
< div class = "bg-white rounded-lg shadow-md p-4 sm:p-6 max-w-4xl mx-auto mt-2" >
< div class = "flex justify-between items-center mb-4 border-b pb-2" >
< h2 class = "text-lg sm:text-xl font-semibold text-gray-800" > 个性化服务< / h2 >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 序列号/二维码< / label >
< div class = "flex flex-wrap gap-1" id = "SerialNumber_" >
< label class = "item disabled" >
< span class = "text-red-500" > 🚧 暂不支持 🚧< / span >
< / label >
<!-- <label class="item cursor - pointer">
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "SerialNumber_" type = "radio" value = "0" checked = "checked" >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">无要求< / span >
< / label >
< label class = "item disabled" >
< input class = "hidden peer" name = "SerialNumber_" type = "radio" value = "1" >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">序列号< / span >
< / label >
< label class = "item disabled" >
< input class = "hidden peer" name = "SerialNumber_" type = "radio" value = "2" >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">固定二维码< / span >
< / label >
< label class = "item disabled" >
< input class = "hidden peer" name = "SerialNumber_" type = "radio" value = "3" >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">动态二维码< / span >
< / label >
< label class = "item disabled" >
< input class = "hidden peer" name = "SerialNumber_" type = "radio" value = "4" >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">序列号+动态二维码< / span >
< / label > -->
2025-09-27 17:21:55 +08:00
< / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 品质赔付< / label >
< div class = "flex flex-wrap gap-1" id = "QualityCompensation" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "QualityCompensation" type = "radio" value = "0" checked = "checked" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>按标品合同处理< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "QualityCompensation" type = "radio" value = "2" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>元器件全额赔付(优品专享)< /span
>
< / label >
< / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 四线低阻过孔< / label >
< div class = "flex flex-wrap gap-1" id = "LowResistanceTest" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "LowResistanceTest" type = "radio" value = "0" checked = "checked" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>无要求< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "LowResistanceTest" type = "radio" value = "1" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>全部测试< /span
>
< / label >
< / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 确认生产稿< / label >
< div class = "flex flex-wrap gap-1" id = "ProductFileSure" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "ProductFileSure" type = "radio" value = "1" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>需要< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "ProductFileSure" type = "radio" value = "0" checked = "checked" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>不需要< /span
>
< / label >
< / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 出货报告< / label >
< div class = "flex flex-wrap gap-1" id = "ReportList" >
< label class = "item disabled" >
< span class = "text-gray-500" > 🚧 暂不支持 🚧< / span >
< / label >
< / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 报告材质< / label >
< div class = "flex flex-wrap gap-1" id = "ReportMaterial" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "ReportMaterial" type = "radio" value = "0" checked = "checked" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>电子< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "ReportMaterial" type = "radio" value = "1" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>纸质< /span
>
< / label >
< / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 锣边外形公差< / label >
< div class = "flex flex-wrap gap-1" id = "GongBoundaryTolerance" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "GongBoundaryTolerance" type = "radio" value = "0" checked = "checked" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>普锣±0.2mm< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "GongBoundaryTolerance" type = "radio" value = "1" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>精锣±0.1mm< /span
>
< / label >
< / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 板面外观要求< / label >
< div class = "flex flex-wrap gap-1" id = "PanelAppearanceRequire" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "PanelAppearanceRequire" type = "radio" value = "0" checked = "checked" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>IPC二级< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "PanelAppearanceRequire" type = "radio" value = "1" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>极致外观< /span
>
< / label >
< / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 隔白纸< / label >
< div class = "flex flex-wrap gap-1" id = "WhitePaperService" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "WhitePaperService" type = "radio" value = "0" checked = "checked" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>不隔纸< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "WhitePaperService" type = "radio" value = "1" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>隔纸< /span
>
< / label >
< / div >
< / div >
< div class = "mb-4" >
< label class = "block text-gray-700 text-sm mb-1 flex items-center" > 生产编号< / label >
< div class = "flex flex-wrap gap-1" id = "IsNoneFont" >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "IsNoneFont" type = "radio" value = "0" checked = "checked" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>加生产编号< /span
>
< / label >
< label class = "item cursor-pointer" >
< input class = "hidden peer" name = "IsNoneFont" type = "radio" value = "1" / >
< span
class="block p-1.5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700"
>不加生产编号< /span
>
< / label >
< / div >
< / div >
2025-06-04 22:43:00 +08:00
< / div >
2025-09-27 17:21:55 +08:00
< div class = "bg-white rounded-lg shadow-md p-4 sm:p-6 max-w-4xl mx-auto mt-2" >
< div class = "flex justify-between items-center mb-4 border-b pb-2" >
< h2 class = "text-lg sm:text-xl font-semibold text-gray-800" > 操作< / h2 >
< / div >
< div >
< button
class="px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors duration-200 ease-in-out"
id="submitOrder"
>
前往下单
< / button >
< button
class="px-4 py-2 bg-blue-600 text-white rounded-md hover:bg-blue-700 transition-colors duration-200 ease-in-out"
id="savePreset"
>
保存预设
< / button >
< button
class="px-4 py-2 bg-red-600 text-white rounded-md hover:bg-red-700 transition-colors duration-200 ease-in-out"
id="deletePreset"
>
删除预设
< / button >
< / div >
2025-06-04 22:43:00 +08:00
< / div >
2025-09-27 17:21:55 +08:00
< script >
const boardLayersOptions = {
fr4Item: ['1', '2', '4', '6', '8', '10', '12', '14', '16', '18', '20', '22', '24', '26', '28', '30', '32'],
aluminumItem: ['1', '2'],
copperItem: ['1', '2', '4'],
rogersItem: {
'1': ['2', '4', '6', '8'],
'2': ['4', '6', '8'],
},
hdiItem: {
'1': ['4', '6', '8', '10', '12', '14', '16', '18', '20'],
'2': ['6', '8', '10', '12', '14', '16', '18', '20'],
'3': ['8', '10', '12', '14', '16', '18', '20'],
},
cem1Item: ['1'],
'22fItem': ['1'],
fr1Item: ['1'],
cem3Item: ['1'],
};
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
const aluminumTypeOptions = {
aluminumItem: [
['1', '(1)a', 'FR-4+铝基混压,铝基材在底层'],
['2', '(2)a', '芯板为铝材,顶底层为走线'],
],
copperItem: [
['3', '(3)a', 'FR-4+铜基混压,铜基材在底层'],
['4', '(4)a', '芯板为铜基,顶底层为走线'],
],
};
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
const boardThicknessOptions = {
fr4Item: {
'1': ['0.6', '0.8', '1.0', '1.2', '1.6', '2.0'],
'2': ['0.4', '0.6', '0.8', '1.0', '1.2', '1.6', '2.0', '2.4', '3.0', '3.6', '4.0'],
'4': ['0.4', '0.6', '0.8', '1.0', '1.2', '1.6', '2.0', '2.4', '2.5', '3.0', '3.2'],
'6': ['0.8', '1.0', '1.2', '1.6', '2.0', '2.5', '3.0'],
'8': ['1.2', '1.6', '2.0', '2.5'],
'10': ['1.2', '1.6', '2.0', '2.5'],
'12': ['1.6', '2.0', '2.5'],
'14': ['1.6', '2.0', '2.5', '3.0'],
'16': ['2.0', '2.5', '3.0', '3.2'],
'18': ['2.0', '2.5', '3.0', '3.2'],
'20': ['2.0', '2.5', '3.0', '3.2'],
'22': ['2.5', '3.0', '3.2'],
'24': ['2.5', '3.0', '3.2'],
'26': ['2.5', '3.0', '3.2'],
'28': ['2.5', '3.0', '3.2'],
'30': ['2.5', '3.0', '3.2'],
'32': ['2.5', '3.0', '3.2'],
},
aluminumItem: {
'1': ['0.4', '0.6', '0.8', '1.0', '1.2', '1.6', '2.0', '2.5', '3.0'],
'2': ['0.8', '1.0', '1.2', '1.6', '2.0'],
},
copperItem: {
'1': ['1.0', '1.2', '1.5', '1.6', '2.0'],
'2': ['1.0', '1.2', '1.5', '1.6', '2.0'],
'4': ['1.0', '1.2', '1.5', '1.6', '2.0'],
},
rogersItem: {
'1': {
'2': ['0.203', '0.254', '0.305', '0.335', '0.406', '0.422', '0.508', '0.762', '0.813', '1.524'],
'4': ['0.4', '0.6', '0.8', '1.0', '1.2', '1.6', '2.0', '2.4'],
'6': ['1.0', '1.2', '1.6', '2.0', '2.4'],
'8': ['1.0', '1.2', '1.6', '2.0', '2.4', '3.0'],
},
'2': {
'4': ['0.4', '0.6', '0.8', '1.0', '1.2', '1.6', '2.0', '2.4'],
'6': ['1.0', '1.2', '1.6', '2.0', '2.4'],
'8': ['1.0', '1.2', '1.6', '2.0', '2.4', '3.0'],
},
},
hdiItem: {
'1': {
'4': ['0.6', '0.8', '1.0', '1.2', '1.6', '2.0'],
'6': ['0.8', '1.0', '1.2', '1.6', '2.0', '2.4', '2.5'],
'8': ['1.0', '1.2', '1.6', '2.0', '2.4', '2.5'],
'10': ['1.2', '1.6', '2.0', '2.4', '2.5'],
'12': ['1.6', '2.0', '2.4', '2.5'],
'14': ['1.6', '2.0', '2.4', '2.5', '3.0'],
'16': ['2.0', '2.4', '2.5', '3.0', '3.2'],
'18': ['2.0', '2.4', '2.5', '3.0', '3.2'],
'20': ['2.0', '2.4', '2.5', '3.0', '3.2'],
},
'2': {
'6': ['0.8', '1.0', '1.2', '1.6', '2.0', '2.4', '2.5'],
'8': ['1.0', '1.2', '1.6', '2.0', '2.4', '2.5'],
'10': ['1.2', '1.6', '2.0', '2.4', '2.5'],
'12': ['1.6', '2.0', '2.4', '2.5'],
'14': ['1.6', '2.0', '2.4', '2.5', '3.0'],
'16': ['2.0', '2.4', '2.5', '3.0', '3.2'],
'18': ['2.0', '2.4', '2.5', '3.0', '3.2'],
'20': ['2.0', '2.4', '2.5', '3.0', '3.2'],
},
'3': {
'8': ['1.0', '1.2', '1.6', '2.0', '2.4', '2.5'],
'10': ['1.2', '1.6', '2.0', '2.4', '2.5'],
'12': ['1.6', '2.0', '2.4', '2.5'],
'14': ['1.6', '2.0', '2.4', '2.5', '3.0'],
'16': ['2.0', '2.4', '2.5', '3.0', '3.2'],
'18': ['2.0', '2.4', '2.5', '3.0', '3.2'],
'20': ['2.0', '2.4', '2.5', '3.0', '3.2'],
},
},
cem1Item: {
'1': ['1.0', '1.2', '1.6'],
},
'22fItem': {
'1': ['1.0', '1.2', '1.6'],
},
fr1Item: {
'1': ['1.0', '1.2', '1.6'],
},
cem3Item: {
'1': ['1.0', '1.2'],
},
};
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
const copperThicknessOptions = {
fr4Item: {
'1': ['1', '2'],
'2': ['1', '1.5', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'],
'4': ['1', '2', '3', '4', '5', '6', '7', '8'],
'6': ['1', '2', '3', '4'],
'8': ['1', '2'],
'10': ['1', '2'],
'12': ['1', '2'],
'14': ['1', '2'],
'16': ['1', '2'],
'18': ['1', '2'],
'20': ['1', '2'],
'22': ['1', '2'],
'24': ['1', '2'],
'26': ['1', '2'],
'28': ['1', '2'],
'30': ['1', '2'],
'32': ['1', '2'],
},
aluminumItem: {
'1': ['0.4', '0.5', '0.75', '1', '2', '3'],
'2': ['1'],
},
copperItem: {
'1': ['1', '2', '3', '4', '5'],
'2': ['1', '2'],
'4': ['1', '2'],
},
rogersItem: {
'1': {
'2': ['1', '2'],
'4': ['1', '2'],
'6': ['1', '2'],
'8': ['1', '2'],
},
'2': {
'4': ['1', '2'],
'6': ['1', '2'],
'8': ['1', '2'],
},
},
hdiItem: {
'1': {
'4': ['1', '2'],
},
'2': {
'6': ['1', '2'],
},
'3': {
'8': ['1', '2'],
},
},
cem1Item: {
'1': ['1'],
},
'22fItem': {
'1': ['0.75'],
},
fr1Item: {
'1': ['0.75', '1'],
},
cem3Item: {
'1': ['0.5'],
},
};
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
const innerCopperThicknessOptions = {
fr4Item: {
'4': ['0.5', '1', '2', '3', '4'],
'6': ['0.5', '1', '2', '3', '4'],
'8': ['0.5', '1', '2'],
'10': ['0.5', '1', '2'],
'12': ['0.5', '1'],
'14': ['0.5', '1'],
'16': ['0.5', '1'],
'18': ['0.5', '1'],
'20': ['0.5', '1'],
'22': ['0.5', '1'],
'24': ['0.5', '1'],
'26': ['0.5', '1'],
'28': ['0.5', '1'],
'30': ['0.5', '1'],
'32': ['0.5', '1'],
},
aluminumItem: {},
copperItem: {
'4': ['1', '2'],
},
rogersItem: {
'1': {
'4': ['1'],
},
'2': {
'4': ['1'],
},
},
hdiItem: {
'1': {
'4': ['0.5', '1'],
},
'2': {
'6': ['0.5', '1'],
},
'3': {
'8': ['0.5', '1'],
},
},
cem1Item: {},
'22fItem': {},
fr1Item: {},
cem3Item: {},
};
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
const solderColorOptions = {
fr4Item: [
['green', '绿色', '#007606'],
['white', '冷白色', '#fff'],
['blue', '蓝色', '#0943c8'],
['black', '黑色', '#111'],
['yellow', '黄色', '#ffde00'],
['red', '红色', '#c81609'],
['matteblack', '哑光黑', '#333'],
['mattegreen', '哑光绿', '#46c017'],
['purple', '紫色', 'purple'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
aluminumItem: [
['green', '绿色', '#007606'],
['white', '冷白色', '#fff'],
['warmwhite', '暖白色', '#fffbd6'],
['whitesfr6ks', '高反白色', '#fff'],
['black', '黑色', '#111'],
['purple', '紫色', 'purple'],
],
copperItem: [
['warmwhite', '暖白色', '#fffbd6'],
['black', '黑色', '#111'],
['matteblack', '哑光黑', '#333'],
],
rogersItem: [
['green', '绿色', '#007606'],
['white', '冷白色', '#fff'],
['blue', '蓝色', '#0943c8'],
['black', '黑色', '#111'],
['yellow', '黄色', '#ffde00'],
['red', '红色', '#c81609'],
['matteblack', '哑光黑', '#333'],
['mattegreen', '哑光绿', '#46c017'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
hdiItem: [
['green', '绿色', '#007606'],
['white', '冷白色', '#fff'],
['blue', '蓝色', '#0943c8'],
['black', '黑色', '#111'],
['yellow', '黄色', '#ffde00'],
['red', '红色', '#c81609'],
['matteblack', '哑光黑', '#333'],
['mattegreen', '哑光绿', '#46c017'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
cem1Item: [
['green', '绿色', '#007606'],
['white', '冷白色', '#fff'],
['blue', '蓝色', '#0943c8'],
['black', '黑色', '#111'],
['yellow', '黄色', '#ffde00'],
['red', '红色', '#c81609'],
['matteblack', '哑光黑', '#333'],
['mattegreen', '哑光绿', '#46c017'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
'22fItem': [
['green', '绿色', '#007606'],
['white', '冷白色', '#fff'],
['blue', '蓝色', '#0943c8'],
['black', '黑色', '#111'],
['yellow', '黄色', '#ffde00'],
['red', '红色', '#c81609'],
['matteblack', '哑光黑', '#333'],
['mattegreen', '哑光绿', '#46c017'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
fr1Item: [
['green', '绿色', '#007606'],
['white', '冷白色', '#fff'],
['blue', '蓝色', '#0943c8'],
['black', '黑色', '#111'],
['red', '红色', '#c81609'],
['matteblack', '哑光黑', '#333'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
cem3Item: [
['green', '绿色', '#007606'],
['white', '冷白色', '#fff'],
['black', '黑色', '#111'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
};
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
const fontColorOptions = {
fr4Item: [
['white', '白色', '#fff'],
['black', '黑色', '#111'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
aluminumItem: [
['white', '白色', '#fff'],
['black', '黑色', '#111'],
['hollowout', '镂空字符', 'transport'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
copperItem: [
['white', '白色', '#fff'],
['black', '黑色', '#111'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
rogersItem: [
['white', '白色', '#fff'],
['black', '黑色', '#111'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
hdiItem: [
['white', '白色', '#fff'],
['black', '黑色', '#111'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
cem1Item: [
['white', '白色', '#fff'],
['black', '黑色', '#111'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
'22fItem': [
['white', '白色', '#fff'],
['black', '黑色', '#111'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
fr1Item: [
['white', '白色', '#fff'],
['black', '黑色', '#111'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
cem3Item: [
['white', '白色', '#fff'],
['black', '黑色', '#111'],
['none', '无', "url('/iframe/img/none_color.svg') center"],
],
};
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
const invoiceOptions = {
aluminumItem: [
['1', '1.0W'],
['2', '1.5W'],
['3', '2.0W'],
['4', '3.0W'],
['5', '5.0W'],
['6', '8.0W'],
],
copperItem: [
['380', '380W'],
['3', '2.0W'],
['4', '3.0W'],
['5', '5.0W'],
['6', '8.0W'],
],
};
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
const lineWeightOptions = {
fr4Item: ['3', '3.5', '4', '5', '6', '8', '10', '20'],
aluminumItem: ['5', '10', '16', '20'],
copperItem: ['4', '5', '10', '20'],
rogersItem: ['3', '3.5', '4', '5', '6', '8', '10', '20'],
hdiItem: ['3', '3.5', '4', '5', '6', '8', '10', '20'],
cem1Item: ['4', '5', '6', '8', '10', '20'],
'22fItem': ['3', '3.5', '4', '5', '6', '8', '10', '20'],
fr1Item: ['8', '10', '20'],
cem3Item: ['20'],
};
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
const viasOptions = {
fr4Item: ['0.15', '0.2', '0.25', '0.3', '0.35', '0.4', '0.5', '0.6', '0.7', '0.8'],
aluminumItem: ['1.0', '1.2', '1.5'],
copperItem: ['1.2', '1.5'],
rogersItem: ['0.15', '0.2', '0.25', '0.3', '0.35', '0.4', '0.5', '0.6', '0.7', '0.8'],
hdiItem: ['0.15', '0.2', '0.25', '0.3', '0.35', '0.4', '0.5', '0.6', '0.7', '0.8', '1.0', '1.2', '1.5'],
cem1Item: ['0.3', '0.35', '0.4', '0.5', '0.6', '0.7', '0.8'],
'22fItem': ['0.3', '0.35', '0.4', '0.5', '0.6', '0.7', '0.8'],
fr1Item: ['0.8'],
cem3Item: ['0.8'],
};
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
const solderCoverOptions = {
fr4Item: [
['converoil', '过孔盖油'],
['plugoil', '过孔塞油(连塞带印)'],
['aluminumplughole', '过孔塞油(铝片塞)'],
['openwindow', '过孔开窗'],
['resinplughole', '树脂塞孔'],
],
rogersItem: [
['converoil', '过孔盖油'],
['aluminumplughole', '过孔塞油(铝片塞)'],
['openwindow', '过孔开窗'],
['resinplughole', '树脂塞孔'],
],
};
const flyingProbeOptions = {
fr4Item: [
['full', '100%飞针测试'],
['teststand', '工程测试架'],
],
aluminumItem: [
['aoi', '100%AOI'],
['full', '100%飞针测试'],
['teststand', '工程测试架'],
],
copperItem: [
['aoi', '100%AOI'],
['full', '100%飞针测试'],
['teststand', '工程测试架'],
],
rogersItem: [
['full', '100%飞针测试'],
['teststand', '工程测试架'],
],
hdiItem: [
['full', '100%飞针测试'],
['lowresistancetest', '四线低阻测试'],
['teststand', '工程测试架'],
],
cem1Item: [
['aoi', '100%AOI'],
['teststand', '工程测试架'],
],
'22fItem': [['aoi', '100%AOI']],
fr1Item: [
['aoi', '100%AOI'],
['teststand', '工程测试架'],
],
cem3Item: [
['aoi', '100%AOI'],
['teststand', '工程测试架'],
],
};
const surfaceFinishOptions = {
fr4Item: [
['none', '裸铜'],
['haslwithlead', '有铅喷锡'],
['haslwithfree', '无铅喷锡'],
['immersiongold', '沉金'],
['osp', 'OSP'],
['immersiontin', '沉锡'],
['immersionsilver', '沉银'],
['hardgold', '电镀金'],
['eletrolyticnickelgod', '化学镍钯金'],
['immersiongoldandosp', '沉金+选择性OSP'],
['haslwithfreeandimmersiongold', '无铅喷锡+选择性沉金'],
['haslwithfreeandhardgold', '无铅喷锡+选择性电镀金'],
],
aluminumItem: [
['none', '裸铜'],
['haslwithlead', '有铅喷锡'],
['haslwithfree', '无铅喷锡'],
['immersiongold', '沉金'],
['osp', 'OSP'],
],
copperItem: [
['haslwithfree', '无铅喷锡'],
['immersiongold', '沉金'],
['osp', 'OSP'],
['immersiontin', '沉锡'],
],
rogersItem: [
['immersiongold', '沉金'],
['osp', 'OSP'],
['immersiontin', '沉锡'],
['immersionsilver', '沉银'],
],
hdiItem: [
['none', '裸铜'],
['haslwithlead', '有铅喷锡'],
['haslwithfree', '无铅喷锡'],
['immersiongold', '沉金'],
['osp', 'OSP'],
],
cem1Item: [
['haslwithlead', '有铅喷锡'],
['haslwithfree', '无铅喷锡'],
['osp', 'OSP'],
],
'22fItem': [['osp', 'OSP']],
fr1Item: [['osp', 'OSP']],
cem3Item: [['osp', 'OSP']],
};
< / script >
< script >
document.addEventListener('DOMContentLoaded', () => {
setupRadioGroup('proCategory', 'proCategory', 'fr4Item', updateBoardCraft);
updateBoardCraft(document.getElementById('proCategory').getValue());
setupRadioGroup('BoardLayers', 'BoardLayers', '2');
setupRadioGroup('OrderStage', 'OrderStage', '0');
setupRadioGroup('BoardType', 'BoardType', 'pcs');
document.getElementById('MixedCategory').addEventListener('change', () => {
updateBoardCraft(document.getElementById('proCategory').getValue());
});
document.getElementById('HDIBuilds').addEventListener('change', () => {
updateBoardCraft(document.getElementById('proCategory').getValue());
});
document.getElementById('BoardLayers').addEventListener('change', () => {
updateBoardCraft(document.getElementById('proCategory').getValue());
});
document.getElementById('SurfaceFinish').addEventListener('change', () => {
const selectedSurfaceFinish = document.getElementById('SurfaceFinish').getValue();
if (selectedSurfaceFinish === 'immersiongold') {
document.getElementById('ImGoldThinckness-container').style.display = 'block';
} else {
document.getElementById('ImGoldThinckness-container').style.display = 'none';
}
});
// Function to calculate and update total area
function updateTotalArea() {
const boardHeight = parseFloat(document.getElementById('BoardHeight').value);
const boardWidth = parseFloat(document.getElementById('BoardWidth').value);
const num = parseInt(document.getElementById('num').value);
if (!isNaN(boardHeight) & & !isNaN(boardWidth) & & !isNaN(num)) {
// Convert cm² to m² (1 m² = 10000 cm²)
const totalAreaValue = ((boardHeight * boardWidth * num) / 10000).toFixed(3);
document.getElementById('totalArea').textContent = `${totalAreaValue}m²`;
} else {
document.getElementById('totalArea').textContent = '0.000m²'; // Default or error state
}
}
// Add event listeners to input fields to update total area dynamically
document.getElementById('BoardHeight').addEventListener('input', updateTotalArea);
document.getElementById('BoardWidth').addEventListener('input', updateTotalArea);
document.getElementById('num').addEventListener('input', updateTotalArea);
// Initial calculation for total area on page load
updateTotalArea();
});
// 点击 submitOrder 按钮时的事件处理
document.getElementById('submitOrder').addEventListener('click', () => {
// 获取各个选项的值
const proCategory = document.querySelector('input[name="proCategory"]:checked').value;
const mixedCategory = document.querySelector('input[name="MixedCategory"]:checked')?.value || '';
const hdiBuilds = document.querySelector('input[name="HDIBuilds"]:checked')?.value || '';
const boardLayers = document.querySelector('input[name="BoardLayers"]:checked').value;
const boardHeight = document.getElementById('BoardHeight').value;
const boardWidth = document.getElementById('BoardWidth').value;
const num = document.getElementById('num').value;
const boardType = document.querySelector('input[name="BoardType"]:checked').value;
const orderStage = document.querySelector('input[name="OrderStage"]:checked').value;
const boardThickness = document.querySelector('input[name="BoardThickness"]:checked')?.value || '';
const CopperThickness = document.querySelector('input[name="CopperThickness"]:checked')?.value || '';
const innerCopperThickness = document.querySelector('input[name="InnerCopperThickness"]:checked')?.value || '';
const aluminumType = document.querySelector('input[name="AluminumType"]:checked')?.value || '';
const solderColor = document.querySelector('input[name="SolderColor"]:checked')?.value || '';
const fontColor = document.querySelector('input[name="FontColor"]:checked')?.value || '';
const invoice = document.querySelector('input[name="Invoice"]:checked')?.value || '';
const lineWeight = document.querySelector('input[name="LineWeight"]:checked')?.value || '';
const vias = document.querySelector('input[name="Vias"]:checked')?.value || '';
const solderCover = document.querySelector('input[name="SolderCover"]:checked')?.value || '';
const flyingProbe = document.querySelector('input[name="FlyingProbe"]:checked')?.value || '';
const surfaceFinish = document.querySelector('input[name="SurfaceFinish"]:checked')?.value || '';
const imGoldThinckness = document.querySelector('input[name="ImGoldThinckness"]:checked')?.value || '';
const halfHole = document.querySelector('input[name="HalfHole"]:checked')?.value || '';
const holeThickness = document.querySelector('input[name="HoleThickness"]:checked')?.value || '';
const WithstandVoltage = document.querySelector('input[name="WithstandVoltage"]:checked')?.value || '';
const impedanceSize = document.querySelector('input[name="ImpedanceSize"]:checked')?.value || '';
/* 个性服务参数 */
const QualityCompensation = document.querySelector('input[name="QualityCompensation"]:checked')?.value || '';
const LowResistanceTest = document.querySelector('input[name="LowResistanceTest"]:checked')?.value || '';
const ProductFileSure = document.querySelector('input[name="ProductFileSure"]:checked')?.value || '';
const ReportMaterial = document.querySelector('input[name="ReportMaterial"]:checked')?.value || '';
const GongBoundaryTolerance = document.querySelector('input[name="GongBoundaryTolerance"]:checked')?.value || '';
const PanelAppearanceRequire = document.querySelector('input[name="PanelAppearanceRequire"]:checked')?.value || '';
const WhitePaperService = document.querySelector('input[name="WhitePaperService"]:checked')?.value || '';
const IsNoneFont = document.querySelector('input[name="IsNoneFont"]:checked')?.value || '';
// 拼接 url: https://www.jiepei.com/pcb/pcbquote?proCategory=fr4Item& BoardHeight=10& BoardWidth=10& num=4& BoardLayers=2& BoardType=set& BoardThickness=2
let url = `https://www.jiepei.com/pcb/pcbquote?proCategory=${encodeURIComponent(proCategory)}&BoardHeight=${encodeURIComponent(boardHeight)}&BoardWidth=${encodeURIComponent(boardWidth)}&num=${encodeURIComponent(num)}&BoardLayers=${encodeURIComponent(boardLayers)}&BoardType=${encodeURIComponent(boardType)}&OrderStage=${encodeURIComponent(orderStage)}`;
url += mixedCategory ? `& MixedCategory=${encodeURIComponent(mixedCategory)}` : '';
url += hdiBuilds ? `& HDIBuilds=${encodeURIComponent(hdiBuilds)}` : '';
url += boardThickness ? `& BoardThickness=${encodeURIComponent(boardThickness)}` : '';
url += CopperThickness ? `& CopperThickness=${encodeURIComponent(CopperThickness)}` : '';
url += innerCopperThickness ? `& InnerCopperThickness=${encodeURIComponent(innerCopperThickness)}` : '';
url += aluminumType ? `& AluminumType=${encodeURIComponent(aluminumType)}` : '';
url += solderColor ? `& SolderColor=${encodeURIComponent(solderColor)}` : '';
url += fontColor ? `& FontColor=${encodeURIComponent(fontColor)}` : '';
url += invoice ? `& Invoice=${encodeURIComponent(invoice)}` : '';
url += lineWeight ? `& LineWeight=${encodeURIComponent(lineWeight)}` : '';
url += vias ? `& Vias=${encodeURIComponent(vias)}` : '';
url += solderCover ? `& SolderCover=${encodeURIComponent(solderCover)}` : '';
url += flyingProbe ? `& FlyingProbe=${encodeURIComponent(flyingProbe)}` : '';
url += surfaceFinish ? `& SurfaceFinish=${encodeURIComponent(surfaceFinish)}` : '';
url += imGoldThinckness ? `& ImGoldThinckness=${encodeURIComponent(imGoldThinckness)}` : '';
url += halfHole ? `& HalfHole=${encodeURIComponent(halfHole)}` : '';
url += holeThickness ? `& HoleThickness_=${encodeURIComponent(holeThickness)}` : '';
url += WithstandVoltage ? `& WithstandVoltage=${encodeURIComponent(WithstandVoltage)}` : '';
url += impedanceSize ? `& ImpedanceSize=${encodeURIComponent(impedanceSize)}` : '';
url += QualityCompensation ? `& QualityCompensation=${encodeURIComponent(QualityCompensation)}` : '';
url += LowResistanceTest ? `& LowResistanceTest=${encodeURIComponent(LowResistanceTest)}` : '';
url += ProductFileSure ? `& ProductFileSure=${encodeURIComponent(ProductFileSure)}` : '';
url += ReportMaterial ? `& ReportMaterial=${encodeURIComponent(ReportMaterial)}` : '';
url += GongBoundaryTolerance ? `& GongBoundaryTolerance=${encodeURIComponent(GongBoundaryTolerance)}` : '';
url += PanelAppearanceRequire ? `& PanelAppearanceRequire=${encodeURIComponent(PanelAppearanceRequire)}` : '';
url += WhitePaperService ? `& WhitePaperService=${encodeURIComponent(WhitePaperService)}` : '';
url += IsNoneFont ? `& IsNoneFont=${encodeURIComponent(IsNoneFont)}` : '';
// 打开新窗口
// window.open(url, '_blank');
dialog(
'注意',
'下单前务必仔细检查所有项目是否符合预期,捷配官网可能与本扩展显示存在出入,本扩展不对工艺组合可行性进行验证,以捷配官网为准。\n点击确定前往捷配下单。',
`eda.sys_Window.open('${url}', '_blank')`,
);
});
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
document.getElementById('calcLayers').addEventListener('click', () => {
eda.pcb_Layer.getAllLayers().then((layers) => {
const layer_count = calcLayers(layers);
if (layer_count === 0) {
eda.sys_Message.showToastMessage('未检测到有效铜箔层,请检查板子设计', 'error');
return;
}
setupRadioGroup('BoardLayers', 'BoardLayers', layer_count.toString());
eda.sys_Message.showToastMessage('已识别到 ' + layer_count + ' 层铜箔', 'success');
});
});
document.getElementById('selectBoard').addEventListener('click', () => {
eda.sys_Message.showToastMessage('在画布上选择板框将自动识别板子大小', 'info');
eda.pcb_Event.addMouseEventListener(
'1',
'selected',
async () => {
new Promise((resolve) => setTimeout(() => resolve(), 500)).then(async () => {
2025-06-04 22:43:00 +08:00
const selectedPrimitives = await eda.pcb_SelectControl.getAllSelectedPrimitives();
console.log(selectedPrimitives);
if (selectedPrimitives.length === 1) {
2025-09-27 17:21:55 +08:00
if (selectedPrimitives[0].regionName === 'Board Outline') {
2025-06-04 22:43:00 +08:00
console.log(selectedPrimitives[0]);
const BBox = await eda.pcb_Primitive.getPrimitivesBBox([selectedPrimitives[0].getState_PrimitiveId()]);
const boardHeight = eda.sys_Unit.milToMm(BBox.maxY - BBox.minY - 10) / 10;
const boardWidth = eda.sys_Unit.milToMm(BBox.maxX - BBox.minX - 10) / 10;
document.getElementById('BoardHeight').value = boardHeight;
document.getElementById('BoardWidth').value = boardWidth;
2025-09-27 17:21:55 +08:00
eda.sys_Message.showToastMessage('已自动识别板子大小', 'success');
2025-06-04 22:43:00 +08:00
} else {
2025-09-27 17:21:55 +08:00
eda.sys_Message.showToastMessage('所选图元非板框', 'error');
2025-06-04 22:43:00 +08:00
}
} else if (selectedPrimitives.length === 0) {
2025-09-27 17:21:55 +08:00
eda.sys_Message.showToastMessage('未选择任何图元', 'error');
2025-06-04 22:43:00 +08:00
} else {
2025-09-27 17:21:55 +08:00
eda.sys_Message.showToastMessage('仅支持选择单个图元', 'error');
2025-06-04 22:43:00 +08:00
}
2025-09-27 17:21:55 +08:00
});
},
true,
);
});
function dialog(title, content, cmd) {
// tailwind css 实现,带半透明背景
let dialogHtml = `
2025-06-04 22:43:00 +08:00
< div class = "fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity z-50" id = "dialogOverlay" >
< div class = "flex items-center justify-center min-h-screen" >
< div class = "bg-white rounded-lg shadow-lg p-6 max-w-md w-full" >
< h2 class = "text-xl font-semibold mb-4" > ${title}< / h2 >
< p > ${content}< / p >
< div class = "mt-4 flex justify-end" > `;
2025-09-27 17:21:55 +08:00
dialogHtml += cmd
? `
< button class = "bg-blue-500 text-white px-4 py-2 rounded mr-2" onclick = "${cmd + " ; document . getElementById ( ' dialogOverlay ' ) . remove ( ) ; " } " > 确定< / button >
`
: '';
dialogHtml += `
2025-06-04 22:43:00 +08:00
< button class = "bg-gray-300 px-4 py-2 rounded" onclick = "document.getElementById('dialogOverlay').remove()" > 取消< / button >
< / div >
< / div >
< / div >
< / div > `;
2025-09-27 17:21:55 +08:00
document.body.insertAdjacentHTML('beforeend', dialogHtml);
}
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
function calcLayers(layers) {
let count = 0;
const ids = [1, 2, ...Array.from({ length: 32 }, (_, i) => i + 15)];
for (const layer of layers) {
const id = parseInt(layer.id);
if (ids.includes(id) & & layer.layerStatus === 1) {
count++;
}
}
return count;
}
< / script >
< script >
function setupRadioGroup(containerId, radioName, initialValue = null, onChangeCallback = null) {
const container = document.getElementById(containerId);
if (!container) {
console.warn(`Container with ID '${containerId}' not found.`);
return;
}
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
const radios = container.querySelectorAll(`input[type="radio"][name="${radioName}"]`);
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
console.log(`Setting up radio group: ${radioName} with initial value: ${initialValue}`);
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
// Set initial selection
if (initialValue) {
const initialRadio = Array.from(radios).find((radio) => radio.value === initialValue);
if (initialRadio) {
initialRadio.checked = true;
}
} else if (radios.length > 0 & & !container.querySelector(`input[name="${radioName}"]:checked`)) {
// If no initialValue and no radio is checked, check the first one by default
radios[0].checked = true;
2025-06-04 22:43:00 +08:00
}
2025-09-27 17:21:55 +08:00
// Attach event listener for changes
container.addEventListener('change', (event) => {
if (event.target.type === 'radio' & & event.target.name === radioName) {
if (onChangeCallback) {
onChangeCallback(event.target.value);
}
}
});
// Attach a method to the container to easily get the selected value
container.getValue = () => {
const selectedRadio = container.querySelector(`input[name="${radioName}"]:checked`);
return selectedRadio ? selectedRadio.value : null;
};
2025-06-04 22:43:00 +08:00
}
2025-09-27 17:21:55 +08:00
function updateBoardCraft(selectedCategory) {
const boardLayersContainer = document.getElementById('BoardLayers');
const aluminumTypeContainer = document.getElementById('AluminumType');
const boardThicknessContainer = document.getElementById('BoardThickness');
const copperThicknessContainer = document.getElementById('CopperThickness');
const innerCopperThicknessContainer = document.getElementById('InnerCopperThickness');
const solderColorContainer = document.getElementById('SolderColor');
const fontColorContainer = document.getElementById('FontColor');
const invoiceContainer = document.getElementById('Invoice');
const lineWeightContainer = document.getElementById('LineWeight');
const viasContainer = document.getElementById('Vias');
const solderCoverContainer = document.getElementById('SolderCover');
const flyingProbeContainer = document.getElementById('FlyingProbe');
const surfaceFinishContainer = document.getElementById('SurfaceFinish');
const selectedMixedCategory = document.querySelector('input[name="MixedCategory"]:checked')?.value || '1';
const selectedHDIBuilds = document.querySelector('input[name="HDIBuilds"]:checked')?.value || '1';
let selectedLayer = '2';
let selectedAluminumType = '1';
let selectedBoardThickness = '1.6';
let selectedCopperThickness = '1';
let selectedInnerCopperThickness = '0.5';
let selectedSolderColor = 'green';
let selectedFontColor = 'white';
let selectedInvoice = '1';
let selectedLineWeight = '10';
let selectedVias = '0.8';
let selectedSolderCover = 'converoil';
let selectedFlyingProbe = 'full';
let selectedSurfaceFinish = 'haslwithfree';
if (boardLayersContainer.innerHTML !== '') {
selectedLayer = document.querySelector('input[name="BoardLayers"]:checked')?.value || selectedLayer;
}
if (aluminumTypeContainer.innerHTML !== '') {
selectedAluminumType = document.querySelector('input[name="AluminumType"]:checked')?.value || '1';
}
if (boardThicknessContainer.innerHTML !== '') {
selectedBoardThickness = document.querySelector('input[name="BoardThickness"]:checked')?.value || '1.6';
}
if (copperThicknessContainer.innerHTML !== '') {
selectedCopperThickness = document.querySelector('input[name="CopperThickness"]:checked')?.value || '1';
}
if (innerCopperThicknessContainer.innerHTML !== '') {
selectedInnerCopperThickness = document.querySelector('input[name="InnerCopperThickness"]:checked')?.value || '0.5';
}
if (solderColorContainer.innerHTML !== '') {
selectedSolderColor = document.querySelector('input[name="SolderColor"]:checked')?.value || 'green';
}
if (fontColorContainer.innerHTML !== '') {
selectedFontColor = document.querySelector('input[name="FontColor"]:checked')?.value || 'white';
}
if (invoiceContainer.innerHTML !== '') {
selectedInvoice = document.querySelector('input[name="Invoice"]:checked')?.value || '1';
}
if (lineWeightContainer.innerHTML !== '') {
selectedLineWeight = document.querySelector('input[name="LineWeight"]:checked')?.value || '10';
}
if (viasContainer.innerHTML !== '') {
selectedVias = document.querySelector('input[name="Vias"]:checked')?.value || '0.8';
}
if (solderCoverContainer.innerHTML !== '') {
selectedSolderCover = document.querySelector('input[name="SolderCover"]:checked')?.value || 'converoil';
}
if (flyingProbeContainer.innerHTML !== '') {
selectedFlyingProbe = document.querySelector('input[name="FlyingProbe"]:checked')?.value || 'full';
}
if (surfaceFinishContainer.innerHTML !== '') {
selectedSurfaceFinish = document.querySelector('input[name="SurfaceFinish"]:checked')?.value || 'haslwithfree';
}
boardLayersContainer.innerHTML = '';
aluminumTypeContainer.innerHTML = '';
boardThicknessContainer.innerHTML = '';
copperThicknessContainer.innerHTML = '';
innerCopperThicknessContainer.innerHTML = '';
solderColorContainer.innerHTML = '';
fontColorContainer.innerHTML = '';
invoiceContainer.innerHTML = '';
lineWeightContainer.innerHTML = '';
viasContainer.innerHTML = '';
solderCoverContainer.innerHTML = '';
flyingProbeContainer.innerHTML = '';
surfaceFinishContainer.innerHTML = '';
console.log(`selectedCategory: ${selectedCategory}`);
console.log(`selectedMixedCategory: ${selectedMixedCategory}`);
console.log(`selectedHDIBuilds: ${selectedHDIBuilds}`);
console.log(`selectedLayer: ${selectedLayer}`);
// 板子层数
const layersToShow =
selectedCategory === 'rogersItem'
? boardLayersOptions[selectedCategory][selectedMixedCategory] || []
: selectedCategory === 'hdiItem'
? boardLayersOptions[selectedCategory][selectedHDIBuilds] || []
: boardLayersOptions[selectedCategory] || [];
// 基板类型
const aluminumTypeToShow = aluminumTypeOptions[selectedCategory] || [];
// 板子厚度
const thicknessToShow =
selectedCategory === 'rogersItem'
? boardThicknessOptions[selectedCategory][selectedMixedCategory][selectedLayer] ||
boardThicknessOptions[selectedCategory][selectedMixedCategory]['4']
: selectedCategory === 'hdiItem'
? selectedHDIBuilds === '1'
? boardThicknessOptions[selectedCategory][selectedHDIBuilds][selectedLayer] ||
boardThicknessOptions[selectedCategory][selectedHDIBuilds]['4']
: selectedHDIBuilds === '2'
? boardThicknessOptions[selectedCategory][selectedHDIBuilds][selectedLayer] ||
boardThicknessOptions[selectedCategory][selectedHDIBuilds]['6']
: selectedHDIBuilds === '3'
? boardThicknessOptions[selectedCategory][selectedHDIBuilds][selectedLayer] ||
boardThicknessOptions[selectedCategory][selectedHDIBuilds]['8']
: boardThicknessOptions[selectedCategory][selectedLayer] || []
: boardThicknessOptions[selectedCategory][selectedLayer] || boardThicknessOptions[selectedCategory]['1'];
// 外层铜厚
const copperThicknessToShow =
selectedCategory === 'rogersItem'
? copperThicknessOptions[selectedCategory][selectedMixedCategory][selectedLayer] ||
copperThicknessOptions[selectedCategory][selectedMixedCategory]['4']
: selectedCategory === 'hdiItem'
? selectedHDIBuilds === '1'
? copperThicknessOptions[selectedCategory][selectedHDIBuilds][selectedLayer] ||
copperThicknessOptions[selectedCategory][selectedHDIBuilds]['4']
: selectedHDIBuilds === '2'
? copperThicknessOptions[selectedCategory][selectedHDIBuilds][selectedLayer] ||
copperThicknessOptions[selectedCategory][selectedHDIBuilds]['6']
: selectedHDIBuilds === '3'
? copperThicknessOptions[selectedCategory][selectedHDIBuilds][selectedLayer] ||
copperThicknessOptions[selectedCategory][selectedHDIBuilds]['8']
: copperThicknessOptions[selectedCategory][selectedLayer] || []
: copperThicknessOptions[selectedCategory][selectedLayer] || copperThicknessOptions[selectedCategory]['1'];
// 内层铜厚
const innerCopperThicknessToShow =
selectedCategory === 'rogersItem'
? innerCopperThicknessOptions[selectedCategory][selectedMixedCategory][selectedLayer] ||
innerCopperThicknessOptions[selectedCategory][selectedMixedCategory]['4']
: selectedCategory === 'hdiItem'
? selectedHDIBuilds === '1'
? innerCopperThicknessOptions[selectedCategory][selectedHDIBuilds][selectedLayer] ||
innerCopperThicknessOptions[selectedCategory][selectedHDIBuilds]['4']
: selectedHDIBuilds === '2'
? innerCopperThicknessOptions[selectedCategory][selectedHDIBuilds][selectedLayer] ||
innerCopperThicknessOptions[selectedCategory][selectedHDIBuilds]['6']
: selectedHDIBuilds === '3'
? innerCopperThicknessOptions[selectedCategory][selectedHDIBuilds][selectedLayer] ||
innerCopperThicknessOptions[selectedCategory][selectedHDIBuilds]['8']
: innerCopperThicknessOptions[selectedCategory][selectedLayer] || []
: innerCopperThicknessOptions[selectedCategory][selectedLayer] || [];
// 阻焊颜色
const solderColorsToShow = solderColorOptions[selectedCategory] || [];
// 字符颜色
const fontColorsToShow = fontColorOptions[selectedCategory] || [];
// 导热系数
const invoiceToShow = invoiceOptions[selectedCategory] || [];
// 最小线宽/线距
const lineWeightsToShow = lineWeightOptions[selectedCategory] || [];
// 最小孔径
const viasToShow = viasOptions[selectedCategory] || [];
// 过孔盖油
const solderCoverToShow = solderCoverOptions[selectedCategory] || [];
// 飞针测试
const flyingProbeToShow = flyingProbeOptions[selectedCategory] || [];
// 表面处理
const surfaceFinishToShow = surfaceFinishOptions[selectedCategory] || [];
console.log(`thicknessToShow: ${thicknessToShow}`);
layersToShow.forEach((layer) => {
const label = document.createElement('label');
label.className = 'item cursor-pointer';
label.innerHTML = `
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "BoardLayers" type = "radio" value = "${layer}" >
< span class = "block p-1 . 5 border border-gray-300 rounded-md text-gray-700 text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">${layer}< / span >
`;
2025-09-27 17:21:55 +08:00
boardLayersContainer.appendChild(label);
});
aluminumTypeToShow.forEach(([value, image, text]) => {
const label = document.createElement('label');
label.className = 'item cursor-pointer';
label.innerHTML = `
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "AluminumType" type = "radio" value = "${value}" $ { value = == selectedAluminumType ? ' checked ' : ' ' } >
< span class = "block p-1 . 5 border border-gray-300 rounded-md text-gray-700 text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">< img alt = "HDI" class = "mr-1 h-6 inline-block" src = "/iframe/img/${image}.jpg" > ${text}< / span >
`;
2025-09-27 17:21:55 +08:00
aluminumTypeContainer.appendChild(label);
});
thicknessToShow.forEach((thickness) => {
const label = document.createElement('label');
label.className = 'item cursor-pointer';
label.innerHTML = `
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "BoardThickness" type = "radio" value = "${thickness}" >
< span class = "block p-1 . 5 border border-gray-300 rounded-md text-gray-700 text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">${thickness}mm< / span >
`;
2025-09-27 17:21:55 +08:00
boardThicknessContainer.appendChild(label);
});
copperThicknessToShow.forEach((copperThickness) => {
const label = document.createElement('label');
label.className = 'item cursor-pointer';
label.innerHTML = `
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "CopperThickness" type = "radio" value = "${copperThickness}" >
< span class = "block p-1 . 5 border border-gray-300 rounded-md text-gray-700 text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">${copperThickness}oz< / span >
`;
2025-09-27 17:21:55 +08:00
copperThicknessContainer.appendChild(label);
});
innerCopperThicknessToShow.forEach((innerCopperThickness) => {
const label = document.createElement('label');
label.className = 'item cursor-pointer';
label.innerHTML = `
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "InnerCopperThickness" type = "radio" value = "${innerCopperThickness}" >
< span class = "block p-1 . 5 border border-gray-300 rounded-md text-gray-700 text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">${innerCopperThickness}oz< / span >
`;
2025-09-27 17:21:55 +08:00
innerCopperThicknessContainer.appendChild(label);
});
solderColorsToShow.forEach(([value, text, color]) => {
const label = document.createElement('label');
label.className = 'item cursor-pointer';
label.innerHTML = `
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "SolderColor" type = "radio" value = "${value}" $ { value = == selectedSolderColor ? ' checked ' : ' ' } >
< span class = "block p-1 . 5 border border-gray-300 rounded-md text-gray-700 text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">< em class = "example-color" style = "background: ${color}" > < / em > ${text}< / span >
`;
2025-09-27 17:21:55 +08:00
solderColorContainer.appendChild(label);
});
fontColorsToShow.forEach(([value, text, color]) => {
const label = document.createElement('label');
label.className = 'item cursor-pointer';
label.innerHTML = `
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "FontColor" type = "radio" value = "${value}" $ { value = == selectedFontColor ? ' checked ' : ' ' } >
< span class = "block p-1 . 5 border border-gray-300 rounded-md text-gray-700 text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">< em class = "example-color" style = "background: ${color}" > < / em > ${text}< / span >
`;
2025-09-27 17:21:55 +08:00
fontColorContainer.appendChild(label);
});
invoiceToShow.forEach(([value, text]) => {
const label = document.createElement('label');
label.className = 'item cursor-pointer';
label.innerHTML = `
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "Invoice" type = "radio" value = "${value}" $ { value = == selectedInvoice ? ' checked ' : ' ' } >
< span class = "block p-1 . 5 border border-gray-300 rounded-md text-gray-700 text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">${text}< / span >
`;
2025-09-27 17:21:55 +08:00
invoiceContainer.appendChild(label);
});
lineWeightsToShow.forEach((lineWeight) => {
const label = document.createElement('label');
label.className = 'item cursor-pointer';
label.innerHTML = `
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "LineWeight" type = "radio" value = "${lineWeight}" $ { lineWeight = == selectedLineWeight ? ' checked ' : ' ' } >
< span class = "block p-1 . 5 border border-gray-300 rounded-md text-gray-700 text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">${lineWeight}/${lineWeight}mil↑< / span >
`;
2025-09-27 17:21:55 +08:00
lineWeightContainer.appendChild(label);
});
viasToShow.forEach((via) => {
const label = document.createElement('label');
label.className = 'item cursor-pointer';
label.innerHTML = `
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "Vias" type = "radio" value = "${via}" $ { via = == selectedVias ? ' checked ' : ' ' } >
< span class = "block p-1 . 5 border border-gray-300 rounded-md text-gray-700 text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">${via}mm< / span >
`;
2025-09-27 17:21:55 +08:00
viasContainer.appendChild(label);
});
solderCoverToShow.forEach(([value, text]) => {
const label = document.createElement('label');
label.className = 'item cursor-pointer';
label.innerHTML = `
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "SolderCover" type = "radio" value = "${value}" $ { value = == selectedSolderCover ? ' checked ' : ' ' } >
< span class = "block p-1 . 5 border border-gray-300 rounded-md text-gray-700 text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">${text}< / span >
`;
2025-09-27 17:21:55 +08:00
solderCoverContainer.appendChild(label);
});
flyingProbeToShow.forEach(([value, text]) => {
const label = document.createElement('label');
label.className = 'item cursor-pointer';
label.innerHTML = `
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "FlyingProbe" type = "radio" value = "${value}" $ { value = == selectedFlyingProbe ? ' checked ' : ' ' } >
< span class = "block p-1 . 5 border border-gray-300 rounded-md text-gray-700 text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">${text}< / span >
`;
2025-09-27 17:21:55 +08:00
flyingProbeContainer.appendChild(label);
});
surfaceFinishToShow.forEach(([value, text]) => {
const label = document.createElement('label');
label.className = 'item cursor-pointer';
label.innerHTML = `
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "SurfaceFinish" type = "radio" value = "${value}" $ { value = == selectedSurfaceFinish ? ' checked ' : ' ' } >
< span class = "block p-1 . 5 border border-gray-300 rounded-md text-gray-700 text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">${text}< / span >
`;
2025-09-27 17:21:55 +08:00
surfaceFinishContainer.appendChild(label);
});
if (selectedCategory === 'hdiItem') {
document.getElementById('HDIBuilds-container').style.display = 'block';
document.getElementById('MixedCategory-container').style.display = 'none';
} else if (selectedCategory === 'rogersItem') {
document.getElementById('HDIBuilds-container').style.display = 'none';
document.getElementById('MixedCategory-container').style.display = 'block';
} else {
document.getElementById('HDIBuilds-container').style.display = 'none';
document.getElementById('MixedCategory-container').style.display = 'none';
}
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
if (selectedLayer >= 4) {
document.getElementById('InnerCopperThickness-container').style.display = 'block';
} else {
document.getElementById('InnerCopperThickness-container').style.display = 'none';
}
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
if (selectedCategory === 'aluminumItem' || selectedCategory === 'copperItem') {
document.getElementById('Invoice-container').style.display = 'block';
selectedCategory === 'copperItem'
? (document.getElementById('CopperStructure-container').style.display = 'block')
: (document.getElementById('CopperStructure-container').style.display = 'none');
selectedCategory === 'aluminumItem'
? (document.getElementById('WithstandVoltage-container').style.display = 'block')
: (document.getElementById('WithstandVoltage-container').style.display = 'none');
if (selectedLayer !== '1') {
document.getElementById('AluminumType-container').style.display = 'block';
} else {
document.getElementById('AluminumType-container').style.display = 'none';
}
} else {
document.getElementById('Invoice-container').style.display = 'none';
document.getElementById('AluminumType-container').style.display = 'none';
document.getElementById('CopperStructure-container').style.display = 'none';
}
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
if (selectedCategory === 'fr4Item' || selectedCategory === 'rogersItem') {
document.getElementById('SolderCover-container').style.display = 'block';
} else {
document.getElementById('SolderCover-container').style.display = 'none';
}
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
if (selectedCategory === 'fr4Item') {
document.getElementById('ImpedanceSize-container').style.display = 'block';
if (selectedLayer === '4') {
document.getElementById('StackedStructure-container').style.display = 'block';
} else {
document.getElementById('StackedStructure-container').style.display = 'none';
}
} else {
document.getElementById('ImpedanceSize-container').style.display = 'none';
document.getElementById('StackedStructure-container').style.display = 'none';
}
if (selectedCategory === 'fr4Item' || selectedCategory === 'rogersItem' || selectedCategory === 'hdiItem') {
document.getElementById('HalfHole-container').style.display = 'block';
document.getElementById('HoleThickness_-container').style.display = 'block';
} else {
document.getElementById('HalfHole-container').style.display = 'none';
document.getElementById('HoleThickness_-container').style.display = 'none';
}
setupRadioGroup('BoardLayers', 'BoardLayers', selectedLayer);
setupRadioGroup('BoardThickness', 'BoardThickness', selectedBoardThickness);
setupRadioGroup('CopperThickness', 'CopperThickness', selectedCopperThickness);
setupRadioGroup('InnerCopperThickness', 'InnerCopperThickness', selectedInnerCopperThickness);
setupRadioGroup('SolderColor', 'SolderColor', selectedSolderColor);
setupRadioGroup('FontColor', 'FontColor', selectedFontColor);
setupRadioGroup('Invoice', 'Invoice', selectedInvoice);
setupRadioGroup('LineWeight', 'LineWeight', selectedLineWeight);
setupRadioGroup('Vias', 'Vias', selectedVias);
setupRadioGroup('SolderCover', 'SolderCover', selectedSolderCover);
setupRadioGroup('FlyingProbe', 'FlyingProbe', selectedFlyingProbe);
setupRadioGroup('SurfaceFinish', 'SurfaceFinish', selectedSurfaceFinish);
2025-06-04 22:43:00 +08:00
}
2025-09-27 17:21:55 +08:00
< / script >
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
< script >
let presetName = '';
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
let presetList = eda.sys_Storage.getExtensionUserConfig('PresetList') || {};
/*let presetList = {
2025-06-04 22:43:00 +08:00
'测试测试': {
proCategory: 'rogersItem',
BoardHeight: '10',
BoardWidth: '10',
num: '5',
MixedCategory: '2',
BoardLayers: '8',
BoardType: 'pcs',
OrderStage: '0',
BoardThickness: '3.0',
CopperThickness: '2',
InnerCopperThickness: '1',
AluminumType: '1',
CopperStructure: '1',
Invoice: '4',
SolderColor: 'yellow',
FontColor: 'black',
LineWeight: '8',
Vias: '0.7',
SolderCover: 'aluminumplughole',
FlyingProbe: 'teststand',
SurfaceFinish: 'immersiongold',
ImGoldThinckness: '2',
FormingType: 'mechanical',
ImpedanceSize: '1',
HalfHole: '4',
HoleThickness_: '25',
WithstandVoltage: '4000',
QualityCompensation: '2',
LowResistanceTest: '1',
ProductFileSure: '1',
ReportMaterial: '1',
GongBoundaryTolerance: '1',
PanelAppearanceRequire: '1',
WhitePaperService: '1',
IsNoneFont: '1'
}
}*/
2025-09-27 17:21:55 +08:00
document.getElementById('CreatePreset').addEventListener('click', () => {
const newPresetName = document.getElementById('PresetName').value;
if (newPresetName & & !presetList[newPresetName]) {
presetList[newPresetName] = {};
presetName = newPresetName;
showPresetList();
} else if (presetList[newPresetName]) {
dialog('错误', '预设名称已存在,必须使用其他名称。');
} else {
dialog('错误', '预设名称不能为空。');
}
});
2025-06-04 22:43:00 +08:00
2025-09-27 17:21:55 +08:00
document.getElementById('savePreset').addEventListener('click', () => {
if (presetName) {
presetList[presetName] = {
proCategory: document.querySelector('input[name="proCategory"]:checked')?.value || '',
BoardHeight: document.getElementById('BoardHeight').value,
BoardWidth: document.getElementById('BoardWidth').value,
num: document.getElementById('num').value,
MixedCategory: document.querySelector('input[name="MixedCategory"]:checked')?.value || '',
BoardLayers: document.querySelector('input[name="BoardLayers"]:checked')?.value || '',
BoardType: document.querySelector('input[name="BoardType"]:checked')?.value || '',
OrderStage: document.querySelector('input[name="OrderStage"]:checked')?.value || '',
BoardThickness: document.querySelector('input[name="BoardThickness"]:checked')?.value || '',
CopperThickness: document.querySelector('input[name="CopperThickness"]:checked')?.value || '',
InnerCopperThickness: document.querySelector('input[name="InnerCopperThickness"]:checked')?.value || '',
AluminumType: document.querySelector('input[name="AluminumType"]:checked')?.value || '',
CopperStructure: document.querySelector('input[name="CopperStructure"]:checked')?.value || '',
Invoice: document.querySelector('input[name="Invoice"]:checked')?.value || '',
SolderColor: document.querySelector('input[name="SolderColor"]:checked')?.value || '',
FontColor: document.querySelector('input[name="FontColor"]:checked')?.value || '',
LineWeight: document.querySelector('input[name="LineWeight"]:checked')?.value || '',
Vias: document.querySelector('input[name="Vias"]:checked')?.value || '',
SolderCover: document.querySelector('input[name="SolderCover"]:checked')?.value || '',
FlyingProbe: document.querySelector('input[name="FlyingProbe"]:checked')?.value || '',
SurfaceFinish: document.querySelector('input[name="SurfaceFinish"]:checked')?.value || '',
ImGoldThinckness: document.querySelector('input[name="ImGoldThinckness"]:checked')?.value || '',
HalfHole: document.querySelector('input[name="HalfHole"]:checked')?.value || '',
HoleThickness_: document.querySelector('input[name="HoleThickness_"]:checked')?.value || '',
ImpedanceSize: document.querySelector('input[name="ImpedanceSize"]:checked')?.value || '',
WithstandVoltage: document.querySelector('input[name="WithstandVoltage"]:checked')?.value || '',
QualityCompensation: document.querySelector('input[name="QualityCompensation"]:checked')?.value || '',
LowResistanceTest: document.querySelector('input[name="LowResistanceTest"]:checked')?.value || '',
ProductFileSure: document.querySelector('input[name="ProductFileSure"]:checked')?.value || '',
ReportMaterial: document.querySelector('input[name="ReportMaterial"]:checked')?.value || '',
GongBoundaryTolerance: document.querySelector('input[name="GongBoundaryTolerance"]:checked')?.value || '',
PanelAppearanceRequire: document.querySelector('input[name="PanelAppearanceRequire"]:checked')?.value || '',
WhitePaperService: document.querySelector('input[name="WhitePaperService"]:checked')?.value || '',
IsNoneFont: document.querySelector('input[name="IsNoneFont"]:checked')?.value || '',
};
eda.sys_Storage.setExtensionUserConfig('PresetList', presetList);
}
});
document.getElementById('deletePreset').addEventListener('click', () => {
// 删除当前选择的预设
if (presetName & & presetList[presetName]) {
delete presetList[presetName];
presetName = ''; // 清空预设名称
eda.sys_Storage.setExtensionUserConfig('PresetList', presetList);
showPresetList(); // 更新预设列表显示
} else {
dialog('错误', '没有选择要删除的预设。');
}
});
function showPresetList() {
const presetListContainer = document.getElementById('PresetList');
presetListContainer.innerHTML = ''; // 清空现有内容
for (const name in presetList) {
const iconList = {
'fr4Item': '/iframe/img/img_pro_FR4.png',
'rogersItem': '/iframe/img/img_pro_Rogers.png',
'hdiItem': '/iframe/img/img_pro_HDI.png',
'aluminumItem': '/iframe/img/img_pro_Aluminum.png',
'copperItem': '/iframe/img/img_pro_Copper.png',
'cem1Item': '/iframe/img/img_pro_CEM1.png',
'22fItem': '/iframe/img/img_pro_22F.png',
'cem3Item': '/iframe/img/img_pro_CEM3.png',
'fr1Item': '/iframe/img/img_pro_FR1.png',
};
const icon_src = iconList[presetList[name].proCategory] || '/iframe/img/img_pro_FR4.png';
const label = document.createElement('label');
label.className = 'item cursor-pointer';
label.innerHTML = `
2025-06-04 22:43:00 +08:00
< input class = "hidden peer" name = "presetName" type = "radio" value = "${name}" $ { name = == presetName ? ' checked ' : ' ' } >
< span class = "block p-1 . 5 border border-gray-300 rounded-md text-gray-700 font-medium text-xs sm:text-sm hover:border-blue-500 transition-colors duration-200 ease-in-out
peer-checked:border-blue-500 peer-checked:bg-blue-50 peer-checked:text-blue-700">
< img class = "inline-block h-4" src = "${icon_src}" alt = "icon" >
${name}
< / span >
`;
2025-09-27 17:21:55 +08:00
// 监听点击 调用 autoSetupPreset 函数
label.addEventListener('click', () => {
presetName = name; // 更新预设名称
autoSetupPreset(name); // 调用自动设置预设函数
});
presetListContainer.appendChild(label);
}
}
document.addEventListener('DOMContentLoaded', () => {
showPresetList();
2025-06-04 22:43:00 +08:00
});
2025-09-27 17:21:55 +08:00
// 传入预设名称, 自动使用setupRadioGroup所有选项
function autoSetupPreset(presetName) {
if (presetList[presetName]) {
setupRadioGroup('proCategory', 'proCategory', presetList[presetName].proCategory || '');
presetList[presetName].proCategory ? updateBoardCraft(presetList[presetName].proCategory) : '';
setupRadioGroup('BoardLayers', 'BoardLayers', presetList[presetName].BoardLayers || '');
presetList[presetName].proCategory ? updateBoardCraft(presetList[presetName].proCategory) : '';
setupRadioGroup('MixedCategory', 'MixedCategory', presetList[presetName].MixedCategory || '');
presetList[presetName].proCategory ? updateBoardCraft(presetList[presetName].proCategory) : '';
setupRadioGroup('HDIBuilds', 'HDIBuilds', presetList[presetName].HDIBuilds || '');
presetList[presetName].proCategory ? updateBoardCraft(presetList[presetName].proCategory) : '';
document.getElementById('BoardHeight').value = presetList[presetName].BoardHeight;
document.getElementById('BoardWidth').value = presetList[presetName].BoardWidth;
document.getElementById('num').value = presetList[presetName].num;
setupRadioGroup('BoardType', 'BoardType', presetList[presetName].BoardType);
setupRadioGroup('OrderStage', 'OrderStage', presetList[presetName].OrderStage);
setupRadioGroup('AluminumType', 'AluminumType', presetList[presetName].AluminumType);
setupRadioGroup('CopperStructure', 'CopperStructure', presetList[presetName].CopperStructure);
setupRadioGroup('BoardThickness', 'BoardThickness', presetList[presetName].BoardThickness);
setupRadioGroup('CopperThickness', 'CopperThickness', presetList[presetName].CopperThickness);
setupRadioGroup('Invoice', 'Invoice', presetList[presetName].Invoice);
setupRadioGroup('InnerCopperThickness', 'InnerCopperThickness', presetList[presetName].InnerCopperThickness);
setupRadioGroup('SolderColor', 'SolderColor', presetList[presetName].SolderColor);
setupRadioGroup('FontColor', 'FontColor', presetList[presetName].FontColor);
setupRadioGroup('LineWeight', 'LineWeight', presetList[presetName].LineWeight);
setupRadioGroup('Vias', 'Vias', presetList[presetName].Vias);
setupRadioGroup('SolderCover', 'SolderCover', presetList[presetName].SolderCover);
setupRadioGroup('FlyingProbe', 'FlyingProbe', presetList[presetName].FlyingProbe);
setupRadioGroup('SurfaceFinish', 'SurfaceFinish', presetList[presetName].SurfaceFinish);
setupRadioGroup('ImpedanceSize', 'ImpedanceSize', presetList[presetName].ImpedanceSize);
setupRadioGroup('HalfHole', 'HalfHole', presetList[presetName].HalfHole);
setupRadioGroup('HoleThickness_', 'HoleThickness_', presetList[presetName].HoleThickness_);
setupRadioGroup('WithstandVoltage', 'WithstandVoltage', presetList[presetName].WithstandVoltage);
setupRadioGroup('QualityCompensation', 'QualityCompensation', presetList[presetName].QualityCompensation);
setupRadioGroup('LowResistanceTest', 'LowResistanceTest', presetList[presetName].LowResistanceTest);
setupRadioGroup('ProductFileSure', 'ProductFileSure', presetList[presetName].ProductFileSure);
setupRadioGroup('ReportMaterial', 'ReportMaterial', presetList[presetName].ReportMaterial);
setupRadioGroup('GongBoundaryTolerance', 'GongBoundaryTolerance', presetList[presetName].GongBoundaryTolerance);
setupRadioGroup('PanelAppearanceRequire', 'PanelAppearanceRequire', presetList[presetName].PanelAppearanceRequire);
setupRadioGroup('WhitePaperService', 'WhitePaperService', presetList[presetName].WhitePaperService);
setupRadioGroup('IsNoneFont', 'IsNoneFont', presetList[presetName].IsNoneFont);
}
}
< / script >
< / body >
2025-06-04 22:43:00 +08:00
< / html >