fix(编辑器): foreach_account 当容器渲染 —— 就地编辑/通用编辑器都能展开循环里的步骤
用户反馈"你只是打包成了一个动作,里面具体的步骤我也看不到":两个编辑器都把**容器类型写死** 成 loop/group/if_el,新的 foreach_account 被当叶子渲染 → 发布流程整段折叠成一步、改不了。 · release.js:就地编辑的嵌套渲染条件加上 foreach_account(then/else/children 都展开) · editor.js:卡片样式、子步骤渲染、参数表单三处都认 foreach_account(参数:跑哪天/指定日期/ 最多几个号/失败也再试 + 说明"数据源是计划表、不需要账号维护"),并留注释提醒加新容器要改三处 · 实测:把 _rpStepRow/_rpStepRows 抽出来在 node 里跑一遍,循环体与 then/else 全部渲染出来 ✓
This commit is contained in:
+14
-3
@@ -268,7 +268,7 @@ var _stepEditor={
|
||||
var self=this;
|
||||
var lib=_findLib(step.type)||{icon:'?',label:step.type};
|
||||
var card=document.createElement('div');
|
||||
card.className='step-card'+(step.type==='loop'?' loop-block':'')+(step.type==='group'?' group-block':'')+(step.type==='if_el'?' if-block':'');
|
||||
card.className='step-card'+(step.type==='loop'?' loop-block':'')+(step.type==='group'?' group-block':'')+(step.type==='if_el'?' if-block':'')+(step.type==='foreach_account'?' loop-block':'');
|
||||
card.draggable=true;
|
||||
card.dataset.idx=idx;
|
||||
card.dataset.stepId=step.id||'';
|
||||
@@ -316,8 +316,9 @@ var _stepEditor={
|
||||
card.classList.remove('drag-over');
|
||||
self._handleDrop(e,parentArr,idx);
|
||||
});
|
||||
// loop/group 子步骤
|
||||
if(step.type==='loop'||step.type==='group'){
|
||||
// loop/group/foreach_account 子步骤(**容器不列进来就看不到里面** —— 加新容器类型时
|
||||
// 记得同时改这里、card.className 和 _renderParams 三处)
|
||||
if(step.type==='loop'||step.type==='group'||step.type==='foreach_account'){
|
||||
if(step.params&&step.params.children){
|
||||
var childWrap=document.createElement('div');
|
||||
childWrap.className='step-children';
|
||||
@@ -473,6 +474,16 @@ var _stepEditor={
|
||||
'<div class="form-group" data-lmode="rounds" style="display:'+(lm==='rounds'?'block':'none')+'"><label>最大循环次数</label><input type="number" class="form-control" data-key="max_iterations" value="'+(p.max_iterations||10)+'" min="1" max="100000"></div>'+
|
||||
'<div class="form-group" data-lmode="time" style="display:'+(lm==='time'?'block':'none')+'"><label>循环时长(秒)</label><input type="number" class="form-control" data-key="loop_duration" value="'+(p.loop_duration||600)+'" min="1"></div></div>';
|
||||
h+='<div class="help">将下方子步骤循环执行指定轮次/时长;<b>一直循环</b>无限跑直到任务被外部停止——配合调度"定时启动+停止"(如 9:00 启动 / 18:00 停止)实现全天候养号,或配合任务"运行时长上限"自动停止</div>';
|
||||
}else if(step.type==='foreach_account'){
|
||||
// 循环本机待发的号(发布流程的最外层容器):把"跑哪些号"讲清楚,别让人以为是普通循环
|
||||
const fds=(p.date_source==='fixed')?'fixed':'today';
|
||||
h+='<div class="form-row"><div class="form-group"><label>跑哪天的计划</label><select class="form-control" data-key="date_source">'+
|
||||
'<option value="today"'+(fds==='today'?' selected':'')+'>今天</option>'+
|
||||
'<option value="fixed"'+(fds==='fixed'?' selected':'')+'>指定日期</option></select></div>'+
|
||||
'<div class="form-group"><label>指定日期(YYYY-MM-DD,仅上面选"指定日期"时用)</label><input type="text" class="form-control" data-key="fixed_date" value="'+esc(p.fixed_date||'')+'" placeholder="2026-10-12"></div></div>';
|
||||
h+='<div class="form-row"><div class="form-group"><label>最多跑几个号(0=不限)</label><input type="number" class="form-control" data-key="max_accounts" value="'+(p.max_accounts||0)+'" min="0"></div>'+
|
||||
'<div class="form-group form-check" style="align-self:end"><input type="checkbox" data-key="retry_failed" '+(p.retry_failed!==false?'checked':'')+'><label>失败过的也再试</label></div></div>';
|
||||
h+='<div class="help">一轮把本机<b>待发的号</b>跑完:逐个把名字写进"本次要发的名字",执行下方子步骤(切号 → 读名字 → 校验 → 推送 → 发布 → 标记);<b>试过的不回头</b>,跑完/被停/超时/到上限就收工。数据源是<b>计划表</b>(谁还有待发内容谁就在里面),不需要任何账号维护。</div>';
|
||||
}else if(step.type==='group'){
|
||||
h+='<div class="help">动作组:按顺序执行下方子步骤一次。把多个步骤打包成一个可复用的整体。</div>';
|
||||
h+='<div class="form-group"><button class="btn btn-xs btn-primary" onclick="_stepEditor.saveAsCustomAction(\''+esc(step.id||'')+'\')">存为自定义动作</button> <span class="help" style="display:inline">把本组步骤保存到左侧自定义动作库,方便复用</span></div>';
|
||||
|
||||
@@ -876,8 +876,11 @@ function _rpStepRow(s, path, total, idx) {
|
||||
var fields = _RP_FIELDS[s.type] || [];
|
||||
var body = fields.map(function (f) { return _rpField(s.type, p, f, path); }).join('');
|
||||
// 条件判断:命中/未命中两个分支**照样能就地编辑**(发布流程就藏在 then 里)
|
||||
// foreach_account(循环本机待发的号)也是容器 —— 不列进来的话,发布流程整段会被折叠成
|
||||
// 一个"看不见里面"的步骤(实测踩过:用户打开就地编辑发现改不了)
|
||||
var nested = '';
|
||||
if (s.type === 'if_el' || s.type === 'loop' || s.type === 'group') {
|
||||
if (s.type === 'if_el' || s.type === 'loop' || s.type === 'group'
|
||||
|| s.type === 'foreach_account') {
|
||||
[['then', '命中时(then)'], ['else', '没命中时(else)'], ['children', '里面的步骤']].forEach(function (pair) {
|
||||
var k = pair[0];
|
||||
if (!(p[k] instanceof Array)) return;
|
||||
|
||||
Reference in New Issue
Block a user