优化调整bug

This commit is contained in:
24kycj
2026-06-30 09:18:08 +08:00
parent ce76bb8018
commit 0f26163ad7
5 changed files with 39 additions and 48 deletions
+35
View File
@@ -0,0 +1,35 @@
---
description: .soon 文件 JSON 契约(与 soonDesign-back / soonWorkerDisk 对齐)
globs:
- frontend-web/js/design1/**
- frontend-web/js/design2/**
- frontend-electron/js/design1/**
- frontend-electron/js/design2/**
- frontend-web/js/common/cloud-files.js
alwaysApply: false
---
# .soon 文件格式(不可擅自变更)
## 权威参考
- 旧版程序:`soonDesign-back/lib/design1/output.js`、`design2/output.js`gitignore,本机对照)
- 下游消费:`soonWorkerDisk/.../workAdd.vue`(依赖 `frontData`、`backData`、`frontDisplayPic` 等)
## 保存契约
`output()` 生成的生产字段与画布字段**必须完整写入**,禁止在 save/upload/session/IDB 路径删除或改名:
- 生产:`frontData`、`backData`、`frontColorPic`、`backColorPic`、`frontBlackPic`、`backBlackPic`、`frontDisplayPic`、`backDisplayPic`、`flag`、`soonType`
- 画布:`f`、`b`、`fo`、`bo`(及旧版可能有的 `fp`、`bp`
保存模式:`Object.assign({ f, b, fo, bo, ... }, op1)` → `JSON.stringify`,与 `soonDesign-back` 一致。
## 禁止
- 保存/上传/缓存前 `delete` 上述生产字段(历史上 `soonStripDesign1HeavyFields` 类逻辑)
- 仅保留 `f/b/fo/bo` 的「精简 .soon」写法
## 加载
`soonNormalizeSoonJson` 只允许补全缺失的 `f/b/fo/bo`(兼容极旧文件),**不得 strip** 生产字段,以便打开后另存仍满足下游。
-18
View File
@@ -115,24 +115,8 @@ function soonDesign1CaptureDiscPng(canvas, outW, outH) {
} }
} }
function soonStripDesign1HeavyFields(con_o) {
if (!con_o) return con_o;
delete con_o.frontColorPic;
delete con_o.backColorPic;
delete con_o.frontBlackPic;
delete con_o.backBlackPic;
delete con_o.frontData;
delete con_o.backData;
delete con_o.backDisplayPic;
if (typeof con_o.frontDisplayPic === 'string' && con_o.frontDisplayPic.length > 120000) {
delete con_o.frontDisplayPic;
}
return con_o;
}
function soonNormalizeSoonJson(j) { function soonNormalizeSoonJson(j) {
if (!j || typeof j !== 'object') return null; if (!j || typeof j !== 'object') return null;
soonStripDesign1HeavyFields(j);
if (!j.f || !j.f.objects || !Array.isArray(j.f.objects)) { if (!j.f || !j.f.objects || !Array.isArray(j.f.objects)) {
if (j.objects && Array.isArray(j.objects) && j.objects.length > 0) { if (j.objects && Array.isArray(j.objects) && j.objects.length > 0) {
j.f = { version: j.version || '4.6.0', objects: j.objects, hoverCursor: j.hoverCursor || 'move' }; j.f = { version: j.version || '4.6.0', objects: j.objects, hoverCursor: j.hoverCursor || 'move' };
@@ -1417,7 +1401,6 @@ function saveAs(op1, callback) {
let con_o = Object.assign(o, op1); let con_o = Object.assign(o, op1);
con_o.soonType = 1; con_o.soonType = 1;
if (typeof window.soonApplySavePreview === 'function') window.soonApplySavePreview(con_o, canvas1); if (typeof window.soonApplySavePreview === 'function') window.soonApplySavePreview(con_o, canvas1);
soonStripDesign1HeavyFields(con_o);
var dialogApi = (typeof dialog !== 'undefined' && dialog) ? dialog : (window.platformBridge && window.platformBridge.showSaveDialog ? { showSaveDialog: function(opts) { return window.platformBridge.showSaveDialog(opts); } } : null); var dialogApi = (typeof dialog !== 'undefined' && dialog) ? dialog : (window.platformBridge && window.platformBridge.showSaveDialog ? { showSaveDialog: function(opts) { return window.platformBridge.showSaveDialog(opts); } } : null);
if (!dialogApi) return; if (!dialogApi) return;
dialogApi.showSaveDialog({ dialogApi.showSaveDialog({
@@ -1485,7 +1468,6 @@ function save(op1, callback) {
let con_o = Object.assign(o, op1); let con_o = Object.assign(o, op1);
con_o.soonType = 1; con_o.soonType = 1;
if (typeof window.soonApplySavePreview === 'function') window.soonApplySavePreview(con_o, canvas1); if (typeof window.soonApplySavePreview === 'function') window.soonApplySavePreview(con_o, canvas1);
soonStripDesign1HeavyFields(con_o);
if (openAs.name != "") { if (openAs.name != "") {
var content = JSON.stringify(con_o); var content = JSON.stringify(con_o);
if (isWebPortal() && openAs.name.indexOf('soondesign_session:') === 0) { if (isWebPortal() && openAs.name.indexOf('soondesign_session:') === 0) {
+1 -1
View File
@@ -1,4 +1,4 @@
(function () { (function () {
'use strict'; 'use strict';
window.SOON_APP_VERSION = 'efeb3bc'; window.SOON_APP_VERSION = 'ce76bb8';
})(); })();
+3 -10
View File
@@ -672,12 +672,9 @@
return j && j.soonType ? j.soonType : (j && j.backBlackPic ? 2 : 1); return j && j.soonType ? j.soonType : (j && j.backBlackPic ? 2 : 1);
} }
/** 兼容旧版 .soon:补全 f/b/fo/bo加载时去掉 output 大图字段 */ /** 兼容旧版 .soon:补全 f/b/fo/bo保留生产字段(frontData 等) */
function soonNormalizeSoonJson(j) { function soonNormalizeSoonJson(j) {
if (!j || typeof j !== 'object') return null; if (!j || typeof j !== 'object') return null;
if (typeof window.soonStripDesign1HeavyFields === 'function') {
window.soonStripDesign1HeavyFields(j);
}
if (!j.f || !j.f.objects || !Array.isArray(j.f.objects)) { if (!j.f || !j.f.objects || !Array.isArray(j.f.objects)) {
if (j.objects && Array.isArray(j.objects) && j.objects.length > 0) { if (j.objects && Array.isArray(j.objects) && j.objects.length > 0) {
j.f = { j.f = {
@@ -731,12 +728,8 @@
if (!normalized) return null; if (!normalized) return null;
var displayName = soonEnsureSoonExt(fileName || 'design.soon'); var displayName = soonEnsureSoonExt(fileName || 'design.soon');
var key = soonMakeSessionKey(displayName); var key = soonMakeSessionKey(displayName);
var slim = Object.assign({}, normalized);
if (typeof window.soonStripDesign1HeavyFields === 'function') {
window.soonStripDesign1HeavyFields(slim);
}
var payload = ''; var payload = '';
try { payload = JSON.stringify(slim); } catch (e) { return null; } try { payload = JSON.stringify(normalized); } catch (e) { return null; }
try { try {
sessionStorage.setItem(key, payload); sessionStorage.setItem(key, payload);
} catch (e) { } catch (e) {
@@ -746,7 +739,7 @@
return null; return null;
} }
} }
return { key: key, slim: slim, displayName: displayName, normalized: normalized }; return { key: key, slim: normalized, displayName: displayName, normalized: normalized };
} }
function soonPutSoonSession(j, fileName) { function soonPutSoonSession(j, fileName) {
-19
View File
@@ -119,23 +119,6 @@ function soonDesign1CaptureDiscPng(canvas, outW, outH) {
} }
} }
/** 本地 .soon 不存 output 大图字段,避免文件过大导致缓存/加载失败 */
function soonStripDesign1HeavyFields(con_o) {
if (!con_o) return con_o;
delete con_o.frontColorPic;
delete con_o.backColorPic;
delete con_o.frontBlackPic;
delete con_o.backBlackPic;
delete con_o.frontData;
delete con_o.backData;
delete con_o.backDisplayPic;
if (typeof con_o.frontDisplayPic === 'string' && con_o.frontDisplayPic.length > 120000) {
delete con_o.frontDisplayPic;
}
return con_o;
}
window.soonStripDesign1HeavyFields = soonStripDesign1HeavyFields;
function soonBuildDesign1SavePreviewPic(canvas) { function soonBuildDesign1SavePreviewPic(canvas) {
var THUMB_MAX = 102400; var THUMB_MAX = 102400;
var c1 = window.canvas1; var c1 = window.canvas1;
@@ -1474,7 +1457,6 @@ function saveAs(op1, callback) {
if (typeof window.soonApplySavePreview === 'function') window.soonApplySavePreview(con_o, canvas1); if (typeof window.soonApplySavePreview === 'function') window.soonApplySavePreview(con_o, canvas1);
if (typeof window.soonRefreshDesignCanvases === 'function') window.soonRefreshDesignCanvases(); if (typeof window.soonRefreshDesignCanvases === 'function') window.soonRefreshDesignCanvases();
con_o.soonType = 1; con_o.soonType = 1;
soonStripDesign1HeavyFields(con_o);
var dialogApi = (typeof dialog !== 'undefined' && dialog) ? dialog : (window.platformBridge && window.platformBridge.showSaveDialog ? { showSaveDialog: function(opts) { return window.platformBridge.showSaveDialog(opts); } } : null); var dialogApi = (typeof dialog !== 'undefined' && dialog) ? dialog : (window.platformBridge && window.platformBridge.showSaveDialog ? { showSaveDialog: function(opts) { return window.platformBridge.showSaveDialog(opts); } } : null);
if (!dialogApi) return; if (!dialogApi) return;
dialogApi.showSaveDialog({ dialogApi.showSaveDialog({
@@ -1544,7 +1526,6 @@ function save(op1, callback) {
if (typeof window.soonApplySavePreview === 'function') window.soonApplySavePreview(con_o, canvas1); if (typeof window.soonApplySavePreview === 'function') window.soonApplySavePreview(con_o, canvas1);
if (typeof window.soonRefreshDesignCanvases === 'function') window.soonRefreshDesignCanvases(); if (typeof window.soonRefreshDesignCanvases === 'function') window.soonRefreshDesignCanvases();
con_o.soonType = 1; con_o.soonType = 1;
soonStripDesign1HeavyFields(con_o);
var content = JSON.stringify(con_o); var content = JSON.stringify(con_o);
var needsDialog = typeof window.soonNeedsSaveDialog === 'function' var needsDialog = typeof window.soonNeedsSaveDialog === 'function'
? window.soonNeedsSaveDialog(openAs.name) ? window.soonNeedsSaveDialog(openAs.name)