fix(web): 本地优先保存与 design 页体验修复
- 保存先写本地缓存,登录后可选云端同步;退出登录不再因文件操作跳转登录 - 修复 Layui 遮罩残留、design2 保存后线条、toast 被 finally 提前关闭 - 保存过程恢复 loading spinner;成功提示 2.5 秒 - 云端 payload 瘦身与体积超限提示;后端 schema 迁移与 FileService 容错 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -141,10 +141,62 @@
|
||||
setBtnLoading(btn, true, opts.loadingLabel);
|
||||
ret.finally(function () {
|
||||
setBtnLoading(btn, false);
|
||||
if (typeof window.soonCleanupLayerMask === 'function') window.soonCleanupLayerMask();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function layerContentEl(layero) {
|
||||
if (layero && typeof layero.find === 'function') {
|
||||
return layero.find('.layui-layer-content')[0] || null;
|
||||
}
|
||||
if (layero && layero.querySelector) {
|
||||
return layero.querySelector('.layui-layer-content');
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/** 弹窗表单:内容区滚动,保存按钮固定底栏 */
|
||||
function layoutAdminFormModal(contentEl, opts) {
|
||||
if (!contentEl || contentEl.dataset.soonFormLayout) return;
|
||||
opts = opts || {};
|
||||
var root = contentEl.querySelector('.soon-admin-form, .soon-admin-tpl-modal');
|
||||
if (!root) return;
|
||||
|
||||
var foot = root.querySelector('.soon-admin-form__actions, .soon-admin-tpl-modal__actions');
|
||||
if (!foot) {
|
||||
var saveBtn = root.querySelector('#adminModalSave');
|
||||
if (!saveBtn) return;
|
||||
foot = document.createElement('div');
|
||||
foot.className = 'soon-admin-form__actions';
|
||||
saveBtn.parentNode.insertBefore(foot, saveBtn);
|
||||
foot.appendChild(saveBtn);
|
||||
}
|
||||
|
||||
var scroll = document.createElement('div');
|
||||
scroll.className = 'soon-admin-form__scroll';
|
||||
while (root.firstChild && root.firstChild !== foot) {
|
||||
scroll.appendChild(root.firstChild);
|
||||
}
|
||||
if (!scroll.childNodes.length) return;
|
||||
|
||||
root.insertBefore(scroll, foot);
|
||||
root.classList.add('soon-admin-form--modal-shell');
|
||||
foot.classList.add('soon-admin-form__foot');
|
||||
|
||||
contentEl.classList.add('soon-layer-content--form');
|
||||
var area = opts.area || ['420px', 'auto'];
|
||||
if (area[1] && area[1] !== 'auto') {
|
||||
contentEl.classList.add('soon-layer-content--form-fixed');
|
||||
contentEl.style.height = area[1];
|
||||
contentEl.style.maxHeight = area[1];
|
||||
} else if (opts.maxHeight) {
|
||||
contentEl.classList.add('soon-layer-content--form-fixed');
|
||||
contentEl.style.maxHeight = opts.maxHeight;
|
||||
}
|
||||
contentEl.dataset.soonFormLayout = '1';
|
||||
}
|
||||
|
||||
function openFormModal(title, formHtml, onSave, opts) {
|
||||
if (typeof layer === 'undefined') return;
|
||||
opts = opts || {};
|
||||
@@ -156,16 +208,8 @@
|
||||
maxWidth: opts.maxWidth || '96vw',
|
||||
content: formHtml,
|
||||
success: function (layero) {
|
||||
var area = opts.area || ['420px', 'auto'];
|
||||
if (area[1] && area[1] !== 'auto') {
|
||||
var contentEl = null;
|
||||
if (layero && typeof layero.find === 'function') {
|
||||
contentEl = layero.find('.layui-layer-content')[0];
|
||||
} else if (layero && layero.querySelector) {
|
||||
contentEl = layero.querySelector('.layui-layer-content');
|
||||
}
|
||||
if (contentEl) contentEl.classList.add('soon-layer-content--scroll');
|
||||
}
|
||||
var contentEl = layerContentEl(layero);
|
||||
layoutAdminFormModal(contentEl, opts);
|
||||
var btn = document.getElementById('adminModalSave');
|
||||
if (btn) {
|
||||
btn.onclick = function () {
|
||||
|
||||
Reference in New Issue
Block a user