优化调整bug
This commit is contained in:
@@ -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** 生产字段,以便打开后另存仍满足下游。
|
||||
@@ -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) {
|
||||
if (!j || typeof j !== 'object') return null;
|
||||
soonStripDesign1HeavyFields(j);
|
||||
if (!j.f || !j.f.objects || !Array.isArray(j.f.objects)) {
|
||||
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' };
|
||||
@@ -1417,7 +1401,6 @@ function saveAs(op1, callback) {
|
||||
let con_o = Object.assign(o, op1);
|
||||
con_o.soonType = 1;
|
||||
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);
|
||||
if (!dialogApi) return;
|
||||
dialogApi.showSaveDialog({
|
||||
@@ -1485,7 +1468,6 @@ function save(op1, callback) {
|
||||
let con_o = Object.assign(o, op1);
|
||||
con_o.soonType = 1;
|
||||
if (typeof window.soonApplySavePreview === 'function') window.soonApplySavePreview(con_o, canvas1);
|
||||
soonStripDesign1HeavyFields(con_o);
|
||||
if (openAs.name != "") {
|
||||
var content = JSON.stringify(con_o);
|
||||
if (isWebPortal() && openAs.name.indexOf('soondesign_session:') === 0) {
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
(function () {
|
||||
'use strict';
|
||||
window.SOON_APP_VERSION = 'efeb3bc';
|
||||
window.SOON_APP_VERSION = 'ce76bb8';
|
||||
})();
|
||||
@@ -672,12 +672,9 @@
|
||||
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) {
|
||||
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.objects && Array.isArray(j.objects) && j.objects.length > 0) {
|
||||
j.f = {
|
||||
@@ -731,12 +728,8 @@
|
||||
if (!normalized) return null;
|
||||
var displayName = soonEnsureSoonExt(fileName || 'design.soon');
|
||||
var key = soonMakeSessionKey(displayName);
|
||||
var slim = Object.assign({}, normalized);
|
||||
if (typeof window.soonStripDesign1HeavyFields === 'function') {
|
||||
window.soonStripDesign1HeavyFields(slim);
|
||||
}
|
||||
var payload = '';
|
||||
try { payload = JSON.stringify(slim); } catch (e) { return null; }
|
||||
try { payload = JSON.stringify(normalized); } catch (e) { return null; }
|
||||
try {
|
||||
sessionStorage.setItem(key, payload);
|
||||
} catch (e) {
|
||||
@@ -746,7 +739,7 @@
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return { key: key, slim: slim, displayName: displayName, normalized: normalized };
|
||||
return { key: key, slim: normalized, displayName: displayName, normalized: normalized };
|
||||
}
|
||||
|
||||
function soonPutSoonSession(j, fileName) {
|
||||
|
||||
@@ -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) {
|
||||
var THUMB_MAX = 102400;
|
||||
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.soonRefreshDesignCanvases === 'function') window.soonRefreshDesignCanvases();
|
||||
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);
|
||||
if (!dialogApi) return;
|
||||
dialogApi.showSaveDialog({
|
||||
@@ -1544,7 +1526,6 @@ function save(op1, callback) {
|
||||
if (typeof window.soonApplySavePreview === 'function') window.soonApplySavePreview(con_o, canvas1);
|
||||
if (typeof window.soonRefreshDesignCanvases === 'function') window.soonRefreshDesignCanvases();
|
||||
con_o.soonType = 1;
|
||||
soonStripDesign1HeavyFields(con_o);
|
||||
var content = JSON.stringify(con_o);
|
||||
var needsDialog = typeof window.soonNeedsSaveDialog === 'function'
|
||||
? window.soonNeedsSaveDialog(openAs.name)
|
||||
|
||||
Reference in New Issue
Block a user