Compare commits

..

No commits in common. "3109d28270abacd1eed1cce3544b14c6a985a328" and "273595734097da92d40c72716596101215c4cd89" have entirely different histories.

4 changed files with 43 additions and 100 deletions

View File

@ -1,9 +1,3 @@
# 1.2.0
1. 支持将下单预设内嵌至 PCB
2. 前往下单时将自动导出 Berber 制板文件
3. extension.json 的 engines.eda 字段新增对 V3 的支持
# 1.1.1 # 1.1.1
修复板子大小精度问题,自动识别将保留两位小数 修复板子大小精度问题,自动识别将保留两位小数

View File

@ -1,7 +1,5 @@
# 捷配下单助手 # 捷配下单助手
<img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/klxf/eext-jiepei-helper?style=flat-square&label=Stars"><img alt="GitHub Release" src="https://img.shields.io/github/v/release/klxf/eext-jiepei-helper?style=flat-square&label=Release&color=%233fb950"><img alt="GitHub License" src="https://img.shields.io/github/license/klxf/eext-jiepei-helper?style=flat-square&label=License"><img alt="GitHub Downloads" src="https://img.shields.io/github/downloads/klxf/eext-jiepei-helper/total?style=flat-square&label=Downloads"><img alt="EasyEDA Version" src="https://img.shields.io/badge/dynamic/json?style=flat-square&url=https%3A%2F%2Fraw.githubusercontent.com%2Fklxf%2Feext-jiepei-helper%2Frefs%2Fheads%2Fmaster%2Fextension.json&query=engines.eda&label=EasyEDA&color=5588ff">
一键前往捷配下单 PCB支持保存下单偏好~~这很牛头人了~~ 一键前往捷配下单 PCB支持保存下单偏好~~这很牛头人了~~
## 如何使用 ## 如何使用
@ -16,7 +14,7 @@ _使用本扩展的“检查更新”功能需要给予扩展“外部交互”
**本扩展仅在 PCB 界面激活**,菜单栏中将出现“捷配”菜单,“下单”子菜单为本扩展的主界面。 **本扩展仅在 PCB 界面激活**,菜单栏中将出现“捷配”菜单,“下单”子菜单为本扩展的主界面。
可直接在主界面选择 PCB 生产工艺参数,点击“前往下单”按钮即可前往捷配下单 PCB 页面,同时将自动导出 Berber 制板文件 可直接在主界面选择 PCB 生产工艺参数,点击“前往下单”按钮即可前往捷配下单 PCB 页面。
> [!IMPORTANT] > **下单前务必仔细检查所有项目是否符合预期,捷配官网可能与本扩展显示存在出入,本扩展不对工艺组合可行性进行验证,以捷配官网为准。** > [!IMPORTANT] > **下单前务必仔细检查所有项目是否符合预期,捷配官网可能与本扩展显示存在出入,本扩展不对工艺组合可行性进行验证,以捷配官网为准。**
@ -25,7 +23,6 @@ _使用本扩展的“检查更新”功能需要给予扩展“外部交互”
- 【**新建预设**】在“下单”界面顶部“订单工艺预设”面板新建预设,设置工艺参数与个性化服务选项,点击底部“保存预设”按钮即可保存; - 【**新建预设**】在“下单”界面顶部“订单工艺预设”面板新建预设,设置工艺参数与个性化服务选项,点击底部“保存预设”按钮即可保存;
- 【**使用预设**】在“下单”界面顶部“订单工艺预设”面板选择已有的预设,将自动应用此前保存的参数与个性化选项; - 【**使用预设**】在“下单”界面顶部“订单工艺预设”面板选择已有的预设,将自动应用此前保存的参数与个性化选项;
- 【**删除预设**】在“下单”界面顶部“订单工艺预设”面板选择已有的预设,点击底部“删除预设”按钮即可删除。 - 【**删除预设**】在“下单”界面顶部“订单工艺预设”面板选择已有的预设,点击底部“删除预设”按钮即可删除。
- 【**内嵌预设**】点击“下单”界面底部的“内嵌预设”按钮即可将当前工艺参数保存到 PCB 中。若 PCB 中存在内嵌预设,扩展将自动读取。
本扩展支持自动计算: 本扩展支持自动计算:

