release: v2.2.8 [2026-06-16 15:53:20]

### 新功能
- **填表记录 · 版本恢复**(填表设置面板「回退重填」旁新增「填表记录」按钮):针对"模型填表前把整张表删空 / 误删大量内容"的反馈,提供一键找回。
  - **零新存储**:直接复用各楼层 `extra.amily2_tables_data` 里逐轮继承的表格快照——历史本就在聊天中,无需另建存储或元数据
  - 点开列出所有带快照的楼层(最新在上),可**展开预览**每一版的表格内容(CSV)后再决定
  - **恢复某版本**:把该楼层快照设为当前状态,并清除其**之后**所有楼层的快照与填表标记 hash——使该版本成为最新有效状态,后续楼层下轮自动重填会从恢复点往前重建(赌模型不再抽风)
  - 「回退重填」按钮保留,但版本恢复是更安全的找回路径
### 重构
- 抽出 `_normalizeTableState` 共用旧存档字段归一逻辑,`loadTables` 与"恢复快照"复用,消除重复
---
This commit is contained in:
Jenkins CI
2026-06-16 15:53:20 +08:00
parent cc6618a493
commit 4b2229f0f4
14 changed files with 213 additions and 329 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
const a0_0xb649e2=a0_0x375c;(function(_0x64334b,_0x15b67e){const _0x4e79ff=a0_0x375c,_0x2b2857=_0x64334b();while(!![]){try{const _0x4901eb=parseInt(_0x4e79ff(0x123,'2@lL'))/0x1+parseInt(_0x4e79ff(0x122,'0Kh&'))/0x2*(parseInt(_0x4e79ff(0x124,'o(#F'))/0x3)+-parseInt(_0x4e79ff(0x129,'376W'))/0x4+-parseInt(_0x4e79ff(0x11a,'Iv5i'))/0x5+parseInt(_0x4e79ff(0x12f,'W(LY'))/0x6+-parseInt(_0x4e79ff(0x12e,'NgGk'))/0x7+-parseInt(_0x4e79ff(0x121,'*K2g'))/0x8;if(_0x4901eb===_0x15b67e)break;else _0x2b2857['push'](_0x2b2857['shift']());}catch(_0x464eb2){_0x2b2857['push'](_0x2b2857['shift']());}}}(a0_0x1872,0xd8973));function a0_0x375c(_0xfe4ae7,_0x41e131){_0xfe4ae7=_0xfe4ae7-0x11a;const _0x1872bb=a0_0x1872();let _0x375c7d=_0x1872bb[_0xfe4ae7];if(a0_0x375c['bBaMZB']===undefined){var _0x434c9a=function(_0x2af3e1){const _0x53693e='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x568539='',_0x5ae763='';for(let _0xcab226=0x0,_0x16a280,_0x5d9229,_0x12dc01=0x0;_0x5d9229=_0x2af3e1['charAt'](_0x12dc01++);~_0x5d9229&&(_0x16a280=_0xcab226%0x4?_0x16a280*0x40+_0x5d9229:_0x5d9229,_0xcab226++%0x4)?_0x568539+=String['fromCharCode'](0xff&_0x16a280>>(-0x2*_0xcab226&0x6)):0x0){_0x5d9229=_0x53693e['indexOf'](_0x5d9229);}for(let _0x212fc8=0x0,_0x4713a8=_0x568539['length'];_0x212fc8<_0x4713a8;_0x212fc8++){_0x5ae763+='%'+('00'+_0x568539['charCodeAt'](_0x212fc8)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x5ae763);};const _0x57e4d6=function(_0x4726f5,_0x1b6168){let _0x29f827=[],_0x17d8d2=0x0,_0x1b4437,_0x134a1e='';_0x4726f5=_0x434c9a(_0x4726f5);let _0x12be5b;for(_0x12be5b=0x0;_0x12be5b<0x100;_0x12be5b++){_0x29f827[_0x12be5b]=_0x12be5b;}for(_0x12be5b=0x0;_0x12be5b<0x100;_0x12be5b++){_0x17d8d2=(_0x17d8d2+_0x29f827[_0x12be5b]+_0x1b6168['charCodeAt'](_0x12be5b%_0x1b6168['length']))%0x100,_0x1b4437=_0x29f827[_0x12be5b],_0x29f827[_0x12be5b]=_0x29f827[_0x17d8d2],_0x29f827[_0x17d8d2]=_0x1b4437;}_0x12be5b=0x0,_0x17d8d2=0x0;for(let _0x5c5d1a=0x0;_0x5c5d1a<_0x4726f5['length'];_0x5c5d1a++){_0x12be5b=(_0x12be5b+0x1)%0x100,_0x17d8d2=(_0x17d8d2+_0x29f827[_0x12be5b])%0x100,_0x1b4437=_0x29f827[_0x12be5b],_0x29f827[_0x12be5b]=_0x29f827[_0x17d8d2],_0x29f827[_0x17d8d2]=_0x1b4437,_0x134a1e+=String['fromCharCode'](_0x4726f5['charCodeAt'](_0x5c5d1a)^_0x29f827[(_0x29f827[_0x12be5b]+_0x29f827[_0x17d8d2])%0x100]);}return _0x134a1e;};a0_0x375c['tIPMZJ']=_0x57e4d6,a0_0x375c['KrDxKH']={},a0_0x375c['bBaMZB']=!![];}const _0x202817=_0x1872bb[0x0],_0x30662f=_0xfe4ae7+_0x202817,_0x4ee7bd=a0_0x375c['KrDxKH'][_0x30662f];return!_0x4ee7bd?(a0_0x375c['aWuRyq']===undefined&&(a0_0x375c['aWuRyq']=!![]),_0x375c7d=a0_0x375c['tIPMZJ'](_0x375c7d,_0x41e131),a0_0x375c['KrDxKH'][_0x30662f]=_0x375c7d):_0x375c7d=_0x4ee7bd,_0x375c7d;}export const SENSITIVE_KEYS=new Set([a0_0xb649e2(0x11c,'F9V%'),a0_0xb649e2(0x125,'va[)'),a0_0xb649e2(0x120,'Qj(P'),a0_0xb649e2(0x127,'JAUQ'),a0_0xb649e2(0x11f,'A@1$'),a0_0xb649e2(0x11b,'^bc9'),a0_0xb649e2(0x11d,'vtUq'),a0_0xb649e2(0x128,'jLPT')]);function a0_0x1872(){const _0x2fc826=['W4FcGxFcRqfMvLabjCoFt8o3','W6VcVmkcr1nspxJdMeScsmkJ','W7q1W4f+W6ZdMSoZWPnUfa','oYtcSmkHWO7dQX81W7VcRrvGoW','W4auAIqcW653W4v1W7RdRSk7oW','ECoXbSoTBqZcP8orfbJcNSowWOq','W5NdTmoNWOv9CghdSCkFWOiDluxdSa','CmoisdiNW5akz8oud8oUemkDWOG','W5RdTmoNWOKlnqVcRCkyWPu','W61JW6JcKYuQW5iQaSk6W7ddRGm','WOe0W4nmfSkpxmo4yI4','W51eWOxcTSogdG','Fmo+tKpcIWLIdJ8sW5i','WR3dTMhcTGmVB8oFj8kZW4rZW78','WQhcVGKVWPNcK8oTWRTcFW','WOXMyCokuNOtkCkQWRvDW7e/pshdTCkpW5BcPmkziNyajW','a8kXc8oUW6RcH8kFyCk7bSkPWOTR','ASkdW4LLbfxcVCkVD8oE','CLBdJZNdUCoPW4zXWOu5WQmcDq','WPFcKmk0WR7dKJvedCksva','pqOGtCopgNNdJSocvZZdVSkWWOi','CmomtJmJW58joSoKa8otdSkD','v3bmdxL7cI0jW54','WRZdKmkYfmolWOumWRybWRO'];a0_0x1872=function(){return _0x2fc826;};return a0_0x1872();}
function a0_0x52b1(){const _0xd37076=['WONcMJepW5ddVmoQW4/dKW','W6bbWPFdUtVdKSoUyx9D','WOfaWQD7WRu4wwDwySknEIif','ffeQumohWPVdRs4elcLR','WOekBb9wW57dKrddPMK','tHe+WOC2W7PvmGC+u2O','W74gWPeSW5TkW6nvcq','DCkAyIWGWOldQMG9W7GC','wSo0xCoZvfJcICoq','W6iOWQNcMCoOqbddPSoAW4m','dCoAWOhcPSoTWRVdSKvFW5Wmza','WPjBWQPqWPS4rgDCD8kD','uvv4WQKrW5mKnSoDWRdcHCoD','krRcKmowsmouWRBcUGBdLG','kHhdKCkYBmoaWP3cVa','CvldN8kpwmouWOFcSXtdMq','n8knWRnqaLFcQSojp8ovWPu','WOPDwYbiW67cSSk6W5/cONpcVa','WOSbne1SW7ldLG4','WQnOW73dJmo4qchdR8oiW4W','WP7cMSoGW51ctW','db1jB207fw9+qW','wmo/hmkqv0VcNmo/WQqv','jmkiW5bGWOFdTNRcTarLWQ3dPq','gmouW4JcV8ogA8kR','WOSVld3dIrtdSJO','yfu9fqSulSkrFMu','evuPumohW6BdUZ49pce','rmkTWPq6f8kLqHTHW7a','fsPvmCkAW4VdIa','A0/dICktvSouWPRcPXldJ8oOWOP1kwFcJSoEW6Okv8oHWP7dQmkO','W4JdMmk8WQqtFKddN8kMW5VdLW'];a0_0x52b1=function(){return _0xd37076;};return a0_0x52b1();}const a0_0x5edefc=a0_0x27d2;(function(_0x2a6ff8,_0x2953c4){const _0x4c335f=a0_0x27d2,_0x2d6240=_0x2a6ff8();while(!![]){try{const _0x240138=parseInt(_0x4c335f(0xc2,'83G$'))/0x1*(parseInt(_0x4c335f(0xca,'^1hT'))/0x2)+parseInt(_0x4c335f(0xc8,'s@^U'))/0x3*(parseInt(_0x4c335f(0xcf,'GsZY'))/0x4)+-parseInt(_0x4c335f(0xd5,'JWGl'))/0x5+parseInt(_0x4c335f(0xb8,'K3ad'))/0x6*(-parseInt(_0x4c335f(0xba,'5ZFa'))/0x7)+-parseInt(_0x4c335f(0xcc,'6^Fy'))/0x8*(-parseInt(_0x4c335f(0xb9,'*qZ^'))/0x9)+-parseInt(_0x4c335f(0xbc,'7#m&'))/0xa+parseInt(_0x4c335f(0xd0,'tzZ$'))/0xb*(parseInt(_0x4c335f(0xb7,'GnzQ'))/0xc);if(_0x240138===_0x2953c4)break;else _0x2d6240['push'](_0x2d6240['shift']());}catch(_0x19b045){_0x2d6240['push'](_0x2d6240['shift']());}}}(a0_0x52b1,0x1a7fb));function a0_0x27d2(_0x7f6faa,_0x5078bf){_0x7f6faa=_0x7f6faa-0xb6;const _0x52b182=a0_0x52b1();let _0x27d26a=_0x52b182[_0x7f6faa];if(a0_0x27d2['eeXoyz']===undefined){var _0xf635d3=function(_0x49dd8d){const _0xea134='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x5673b7='',_0x33abbd='';for(let _0x12e284=0x0,_0x1efb0a,_0x43c6f8,_0x26875d=0x0;_0x43c6f8=_0x49dd8d['charAt'](_0x26875d++);~_0x43c6f8&&(_0x1efb0a=_0x12e284%0x4?_0x1efb0a*0x40+_0x43c6f8:_0x43c6f8,_0x12e284++%0x4)?_0x5673b7+=String['fromCharCode'](0xff&_0x1efb0a>>(-0x2*_0x12e284&0x6)):0x0){_0x43c6f8=_0xea134['indexOf'](_0x43c6f8);}for(let _0x418151=0x0,_0x3de863=_0x5673b7['length'];_0x418151<_0x3de863;_0x418151++){_0x33abbd+='%'+('00'+_0x5673b7['charCodeAt'](_0x418151)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x33abbd);};const _0x46b7dc=function(_0x505ea4,_0x3aaa3c){let _0xe27959=[],_0x4d9ac4=0x0,_0x369750,_0x409727='';_0x505ea4=_0xf635d3(_0x505ea4);let _0x19f0a7;for(_0x19f0a7=0x0;_0x19f0a7<0x100;_0x19f0a7++){_0xe27959[_0x19f0a7]=_0x19f0a7;}for(_0x19f0a7=0x0;_0x19f0a7<0x100;_0x19f0a7++){_0x4d9ac4=(_0x4d9ac4+_0xe27959[_0x19f0a7]+_0x3aaa3c['charCodeAt'](_0x19f0a7%_0x3aaa3c['length']))%0x100,_0x369750=_0xe27959[_0x19f0a7],_0xe27959[_0x19f0a7]=_0xe27959[_0x4d9ac4],_0xe27959[_0x4d9ac4]=_0x369750;}_0x19f0a7=0x0,_0x4d9ac4=0x0;for(let _0x5d373e=0x0;_0x5d373e<_0x505ea4['length'];_0x5d373e++){_0x19f0a7=(_0x19f0a7+0x1)%0x100,_0x4d9ac4=(_0x4d9ac4+_0xe27959[_0x19f0a7])%0x100,_0x369750=_0xe27959[_0x19f0a7],_0xe27959[_0x19f0a7]=_0xe27959[_0x4d9ac4],_0xe27959[_0x4d9ac4]=_0x369750,_0x409727+=String['fromCharCode'](_0x505ea4['charCodeAt'](_0x5d373e)^_0xe27959[(_0xe27959[_0x19f0a7]+_0xe27959[_0x4d9ac4])%0x100]);}return _0x409727;};a0_0x27d2['kwStbR']=_0x46b7dc,a0_0x27d2['qJYIcm']={},a0_0x27d2['eeXoyz']=!![];}const _0x51d4f9=_0x52b182[0x0],_0xd9b4c1=_0x7f6faa+_0x51d4f9,_0x206bda=a0_0x27d2['qJYIcm'][_0xd9b4c1];return!_0x206bda?(a0_0x27d2['awqulf']===undefined&&(a0_0x27d2['awqulf']=!![]),_0x27d26a=a0_0x27d2['kwStbR'](_0x27d26a,_0x5078bf),a0_0x27d2['qJYIcm'][_0xd9b4c1]=_0x27d26a):_0x27d26a=_0x206bda,_0x27d26a;}export const SENSITIVE_KEYS=new Set([a0_0x5edefc(0xc4,'GsZY'),a0_0x5edefc(0xd2,'HfIc'),a0_0x5edefc(0xce,'nR^)'),a0_0x5edefc(0xc5,'W!bX'),a0_0x5edefc(0xd1,'GKSy'),a0_0x5edefc(0xbf,'nR^)'),a0_0x5edefc(0xbb,'HfIc'),a0_0x5edefc(0xc3,'*qZ^')]);