eext-jiepei-helper/iframe/order_iframe.html

2249 lines
104 KiB
HTML
Raw Normal View History

<!doctype html>
2025-06-04 22:43:00 +08:00
<html lang="zh-CN">
<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>
<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"
2025-09-27 18:27:53 +08:00
step="0.01"
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"
2025-09-27 18:27:53 +08:00
step="0.01"
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>
<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>
<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
<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>
<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>-->
</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>
<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>
2025-10-13 15:09:02 +08:00
<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="saveToPCB"
>
内嵌预设
</button>
</div>
2025-06-04 22:43:00 +08:00
</div>
<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
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
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
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
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
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
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
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
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
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
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', () => {
2025-10-13 15:09:02 +08:00
eda.pcb_Layer.getAllLayers().then((layers) => {
const data_layer = layers.filter((layer) => layer.id >= 71 && layer.id <= 270 && layer.name.startsWith('【勿动】捷配下单数据'));
if (data_layer.length === 0) {
return;
}
const craft_data = JSON.parse(data_layer[0].name.split('=')[1]);
// console.log(craft_data);
presetList['InnerData'] = craft_data;
autoSetupPreset('InnerData');
eda.sys_Message.showToastMessage('成功读取内嵌预设', 'success');
});
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 || '';
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)}` : '';
2025-10-13 15:09:02 +08:00
// 保存制板文件
eda.pcb_ManufactureData.getGerberFile().then((file) => {
eda.dmt_Board.getCurrentBoardInfo().then((board) => {
const board_name = board.name;
const pcb_name = board.pcb.name;
const date = new Date();
const file_name = `${board_name}_${pcb_name}_${date.getFullYear()}-${date.getMonth()}-${date.getDate()}.zip`;
eda.sys_FileSystem.saveFile(file, file_name);
});
});
// 打开新窗口
// window.open(url, '_blank');
dialog(
'注意',
'下单前务必仔细检查所有项目是否符合预期,捷配官网可能与本扩展显示存在出入,本扩展不对工艺组合可行性进行验证,以捷配官网为准。\n点击确定前往捷配下单。',
`eda.sys_Window.open('${url}', '_blank')`,
);
});
2025-06-04 22:43:00 +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) {
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;
2025-09-27 18:27:53 +08:00
document.getElementById('BoardHeight').value = boardHeight.toFixed(2);
document.getElementById('BoardWidth').value = boardWidth.toFixed(2);
eda.sys_Message.showToastMessage('已自动识别板子大小', 'success');
2025-06-04 22:43:00 +08:00
} else {
eda.sys_Message.showToastMessage('所选图元非板框', 'error');
2025-06-04 22:43:00 +08:00
}
} else if (selectedPrimitives.length === 0) {
eda.sys_Message.showToastMessage('未选择任何图元', 'error');
2025-06-04 22:43:00 +08:00
} else {
eda.sys_Message.showToastMessage('仅支持选择单个图元', 'error');
2025-06-04 22:43:00 +08:00
}
});
},
true,
);
});
function dialog(title, content, cmd) {
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">`;
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>`;
document.body.insertAdjacentHTML('beforeend', dialogHtml);
}
2025-06-04 22:43:00 +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
const radios = container.querySelectorAll(`input[type="radio"][name="${radioName}"]`);
2025-06-04 22:43:00 +08:00
console.log(`Setting up radio group: ${radioName} with initial value: ${initialValue}`);
2025-06-04 22:43:00 +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
}
// 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
}
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>
`;
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>
`;
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>
`;
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>
`;
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>
`;
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>
`;
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>
`;
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>
`;
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>
`;
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>
`;
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>
`;
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>
`;
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>
`;
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
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
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
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
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-10-13 15:09:02 +08:00
function getAllBoardCreaft() {
return {
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 || '',
};
}
</script>
2025-06-04 22:43:00 +08:00
<script>
let presetName = '';
2025-06-04 22:43:00 +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'
}
}*/
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
document.getElementById('savePreset').addEventListener('click', () => {
if (presetName) {
2025-10-13 15:09:02 +08:00
presetList[presetName] = getAllBoardCreaft();
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('错误', '没有选择要删除的预设。');
}
});
2025-10-13 15:09:02 +08:00
document.getElementById('saveToPCB').addEventListener('click', () => {
eda.pcb_Layer.getAllLayers().then(async (layers) => {
const property = {
name: '【勿动】捷配下单数据=' + JSON.stringify(getAllBoardCreaft()),
color: '#881415',
transparency: 100,
};
const data_layer = layers.filter((layer) => layer.id >= 71 && layer.id <= 270 && layer.name.startsWith('【勿动】捷配下单数据'));
const layer = data_layer.length === 0 ? await eda.pcb_Layer.addCustomLayer() : data_layer[0].id;
eda.pcb_Layer.modifyLayer(layer, property).then(() => {
dialog('成功', '已将下单预设内嵌到PCB中请勿删除、修改标有【勿动】字样的层下次打开扩展将自动识别');
});
});
});
function showPresetList() {
const presetListContainer = document.getElementById('PresetList');
presetListContainer.innerHTML = ''; // 清空现有内容
for (const name in presetList) {
2025-10-13 15:09:02 +08:00
if (name === 'InnerData') continue;
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>
`;
// 监听点击 调用 autoSetupPreset 函数
label.addEventListener('click', () => {
presetName = name; // 更新预设名称
autoSetupPreset(name); // 调用自动设置预设函数
});
presetListContainer.appendChild(label);
}
}
document.addEventListener('DOMContentLoaded', () => {
showPresetList();
2025-06-04 22:43:00 +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>