View File

@ -3,10 +3,10 @@
"uuid": "817c3321fba54f70b0186500933ed47b", "uuid": "817c3321fba54f70b0186500933ed47b",
"displayName": "捷配下单助手", "displayName": "捷配下单助手",
"description": "一键前往捷配下单 PCB支持保存下单偏好", "description": "一键前往捷配下单 PCB支持保存下单偏好",
"version": "1.2.0", "version": "1.1.1",
"publisher": "Mr_Fang", "publisher": "Mr_Fang",
"engines": { "engines": {
"eda": "^2.3.0 || ^3.0.0" "eda": "^2.3.0"
}, },
"license": "Apache-2.0", "license": "Apache-2.0",
"repository": { "repository": {

View File

@ -855,12 +855,6 @@
> >
删除预设 删除预设
</button> </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="saveToPCB"
>
内嵌预设
</button>
</div> </div>
</div> </div>
@ -1384,18 +1378,6 @@
<script> <script>
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
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); setupRadioGroup('proCategory', 'proCategory', 'fr4Item', updateBoardCraft);
updateBoardCraft(document.getElementById('proCategory').getValue()); updateBoardCraft(document.getElementById('proCategory').getValue());
setupRadioGroup('BoardLayers', 'BoardLayers', '2'); setupRadioGroup('BoardLayers', 'BoardLayers', '2');
@ -1484,6 +1466,8 @@
const WhitePaperService = document.querySelector('input[name="WhitePaperService"]:checked')?.value || ''; const WhitePaperService = document.querySelector('input[name="WhitePaperService"]:checked')?.value || '';
const IsNoneFont = document.querySelector('input[name="IsNoneFont"]:checked')?.value || ''; const IsNoneFont = document.querySelector('input[name="IsNoneFont"]:checked')?.value || '';
// 拼接 urlhttps://www.jiepei.com/pcb/pcbquote?proCategory=fr4Item&BoardHeight=10&BoardWidth=10&num=4&BoardLayers=2&BoardType=set&BoardThickness=2
let url = `https://www.jiepei.com/pcb/pcbquote?proCategory=${encodeURIComponent(proCategory)}&BoardHeight=${encodeURIComponent(boardHeight)}&BoardWidth=${encodeURIComponent(boardWidth)}&num=${encodeURIComponent(num)}&BoardLayers=${encodeURIComponent(boardLayers)}&BoardType=${encodeURIComponent(boardType)}&OrderStage=${encodeURIComponent(orderStage)}`; 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 += mixedCategory ? `&MixedCategory=${encodeURIComponent(mixedCategory)}` : '';
@ -1514,17 +1498,6 @@
url += WhitePaperService ? `&WhitePaperService=${encodeURIComponent(WhitePaperService)}` : ''; url += WhitePaperService ? `&WhitePaperService=${encodeURIComponent(WhitePaperService)}` : '';
url += IsNoneFont ? `&IsNoneFont=${encodeURIComponent(IsNoneFont)}` : ''; url += IsNoneFont ? `&IsNoneFont=${encodeURIComponent(IsNoneFont)}` : '';
// 保存制板文件
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'); // window.open(url, '_blank');
dialog( dialog(
@ -1579,6 +1552,7 @@
}); });
function dialog(title, content, cmd) { function dialog(title, content, cmd) {
// tailwind css 实现,带半透明背景
let dialogHtml = ` let dialogHtml = `
<div class="fixed inset-0 bg-gray-500 bg-opacity-75 transition-opacity z-50" id="dialogOverlay"> <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="flex items-center justify-center min-h-screen">
@ -2024,45 +1998,6 @@
setupRadioGroup('FlyingProbe', 'FlyingProbe', selectedFlyingProbe); setupRadioGroup('FlyingProbe', 'FlyingProbe', selectedFlyingProbe);
setupRadioGroup('SurfaceFinish', 'SurfaceFinish', selectedSurfaceFinish); setupRadioGroup('SurfaceFinish', 'SurfaceFinish', selectedSurfaceFinish);
} }
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> </script>
<script> <script>
@ -2125,7 +2060,43 @@
document.getElementById('savePreset').addEventListener('click', () => { document.getElementById('savePreset').addEventListener('click', () => {
if (presetName) { if (presetName) {
presetList[presetName] = getAllBoardCreaft(); presetList[presetName] = {
proCategory: document.querySelector('input[name="proCategory"]:checked')?.value || '',
BoardHeight: document.getElementById('BoardHeight').value,
BoardWidth: document.getElementById('BoardWidth').value,
num: document.getElementById('num').value,
MixedCategory: document.querySelector('input[name="MixedCategory"]:checked')?.value || '',
BoardLayers: document.querySelector('input[name="BoardLayers"]:checked')?.value || '',
BoardType: document.querySelector('input[name="BoardType"]:checked')?.value || '',
OrderStage: document.querySelector('input[name="OrderStage"]:checked')?.value || '',
BoardThickness: document.querySelector('input[name="BoardThickness"]:checked')?.value || '',
CopperThickness: document.querySelector('input[name="CopperThickness"]:checked')?.value || '',
InnerCopperThickness: document.querySelector('input[name="InnerCopperThickness"]:checked')?.value || '',
AluminumType: document.querySelector('input[name="AluminumType"]:checked')?.value || '',
CopperStructure: document.querySelector('input[name="CopperStructure"]:checked')?.value || '',
Invoice: document.querySelector('input[name="Invoice"]:checked')?.value || '',
SolderColor: document.querySelector('input[name="SolderColor"]:checked')?.value || '',
FontColor: document.querySelector('input[name="FontColor"]:checked')?.value || '',
LineWeight: document.querySelector('input[name="LineWeight"]:checked')?.value || '',
Vias: document.querySelector('input[name="Vias"]:checked')?.value || '',
SolderCover: document.querySelector('input[name="SolderCover"]:checked')?.value || '',
FlyingProbe: document.querySelector('input[name="FlyingProbe"]:checked')?.value || '',
SurfaceFinish: document.querySelector('input[name="SurfaceFinish"]:checked')?.value || '',
ImGoldThinckness: document.querySelector('input[name="ImGoldThinckness"]:checked')?.value || '',
HalfHole: document.querySelector('input[name="HalfHole"]:checked')?.value || '',
HoleThickness_: document.querySelector('input[name="HoleThickness_"]:checked')?.value || '',
ImpedanceSize: document.querySelector('input[name="ImpedanceSize"]:checked')?.value || '',
WithstandVoltage: document.querySelector('input[name="WithstandVoltage"]:checked')?.value || '',
QualityCompensation: document.querySelector('input[name="QualityCompensation"]:checked')?.value || '',
LowResistanceTest: document.querySelector('input[name="LowResistanceTest"]:checked')?.value || '',
ProductFileSure: document.querySelector('input[name="ProductFileSure"]:checked')?.value || '',
ReportMaterial: document.querySelector('input[name="ReportMaterial"]:checked')?.value || '',
GongBoundaryTolerance: document.querySelector('input[name="GongBoundaryTolerance"]:checked')?.value || '',
PanelAppearanceRequire: document.querySelector('input[name="PanelAppearanceRequire"]:checked')?.value || '',
WhitePaperService: document.querySelector('input[name="WhitePaperService"]:checked')?.value || '',
IsNoneFont: document.querySelector('input[name="IsNoneFont"]:checked')?.value || '',
};
eda.sys_Storage.setExtensionUserConfig('PresetList', presetList); eda.sys_Storage.setExtensionUserConfig('PresetList', presetList);
} }
}); });
@ -2142,29 +2113,10 @@
} }
}); });
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() { function showPresetList() {
const presetListContainer = document.getElementById('PresetList'); const presetListContainer = document.getElementById('PresetList');
presetListContainer.innerHTML = ''; // 清空现有内容 presetListContainer.innerHTML = ''; // 清空现有内容
for (const name in presetList) { for (const name in presetList) {
if (name === 'InnerData') continue;
const iconList = { const iconList = {
'fr4Item': '/iframe/img/img_pro_FR4.png', 'fr4Item': '/iframe/img/img_pro_FR4.png',
'rogersItem': '/iframe/img/img_pro_Rogers.png', 'rogersItem': '/iframe/img/img_pro_Rogers.png',