from pathlib import Path
import hashlib,json
folder=Path('C:/kefu/deploy/review-visibility-20260916')
for root in [Path('C:/wechat_rpa'),Path('C:/kefu/wechat_rpa')]:
p=root/'assets/ui/console-app.js';s=p.read_text(encoding='utf-8')
needle='function taskHandoffLabel(task)'
assert s.count(needle)==1
s=s.replace(needle,'''function taskCancelButton(task, label="取消任务"){
return task.deliveryUncertain ? "" : ``;
}
'''+needle)
replacements={
'':'${taskCancelButton(task,"终止本任务")}',
'':'${taskCancelButton(task)}',
' "cancel-task": () => callBridge("cancelTask", key),':''' "cancel-task": () => {
if (STATE.task && STATE.task.key === key && STATE.task.deliveryUncertain) return toast("请先在企业微信核对发送结果,再选择核对后转人工。");
callBridge("cancelTask", key);
},'''
}
for old,new in replacements.items():
assert s.count(old)==1,old
s=s.replace(old,new)
p.write_text(s,encoding='utf-8',newline='\n')
test=folder/'frontend-test.mjs';s=test.read_text(encoding='utf-8')
needle=" await check('可重试生成失败任务提供重试并传递正确key',async()=>{"
assert s.count(needle)==1
s=s.replace(needle,''' await check('未知回执在自动页与队列页只能核对后转人工',async()=>{
for(const view of ['auto','queue']){
const p=await page(view,{task:{...task,awaitingReview:false,needsHuman:true,canRetry:true,deliveryUncertain:true,reviewReason:'发送结果待人工核对'}});
assert.equal(await p.locator('[data-action="approve-task"],[data-action="retry-task"],[data-action="cancel-task"]').count(),0);
assert.equal(await p.locator('[data-action="handoff-task"]').count(),1);
assert.match(await p.locator('[data-action="handoff-task"]').innerText(),/核对后转人工/);await p.close();
}
});
'''+needle)
test.write_text(s,encoding='utf-8')
screens=folder/'frontend-final-screenshots.mjs';s=screens.read_text(encoding='utf-8');s=s.replace('[data-action="approve-task"],[data-action="retry-task"]','[data-action="approve-task"],[data-action="retry-task"],[data-action="cancel-task"]');screens.write_text(s,encoding='utf-8')
manifest=folder/'frontend-files.json';results=json.loads(manifest.read_text(encoding='utf-8'))
for result in results:
for f in result['files']: f['sha256']=hashlib.sha256((Path(result['root'])/f['path']).read_bytes()).hexdigest()
manifest.write_text(json.dumps(results,ensure_ascii=False,indent=2),encoding='utf-8')
print('Hidden uncertain-delivery cancellation in both views and updated manifest.')