编辑页面

修改后将从当前时间重新计算过期时间
`;(document.querySelector('.phone')||document.body).appendChild(d);d.onclick=e=>{if(e.target===d)d.remove()};d.querySelector('[data-close-feedback]').onclick=()=>d.remove();d.querySelector('[data-submit-feedback]').onclick=()=>{d.remove();toast('反馈已提交,感谢你的建议')}}; const icons={paper:'📦',plastic:'🧴',metal:'🥫',cloth:'👕'}; // ---------------- USER MINI PROGRAM ---------------- const user={page:'home',scanStep:'category',device:'community',category:'',recordTab:'all',recordBackPage:'records',rewardListBackPage:'rewards'}; const userNav=(key)=>``; function phone(content,nav='home',theme=''){return `${topbar(theme?'driver':'user')}
${statusbar()}${content}
${userNav(nav)}
`} function userHome(){return `
下午好,

今天也一起变绿吧

附近设备正常运行中

扫一扫,开启
绿色投递

附近设备

3 台可投递 · 1 台异常
${nearbyDevice('阳光花园 2号智能柜','距您 12 米','纸类 72% · 塑料 46% · 金属 32%','推荐','72')}${nearbyDevice('青年公寓 1号柜','距您 480 米','纸类 95% · 塑料 38% · 衣物 64%','纸类将满','95','warning')}${nearbyDevice('江城大学 1号回收仓','距您 860 米','高校仓 · 4 个回收口开放','在线','58')}${nearbyDevice('春华社区 1号柜','距您 1.2 km','设备离线 · 暂停投递服务','异常','0','danger')}

我的环保账单

累计回收26.8 kg
环保收益¥ 18.62
减少碳排15.4 kg

最近投递

${recordCard('paper','纸类','今天 08:42 · 阳光花园 2号柜','3.20 kg','+ ¥2.56','已确认',0)}${recordCard('plastic','塑料','7月4日 19:16 · 阳光花园 2号柜','1.05 kg','待复核','待审核',1)}
💡 投递小贴士

投递前请倒掉容器内液体、保持物品干燥。干净分类,奖励更多。

`} function nearbyDevice(name,dist,meta,status,cap,tone=''){const bad=tone==='danger';return `
${bad?'!':'♻'}

${name}

${dist} · ${meta}

${status}
${bad?'不可投递':`${cap}% 最高仓位`}
`} function recordCard(icon,name,meta,weight,reward,status,id=null){const cls=status==='已确认'?'':status==='异常'?'danger':'warning';const tag=id===null?'div':'button';const attr=id===null?'':` data-record-id="${id}"`;return `<${tag} class="record-card ${id===null?'':'record-card-link'}"${attr}>
${icons[icon]}
${name}

${meta}

${weight}${reward}
${id===null?'':''}`} function userScan(){if(user.scanStep==='ai')return userAi();if(user.scanStep==='success')return userSuccess();const uni=user.device==='university';return `

扫码投递

1识别设备
2选择品类
3AI 预检
4完成投递
${uni?'🏫':'♻'}

${uni?'江城大学 1号回收仓':'阳光花园 · 2号智能柜'}

设备在线 · ${uni?'南门生活区回收站':'距您 12 米'}

● 在线

选择投递品类

单次限选 1 类
${category('paper','纸类',uni?'回收口 A · 2.30 元/kg':'1号仓 · 0.80 元/kg','72%')}${category('plastic','塑料',uni?'回收口 B · 1.50 元/kg':'2号仓 · 1.20 元/kg','46%')}${category('metal','金属',uni?'回收口 C · 4.20 元/kg':'3号仓 · 3.50 元/kg','32%')}${category('cloth','衣物',uni?'暂不可投递':'4号仓已满','95%',true)}
投递前请确认

物品内无液体、残渣、易燃易爆品或有害垃圾。系统将在开启${uni?'回收口':'仓门'}前进行 AI 检查。

`} function category(id,name,desc,cap,disabled=false){return ``} function userAi(){return `

AI 智能预检

识别设备
选择品类
3AI 预检
4完成投递

正在识别投递物

请将物品放在摄像头前并保持稳定
系统正在检查品类与禁放物…

预计 2 秒内完成
目标品类${icons[user.category]} ${{paper:'纸类',plastic:'塑料',metal:'金属'}[user.category]}
`} function userSuccess(){const uni=user.device==='university';return `

投递完成

感谢你的绿色行动

${uni?'输送带已将物品送至纸类主区域':'仓门已安全关闭,本次投递已记录'}

+2.56

预估奖励,云端复核后到账

3.20 kg有效重量
纸类投递品类
待复核当前状态

记录编号:TD2026070600842
投递设备:${uni?'江城大学 1号回收仓':'阳光花园 2号智能柜'}

`} const userRecordTabs=[['all','全部'],['pending','待审核'],['confirmed','已确认'],['abnormal','异常']]; const userRecordData=[['2026年7月','paper','纸类','今天 08:42 · 阳光花园 2号柜','3.20 kg','+ ¥2.56','已确认'],['2026年7月','plastic','塑料','7月4日 19:16 · 阳光花园 2号柜','1.05 kg','待复核','待审核'],['2026年7月','metal','金属','7月2日 12:05 · 江城大学回收仓','2.18 kg','+ ¥7.63','已确认'],['2026年7月','plastic','塑料','7月1日 09:26 · 青年公寓 1号柜','0.42 kg','识别异常','异常'],['2026年6月','cloth','衣物','6月26日 10:31 · 阳光花园 1号柜','4.30 kg','+ ¥2.15','已确认'],['2026年6月','paper','纸类','6月18日 17:20 · 江城大学回收仓','5.66 kg','+ ¥4.52','已确认']]; function userRecords(){const filter=user.recordTab;const rows=userRecordData.filter(r=>filter==='all'||(filter==='pending'&&r[6]==='待审核')||(filter==='confirmed'&&r[6]==='已确认')||(filter==='abnormal'&&r[6]==='异常'));const grouped=rows.reduce((acc,r)=>{(acc[r[0]] ||= []).push(r);return acc},{});const list=rows.length?Object.entries(grouped).map(([month,items])=>`

${month} · ${items.length} 条记录

${items.map(r=>recordCard(r[1],r[2],r[3],r[4],r[5],r[6],userRecordData.indexOf(r))).join('')}`).join(''):`

暂无记录

当前状态下还没有投递记录

`;return `
绿色足迹

投递记录

${userRecordTabs.map(([id,label])=>``).join('')}
${list}
`} function userRecordDetail(){const r=userRecordData[user.recordId]||userRecordData[0];const cls=r[6]==='已确认'?'':r[6]==='异常'?'danger':'warning';const result=r[6]==='已确认'?'云端复核通过,奖励已入账':r[6]==='异常'?'AI 识别存在异常,记录已提交人工复核':'云端正在复核重量与品类,预计 24 小时内完成';return `

投递详情

${r[6]}#TD${String(202607070001+Number(user.recordId||0))}
${icons[r[1]]}

${r[2]}

${r[3]}

${r[4]}投递重量
${r[5]}奖励状态
${r[2]}投递品类

${result}

处理进度

${r[5]}
${route('1','用户完成投递','设备已关门并生成投递记录','done')}${route('2','AI 识别与称重',`${r[2]} · ${r[4]} · ${r[6]==='异常'?'需人工确认':'系统已完成检测'}`,'done')}${route('3','云端复核',result,r[6]==='待审核'?'current':'done')}
投递凭证

设备抓拍 1 张 · 称重记录已同步 · ${r[6]==='异常'?'异常原因待平台确认':'回收数据已计入环保账单'}

`} function userRewards(){return `
个人中心

我的收益

可提现余额(元)

18.62

累计收益 ¥45.36待入账 ¥2.56

环保成就

Lv.3 绿芽达人
累计投递18
回收重量26.8 kg
连续参与7

我的服务

本月收益明细

${recordCard('paper','纸类奖励','今天 08:42 · 云端复核通过','3.20 kg','+ ¥2.56','已确认',0)}${recordCard('metal','金属奖励','7月2日 12:05 · 云端复核通过','2.18 kg','+ ¥7.63','已确认',2)}
`} function userRewardList(){const rows=userRecordData.map((r,i)=>[r,i]).filter(([r])=>r[6]==='已确认');return `
个人中心

收益明细

本月已入账(元)

16.86

${rows.length} 笔收益待入账 ¥2.56

全部明细

2026年7月
${rows.map(([r,i])=>recordCard(r[1],`${r[2]}奖励`,`${r[3]} · 云端复核通过`,r[4],r[5],r[6],i)).join('')}
`} function renderUser(){const content=user.page==='home'?userHome():user.page==='scan'?userScan():user.page==='records'?userRecords():user.page==='recordDetail'?userRecordDetail():user.page==='rewardList'?userRewardList():userRewards();app.innerHTML=phone(content,user.page==='scan'?'home':user.page==='recordDetail'?user.recordBackPage:user.page==='rewardList'?user.rewardListBackPage:user.page);bindUser();if(user.page==='scan'&&user.scanStep==='ai')setTimeout(()=>{if(user.scanStep==='ai'){user.scanStep='success';renderUser()}},2100)} function bindUser(){$$('[data-upage]').forEach(b=>b.onclick=()=>{user.page=b.dataset.upage;renderUser()});$$('[data-record-tab]').forEach(b=>b.onclick=()=>{user.recordTab=b.dataset.recordTab;renderUser()});$$('[data-record-id]').forEach(b=>b.onclick=()=>{user.recordId=b.dataset.recordId;user.recordBackPage=user.page==='home'?'home':user.page==='rewards'?'rewards':user.page==='rewardList'?'rewardList':'records';user.page='recordDetail';renderUser()});$$('[data-action]').forEach(b=>b.onclick=()=>{const a=b.dataset.action;if(a==='scan'){user.page='scan';user.scanStep='category'}if(a==='device-error'){infoDialog('!','设备暂不可用','设备离线,已通知运维处理,暂不可投递');return}if(a==='profile-info'){infoDialog('👤','个人资料','林小满 · 139****4821 · Lv.3 绿芽达人');return}if(a==='feedback'){feedbackDialog();return}if(a==='about-us'){infoDialog('ⓘ','关于我们','绿循智能回收提供社区柜、高校仓、AI 预检与环保奖励服务。');return}if(a==='customer-service'){callDialog('400-800-2676','正在拨打客服');setTimeout(()=>{location.href='tel:4008002676'},350);return}if(a==='back-home'||a==='close-success')user.page='home';if(a==='back-rewards')user.page=user.rewardListBackPage||'rewards';if(a==='show-reward-list'){user.rewardListBackPage=user.page||'rewards';user.page='rewardList'}if(a==='back-records')user.page=user.recordBackPage||'records';if(a==='back-category')user.scanStep='category';if(a==='ai-check')user.scanStep='ai';if(a==='withdraw')toast('提现申请已提交,预计 1 个工作日到账');renderUser()});$$('[data-device]').forEach(b=>b.onclick=()=>{user.device=b.dataset.device;user.category='';renderUser()});$$('[data-category]').forEach(b=>b.onclick=()=>{user.category=b.dataset.category;renderUser()})} // ---------------- DRIVER MINI PROGRAM ---------------- const driver={page:'tasks',task:null,taskFilter:'recommend',accepted:false,stage:0,uploaded:false,currentStage:1,currentUploaded:false,currentDone:false}; const driverNav=(key)=>``; function driverPhone(content,nav='tasks'){return `${topbar('driver')}
${statusbar()}${content}
${driverNav(nav)}
`} const driverTaskData={recommend:[['QY260706-031','光谷片区 · 纸类合并清运','阳光花园 → 青年公寓 → 江城大学','1.42 t',3,'推荐'],['QY260706-028','江城大学 · 塑料区紧急清运','江城大学南门生活区回收仓','0.68 t',1,'紧急'],['QY260706-024','阳光花园 · 衣物仓清运','阳光花园社区东门','0.36 t',1,'普通']],nearby:[['QY260706-041','青年公寓 · 纸类仓清运','距当前位置 0.8 km · 青年公寓北门','0.31 t',1,'最近'],['QY260706-024','阳光花园 · 衣物仓清运','距当前位置 1.1 km · 阳光花园社区东门','0.36 t',1,'普通'],['QY260706-031','光谷片区 · 纸类合并清运','距首站 1.2 km · 阳光花园 → 青年公寓','1.42 t',3,'推荐']],urgent:[['QY260706-028','江城大学 · 塑料区紧急清运','江城大学南门生活区回收仓 · 满仓 97%','0.68 t',1,'紧急'],['QY260706-046','湖畔新城 · 纸类满仓清运','湖畔新城 1号柜 · 满仓 100%','0.54 t',1,'紧急']],merge:[['QY260706-031','光谷片区 · 纸类合并清运','阳光花园 → 青年公寓 → 江城大学','1.42 t',3,'可合并'],['QY260706-052','未来城片区 · 金属合并清运','未来城 1号柜 → 未来城 2号柜','0.82 t',2,'可合并']]}; const driverFilterLabels={recommend:'智能推荐 3',nearby:'距我最近',urgent:'紧急任务',merge:'可合并'}; function taskCard(id,title,addr,weight,stops,urgency='普通'){return `
${urgency}#${id}

${title}

${addr}

${weight}预计重量
${stops} 站清运站点
${stops>1?'42':'18'} min预计用时
`} function taskFilterButton(key){return ``} function driverTasks(){const tasks=driverTaskData[driver.taskFilter]||driverTaskData.recommend;return `
星期二 · 7月7日

待接任务

今日运力

1.26 / 2.0 吨

● 在线接单

当前车辆 · 鄂A·76Q28 · 厢式货车

${['recommend','nearby','urgent','merge'].map(taskFilterButton).join('')}
${tasks.map(t=>taskCard(...t)).join('')}
`} function driverDetail(){if(driver.task==='QY260706-036')return currentTaskDetail();if(driver.task&&driver.task.startsWith('history:'))return historyTaskDetail(driver.task.replace('history:',''));const active=driver.accepted;return `

${active?'执行清运':'任务详情'}

${active?'清运中':'待接单'}#QY260706-031

光谷片区 · 纸类合并清运

系统已按距离、载重与满仓等级生成最优顺序

1.42 t预计重量
28.6 km全程距离
42 min预计用时

清运路线

${route('1','阳光花园 2号智能柜','纸类仓 · 0.46 t · 满仓 98%',driver.stage>0?'done':driver.stage===0&&active?'current':'')}${route('2','青年公寓 1号智能柜','纸类仓 · 0.31 t · 满仓 95%',driver.stage>1?'done':driver.stage===1?'current':'')}${route('3','江城大学 1号回收仓','纸类 A区 · 0.65 t · 待清运',driver.stage>2?'done':driver.stage===2?'current':'')}
${active?driverActionPanel():`
装载率预测 93%

任务完成后预计装载 1.86 吨,符合满车优先策略。

`}
`} function route(no,title,meta,state){return `
${state==='done'?'✓':no}
${title}

${meta}

${state==='done'?'已完成清运':state==='current'?'当前站点 · 距离 1.2 km':'待前往'}
`} function driverActionPanel(){if(driver.stage>=3)return `
全部站点清运完成

实际清运 1.39 吨,设备状态已同步恢复

`;return `

当前站点操作

第 ${driver.stage+1} / 3 站
${driver.uploaded?'✓ 现场照片已上传(2 张)':'+ 点击上传清运前后照片'}
`} function currentTaskActionPanel(){if(driver.currentStage>=2)return `
全部站点清运完成

实际清运 0.81 吨,金属仓容量已同步恢复

`;return `

当前站点操作

第 ${driver.currentStage+1} / 2 站
${driver.currentUploaded?'✓ 现场照片已上传(2 张)':'+ 点击上传清运前后照片'}
`} function currentTaskDetail(){return `

执行清运

清运中#QY260706-036

未来城片区 · 金属仓清运

调度已锁定两站路线,当前前往未来城 2号智能柜

0.82 t预计重量
12.4 km全程距离
26 min预计用时

清运路线

${route('1','未来城 1号智能柜','金属仓 · 0.32 t · 已清运',driver.currentStage>0?'done':'current')}${route('2','未来城 2号智能柜','金属仓 · 0.50 t · 满仓 91%',driver.currentStage>1?'done':driver.currentStage===1?'current':'')}
${currentTaskActionPanel()}
`} function currentTaskCard(id,title,addr,weight,stops,eta){return `
清运中#${id}

${title}

${addr}

${weight}预计重量
${stops} 站清运站点
${eta}预计用时
`} function driverCurrent(){const acceptedTask=driver.accepted?`
${taskCard('QY260706-031','光谷片区 · 纸类合并清运','已完成 ${driver.stage}/3 站 · 当前距站点 1.2 km','1.42 t',3,'清运中')}
`:'';const currentTask=driver.currentDone?`

暂无更多进行中任务

刚完成的清运任务已同步到清运记录

`:currentTaskCard('QY260706-036','未来城片区 · 金属仓清运',`已完成 ${driver.currentStage}/2 站 · ${driver.currentStage>=2?'待提交完成':'前往未来城 2号智能柜'}`,'0.82 t',2,'26 min');return `
当前执行

清运任务

${acceptedTask}${currentTask}
`} const historyTasks={'QY260705-018':{title:'汉口片区 · 塑料合并清运',meta:'昨日 16:42 完成 · 实际 1.68 t',weight:'1.68 t',stops:4,distance:'31.2 km',duration:'58 min',sites:[['汉口花园 1号智能柜','塑料仓 · 0.42 t'],['新华家园 2号智能柜','塑料仓 · 0.35 t'],['滨江公寓 1号智能柜','塑料仓 · 0.48 t'],['汉口里社区回收柜','塑料仓 · 0.43 t']]},'QY260704-012':{title:'江城大学 · 纸类区域清运',meta:'7月4日 11:28 完成 · 实际 0.72 t',weight:'0.72 t',stops:1,distance:'8.6 km',duration:'19 min',sites:[['江城大学 1号回收仓','纸类 A区 · 0.72 t']]}}; function historyTaskCard(id){const t=historyTasks[id];return `
已完成#${id}

${t.title}

${t.meta}

${t.weight}实际重量
${t.stops} 站清运站点
${t.duration}实际用时
`} function historyTaskDetail(id){const t=historyTasks[id]||historyTasks['QY260705-018'];return `

清运详情

已完成#${id}

${t.title}

${t.meta} · 系统已归档清运凭证

${t.weight}实际重量
${t.distance}全程距离
${t.duration}实际用时

完成站点

凭证已归档
${t.sites.map((s,i)=>route(String(i+1),s[0],s[1],'done')).join('')}
清运凭证

现场照片 2 张 · 称重记录已同步 · 设备容量已恢复正常

`} function driverHistory(){return `
本月完成 38 单

清运记录

清运重量18.6 t
准时率96%
装载率87%
${historyTaskCard('QY260705-018')}${historyTaskCard('QY260704-012')}
`} function driverProfile(){return `
司机中心

陈师傅,辛苦了

本月绩效

安全行驶 1,286 km

服务评分 4.9 · 超过 86% 的司机

我的车辆

🚚

鄂A·76Q28

厢式货车 · 核载 2.0 吨 · 年检正常

工作设置

实名认证

证件审核已通过

已认证

我的服务

`} function renderDriver(){let content=driver.page==='tasks'?driverTasks():driver.page==='detail'?driverDetail():driver.page==='current'?driverCurrent():driver.page==='history'?driverHistory():driverProfile();const detailNav=driver.task?.startsWith('history:')?'history':driver.task==='QY260706-036'||driver.accepted?'current':'tasks';app.innerHTML=driverPhone(content,driver.page==='detail'?detailNav:driver.page);bindDriver()} function bindDriver(){$$('[data-dpage]').forEach(b=>b.onclick=()=>{driver.page=b.dataset.dpage;driver.task=null;renderDriver()});$$('[data-task-filter]').forEach(b=>b.onclick=()=>{driver.taskFilter=b.dataset.taskFilter;renderDriver()});$$('[data-task]').forEach(b=>b.onclick=()=>{driver.task=b.dataset.task;driver.page='detail';renderDriver()});$$('[data-current-task]').forEach(b=>b.onclick=()=>{driver.task=b.dataset.currentTask;driver.page='detail';renderDriver()});$$('[data-history-task]').forEach(b=>b.onclick=()=>{driver.task=`history:${b.dataset.historyTask}`;driver.page='detail';renderDriver()});const oc=$('[data-open-current]');if(oc)oc.onclick=()=>{driver.task='QY260706-031';driver.page='detail';renderDriver()};$$('[data-daction]').forEach(b=>b.onclick=()=>{const a=b.dataset.daction;if(a==='back-tasks'){driver.page=driver.task?.startsWith('history:')?'history':driver.accepted||driver.task==='QY260706-036'?'current':'tasks';driver.task=null}if(a==='accept'){driver.accepted=true;driver.stage=0;driver.task='QY260706-031';toast('接单成功,已为你锁定任务')}if(a==='reject'){const reason=prompt('请输入拒绝原因(必填)');if(reason){driver.page='tasks';toast('任务已退回调度池')}}if(a==='navigate')toast('正在唤起地图导航…');if(a==='call-dispatch'){callDialog('027-87654321');setTimeout(()=>{location.href='tel:02787654321'},350)}if(a==='driver-profile-info'){infoDialog('👤','个人资料','陈伟 · 138****7628 · 光谷南片区 · 鄂A·76Q28 · 实名认证已通过');return}if(a==='driver-feedback'){feedbackDialog();return}if(a==='driver-about'){infoDialog('ⓘ','关于我们','绿循司机端为清运司机提供任务接单、路线导航、现场上传、绩效记录与调度协同服务。');return}if(a==='report'){const reason=prompt('请描述现场异常');if(reason)toast('异常已上报,调度员将尽快处理')}if(a==='upload'){driver.uploaded=true;toast('照片上传成功')}if(a==='upload-current'){driver.currentUploaded=true;toast('现场照片上传成功')}if(a==='complete-stop'){if(!driver.uploaded){toast('请先上传现场照片');return}driver.stage++;driver.uploaded=false;toast('本站清运完成,设备状态已更新')}if(a==='complete-current-stop'){if(!driver.currentUploaded){toast('请先上传现场照片');return}driver.currentStage++;driver.currentUploaded=false;toast('本站清运完成,设备状态已更新')}if(a==='finish'){driver.page='history';driver.accepted=false;driver.task=null;toast('任务完成,辛苦了!')}if(a==='finish-current'){driver.page='history';driver.currentDone=true;driver.task=null;toast('任务完成,辛苦了!')}if(a!=='call-dispatch')renderDriver()})} // ---------------- OPERATIONS ADMIN ---------------- const admin={page:'dashboard',deviceTab:'community',configTab:'price',reportTab:'overview',selected:['QY260706-031','QY260706-034']}; const navItems=[['dashboard','◫','首页驾驶舱'],['devices','▣','社区回收柜'],['warehouse','▥','高校回收仓'],['dispatch','⌁','订单调度'],['alerts','△','告警中心'],['reports','▤','报表中心'],['config','⚙','品类与配置'],['users','♙','用户管理'],['drivers','▣','司机管理']]; function sidebar(){const sys=[['members','♚','成员管理'],['roles','♜','角色管理'],['settlement','◈','奖励与结算'],['feedback','✉','意见反馈'],['banners','▧','Banner管理'],['agreements','§','协议配置'],['settings','⚙','系统设置']];return ``} function adminHeader(title){return `

${title}

● 系统运行正常
`} function adminShell(title,content){return `${topbar('admin')}
${sidebar()}
${adminHeader(title)}${content}
`} function metric(label,value,sub,trend=''){return `
${label}

${value}

${trend?`${trend} · `:''}${sub}

`} function adminDashboard(){return `

运营概览

早上好,今日所有站点整体运行平稳。

${metric('今日回收重量','6.84 t','较上周一','↑ 12.8%')}${metric('设备在线率','98.6%','在线 428 / 434 台','↑ 0.4%')}${metric('待清运订单','18','其中紧急订单 3 笔')}${metric('平均装载率','87.3%','目标值 85%','↑ 4.1%')}

近 7 日回收趋势

■ 社区柜  高校仓
${[48,62,55,72,66,81,75].map((v,i)=>`
${['06/30','07/01','07/02','07/03','07/04','07/05','07/06'][i]}
`).join('')}

今日品类占比

总计 6.84 t
纸类42%
塑料27%
金属17%
衣物14%

实时运营动态

阳光花园 2号柜完成清运纸类仓容量已由 98% 恢复至 3%
江城大学塑料 A 区达到满仓阈值已切换至备用 B 区并生成清运事件
合并任务 QY260706-031 已被接单司机陈伟 · 鄂A·76Q28 · 预计装载率 93%

设备健康度

正常412
预警16
离线6
`} const deviceRows=[['GC-SQ-002','阳光花园 2号柜','社区柜','在线','纸类','98%','danger'],['GC-SQ-014','青年公寓 1号柜','社区柜','在线','纸类','95%','danger'],['GC-SQ-008','枫林雅苑 3号柜','社区柜','预警','衣物','82%','warn'],['GC-SQ-021','春华社区 1号柜','社区柜','离线','—','—',''],['GC-SQ-005','未来城 2号柜','社区柜','在线','塑料','64%',''],['GC-SQ-026','湖畔新城 1号柜','社区柜','在线','纸类','100%','danger','disable']]; function adminDevices(){return `

社区回收柜

统一监控社区柜在线状态、仓位容量与硬件健康情况

${metric('设备总数','434','社区柜 386 · 高校仓 48')}${metric('在线设备','428','在线率 98.6%')}${metric('满仓 / 预警','12 / 26','建议优先安排清运')}${metric('今日故障','6','较昨日减少 2 起')}
${deviceRows.map(r=>``).join('')}
设备 / 站点类型运行状态最高仓位容量最后心跳操作
${r[1]}
${r[0]}
${r[2]}● ${r[3]}${r[4]}${r[5]==='—'?'—':`${r[5]}`}${r[3]==='离线'?'32 分钟前':'刚刚'}${r[3]!=='离线'?``:''}${r[3]==='离线'?``:''}${r[7]==='disable'?``:''}
`} const warehousePorts=[['#1','📄','纸类',92,10,'待清运','danger'],['#2','🧴','塑料',72,25,'预警','warning'],['#3','👕','衣物',45,0,'使用中','ok'],['#4','🔩','金属',30,0,'使用中','ok']]; const campusWarehouses=[{name:'阳光高校 回收仓',addr:'学苑路1号体育馆',state:'在线',ports:warehousePorts},{name:'江城大学 2号回收仓',addr:'南门生活区 3栋旁',state:'在线',ports:[['#1','📄','纸类',68,18,'使用中','ok'],['#2','🧴','塑料',96,12,'待清运','danger'],['#3','👕','衣物',34,0,'使用中','ok'],['#4','🔩','金属',58,0,'使用中','ok']]},{name:'湖畔职业学院 1号回收仓',addr:'图书馆西侧广场',state:'预警',ports:[['#1','📄','纸类',83,20,'预警','warning'],['#2','🧴','塑料',41,0,'使用中','ok'],['#3','👕','衣物',77,16,'使用中','ok'],['#4','🔩','金属',24,0,'使用中','ok']]}]; function warehouseMeter(value,tone='ok'){return `
${value}%`} function warehouseRow(r){return `${r[0]}${r[1]}${r[2]}${warehouseMeter(r[3],r[6])}${warehouseMeter(r[4],'ok')}${r[5]}`} function warehouseCard(w){return `

🏫 ${w.name}

${w.state}
📍 ${w.addr} · ${w.state} · 4个回收口
${w.ports.map(warehouseRow).join('')}
回收口品类主区域备用区域状态
`} function adminWarehouse(){return `

高校回收仓

3 个高校回收仓 · 回收口、输送带与区域联动监控

${metric('今日入仓','3.84 t','投递 526 次','↑ 18.6%')}${metric('开放回收口','11 / 12','1 个回收口预警')}${metric('在线回收仓','3','预警 1 个')}${metric('待清运区域','3','纸类 A区 · 塑料 A区 · 衣物 A区')}
${campusWarehouses.map(warehouseCard).join('')}`} function zone(name,state,cap,cls){return `

${name}

${state}
${[40,60,75,48,82,64,55].map((x,i)=>``).join('')}
当前容量 ${cap}%${state==='待清运'?'已停止入料':'阈值 80% / 95%'}
`} const orders=[['QY260706-031','阳光花园 + 青年公寓','纸类 · 0.77 t','高','09:32'],['QY260706-034','江城大学 1号仓','纸类 · 0.65 t','高','09:40'],['QY260706-028','江城大学 1号仓','塑料 · 0.68 t','紧急','09:18'],['QY260706-024','阳光花园 2号柜','衣物 · 0.36 t','普通','08:52']]; function adminDispatch(){return `

统一订单调度

系统建议将选中任务合并,预计车辆装载率可达 93%

18待调度
7待接单
12清运中
3紧急任务
2
!
1
● 待调度 ● 紧急 ● 司机

待调度订单池

已选择 2 单 · 1.42 t
${orders.map((o,i)=>`
${o[3]}优先级${o[4]}

${o[1]}

#${o[0]} · ${o[2]}

距相邻站点 ${i?'3.6':'2.8'} km${i<2?'✓ 已选':'选择'}
`).join('')}
`} function adminAlerts(){const rows=[['安全','江城大学 1号仓','输送带堵塞风险','紧急','1分钟前'],['满仓','阳光花园 2号柜','纸类仓容量达到 98%','高','8分钟前'],['设备','春华社区 1号柜','设备离线超过 30 分钟','高','32分钟前'],['仓门','枫林雅苑 3号柜','3号仓门未关严','中','46分钟前'],['识别','青年公寓 1号柜','连续 5 次高风险禁放物','中','1小时前']];return `

告警中心

集中处理设备、满仓、安全与识别异常

2紧急告警
8待处理
23今日已恢复
18 min平均处理时长
${rows.map(r=>``).join('')}
告警类型设备 / 站点告警内容等级发生时间处理状态操作
${r[0]}${r[1]}${r[2]}${r[3]}${r[4]}待处理
`} function adminReports(){const data={overview:{metrics:[['总回收重量','38.62 t','同比上周期','↑ 14.6%'],['订单合并率','68.2%','目标 65%','↑ 5.7%'],['平均清运时效','2.4 h','目标小于 3 h','↓ 18 min'],['活跃投递用户','8,426','新增 1,208 人','↑ 8.3%']],chart:'回收重量与订单趋势',unit:'单位:吨',bars:[50,61,45,70,66,82,77],side:'运营关键指标',list:[['今日完成订单','126 单','较昨日 +18'],['异常处理闭环','94.6%','平均 18 min'],['高峰投递时段','19:00-21:00','占比 31%'],['综合运营评分','92.8','较上周 +2.1']]},device:{metrics:[['设备在线率','98.6%','428 / 434 台','↑ 0.4%'],['平均心跳延迟','4.2 s','目标小于 8 s','↓ 1.1 s'],['满仓预警','12 台','需优先清运'],['故障设备','6 台','较昨日 -2']],chart:'设备在线与容量趋势',unit:'在线率 / 容量',bars:[92,96,91,98,94,99,97],side:'设备效率指标',list:[['远程开门成功率','99.1%','失败 4 次'],['容量预测准确率','91.4%','较上周 +3.2%'],['平均修复时长','42 min','目标 60 min'],['高负载设备','18 台','建议调度']]},transport:{metrics:[['清运完成率','96.2%','目标 95%','↑ 1.2%'],['平均装载率','87.3%','目标 85%','↑ 4.1%'],['司机日均完成','6.8 单','较上期 +0.6'],['空驶里程占比','12.4%','较上期 -2.1%']],chart:'清运任务完成趋势',unit:'完成率',bars:[60,58,70,73,78,86,82],side:'清运效率指标',list:[['准时到站率','96.2%','目标 95%'],['平均清运时效','2.4 h','目标小于 3 h'],['路线合并节省','128 km','本周期'],['待优化线路','5 条','建议复核']]},users:{metrics:[['新增用户','1,208','本周期','↑ 8.3%'],['活跃投递用户','8,426','近 30 天'],['复投率','42.6%','较上周 +3.4%'],['奖励发放','¥ 12,408','投递 2,631 次']],chart:'用户增长与活跃趋势',unit:'人数',bars:[42,51,55,63,70,76,84],side:'用户增长指标',list:[['新用户首投率','68.5%','较上期 +5.1%'],['校园用户占比','31.8%','增长最快'],['平均投递频次','3.7 次','近 30 天'],['沉默用户召回','426 人','已触达']]}};const tabs=[['overview','运营概览'],['device','设备效率'],['transport','清运效率'],['users','用户增长']];const cur=data[admin.reportTab]||data.overview;return `

数据报表

运营、设备、清运与用户指标综合分析

${tabs.map(t=>``).join('')}
${cur.metrics.map(m=>metric(m[0],m[1],m[2],m[3])).join('')}

${cur.chart}

${cur.unit}
${cur.bars.map((v,i)=>`
07/0${i+1}
`).join('')}

${cur.side}

本周期
${cur.list.map(x=>`
${x[0]}${x[2]}
${x[1]}
`).join('')}
`} const categoryRows=[['📦','纸类','0.80','2.30','低风险直通','426'],['🧴','塑料','1.20','1.50','低风险直通','412'],['🥫','金属','3.50','4.20','低风险直通','368'],['👕','衣物','0.50','—','云端复审','286']]; function categoryTabs(){return `
${[['price','品类与价格'],['rules','禁放物规则'],['capacity','容量阈值'],['ai','AI 风险策略']].map(t=>``).join('')}
`} function categoryPriceTable(){return `${categoryRows.map(r=>``).join('')}
回收品类社区柜单价高校仓单价AI 识别策略启用站点状态操作
${r[0]}${r[1]}
¥ ${r[2]} / kg${r[3]==='—'?'—':'¥ '+r[3]+' / kg'}${r[4]}${r[5]} 个已启用
`} function categoryRulesTable(){const rows=[['📦','纸类','液体浸湿、油污严重、夹带厨余','AI 低风险直通 · 命中后转人工复核','启用'],['🧴','塑料','未倒空液体、化学品瓶、医疗废弃物','识别液体残留后提示用户重新处理','启用'],['🥫','金属','电池、气雾罐、尖锐危险金属','高风险命中后禁止开仓','启用'],['👕','衣物','潮湿发霉、混入生活垃圾、鞋包混投','云端复审后结算奖励','启用']];return `${rows.map(r=>``).join('')}
品类禁放物规则命中处理状态操作
${r[0]}${r[1]}
${r[2]}${r[3]}${r[4]}
`} function categoryCapacityTable(){const rows=[['📦','纸类','80%','95%','98%','待清运'],['🧴','塑料','80%','95%','72%','预警'],['🥫','金属','85%','96%','30%','正常'],['👕','衣物','75%','90%','45%','正常']];return `${rows.map(r=>``).join('')}
品类预警阈值满仓阈值当前最高仓位处理状态操作
${r[0]} ${r[1]}${r[2]}${r[3]}${r[4]}${r[5]}
`} function categoryAiTable(){const rows=[['纸类','低风险直通','97.8%','2.1%','启用'],['塑料','低风险直通','96.4%','3.8%','启用'],['金属','高风险拦截','98.2%','1.4%','启用'],['衣物','云端复审','92.6%','8.7%','观察中']];return `${rows.map(r=>``).join('')}
品类识别策略识别准确率复核率策略状态操作
${r[0]}${r[1]}${r[2]}${r[3]}${r[4]}
`} function adminConfig(){const content={price:categoryPriceTable,rules:categoryRulesTable,capacity:categoryCapacityTable,ai:categoryAiTable}[admin.configTab]();return `

品类与运营配置

管理回收品类、奖励单价、禁放物及容量阈值

${categoryTabs()}${content}
`} function adminUsers(){const rows=[['林小满','139****4821','2025-11-18 09:24:36','绿芽达人 Lv.3','18 次 / 42.6 kg','¥ 18.62','正常'],['王倩','136****0972','2026-06-21 14:08:52','新手用户','3 次 / 5.8 kg','¥ 2.56','正常'],['赵一然','188****7364','2026-05-09 18:31:07','校园认证用户','12 次 / 26.3 kg','¥ 13.80','待审核'],['陈思雨','159****2580','2024-12-03 07:46:19','低活跃用户','1 次 / 1.2 kg','¥ 0.64','停用']];return `

用户管理

独立管理投递用户档案、会员等级、投递行为与账号状态

${metric('注册用户','8,426','本月新增 1,208','↑ 8.3%')}${metric('活跃用户','5,618','近 30 天有投递记录')}${metric('待审核资料','12','实名或校园认证')}${metric('本月投递','31,284 次','累计 68.7 t')}
${rows.map(r=>``).join('')}
用户姓名 / 手机号注册时间会员等级投递数据收益余额状态操作
${r[0]}
${r[1]}
${r[2]}${r[3]}${r[4]}${r[5]}${r[6]}
`} function adminDrivers(){const rows=[['陈伟','鄂A·76Q28 · 4.2m 厢货','138****7628','2025-09-12 08:16:43','光谷南片区','已认证','本月 38 单 / 26.8 t','4.9 分','在线'],['刘强','鄂A·92K17 · 轻卡','137****9217','2025-10-28 16:42:11','大学城片区','已认证','本月 31 单 / 19.4 t','4.7 分','休息中'],['周海','鄂A·63M10 · 4.2m 厢货','186****6310','2026-02-14 11:05:28','汉阳片区','认证异常','本月 22 单 / 15.1 t','4.8 分','在线'],['许明','鄂A·15P03 · 新能源货车','159****1503','2026-07-02 19:23:09','江夏片区','待审核','本月 0 单 / 0 t','待评分','待审核'],['郑凯','鄂A·48L66 · 新能源货车','133****4866','2026-06-18 10:57:34','光谷南片区','未认证','本月 0 单 / 0 t','待评分','停用']];return `

司机管理

独立管理清运司机档案、车主手机号、实名认证、车辆认证、服务片区与履约表现

${metric('实名认证通过','118','通过率 93.7%')}${metric('在线司机','84','可接单 67 人')}${metric('待审核认证','6','资料或证件待核验')}${metric('认证异常','2','需人工复核')}
${rows.map(r=>``).join('')}
司机姓名 / 车辆车主手机号注册时间服务片区实名认证本月清运服务评分账号状态操作
${r[0]}
${r[1]}
${r[2]}${r[3]}${r[4]}${r[5]}${r[6]}${r[7]}${r[8]}${r[8]==='待审核'?``:''}
`} function adminMembers(){const rows=[['周子昂','138****6601','超级管理员','光谷片区','2026-07-08 09:41:18','在线'],['李梦','137****2048','运营管理员','高校仓运营组','2026-07-07 18:22:06','在线'],['黄启航','186****7712','调度员','调度中心','2026-07-06 14:08:33','离线'],['宋佳','159****3920','财务管理员','财务结算组','2026-07-05 10:31:52','待激活'],['赵宁','188****0427','运维管理员','光谷运维一组','2026-07-03 16:45:20','在线']];return `

成员管理

管理后台成员账号、所属组织、角色授权与登录状态

${metric('后台成员','42','本月新增 5 人')}${metric('在线成员','18','正在处理业务')}${metric('待激活','3','邀请未确认')}${metric('高权限成员','6','需定期复核')}
${rows.map(r=>``).join('')}
成员姓名 / 手机号角色所属组织最近登录状态操作
${r[0]}
${r[1]}
${r[2]}${r[3]}${r[4]}${r[5]}
`} function adminRoles(){const rows=[['超级管理员','全平台菜单与高危操作权限','6','周子昂、系统负责人','启用'],['运营管理员','设备、告警、品类配置与报表查看','18','李梦、王钰等','启用'],['调度员','订单调度、司机派单与清运跟踪','9','黄启航等','启用'],['财务管理员','奖励、提现、司机绩效与结算审核','4','宋佳等','启用'],['只读观察员','驾驶舱、报表与告警只读权限','5','校方联络人','观察中']];return `

角色管理

配置后台角色、菜单权限、数据范围与高危操作审批范围

${metric('角色总数','5','启用 4 个')}${metric('权限点','86','覆盖 11 个模块')}${metric('高危权限','12','需双重确认')}${metric('待复核角色','1','观察中')}
${rows.map(r=>``).join('')}
角色名称权限范围成员数主要成员状态操作
${r[0]}${r[1]}${r[2]} 人${r[3]}${r[4]}
`} function adminSettlement(){const rows=[['TX20260707001','林小满','用户提现','18.62','待审核','今天 09:18'],['JL20260706031','陈伟','司机清运绩效','126.00','待结算','昨天 18:42'],['JL20260706018','王倩','投递奖励','2.56','已入账','7月6日 09:02'],['JS20260705012','刘强','司机清运绩效','98.00','已结算','7月5日 20:16']];return `

奖励与结算

管理用户环保奖励、提现申请、司机绩效与财务结算

${metric('待审核提现','¥ 3,286','42 笔申请')}${metric('今日奖励入账','¥ 12,408','投递 2,631 次')}${metric('司机待结算','¥ 8,960','76 笔清运绩效')}${metric('异常账单','6','需人工复核')}
${rows.map(r=>``).join('')}
流水号对象类型金额(元)状态时间操作
${r[0]}${r[1]}${r[2]}¥ ${r[3]}${r[4]}${r[5]}
`} function adminFeedback(){const rows=[['FB20260708012','林小满','用户端','提现到账慢,希望能看到预计时间','待处理','2026-07-08 10:28:16'],['FB20260707031','陈伟','司机端','执行中任务希望支持上传多张现场照片','处理中','2026-07-07 18:42:09'],['FB20260706018','王倩','用户端','附近设备异常原因提示很清楚','已回复','2026-07-06 09:02:34'],['FB20260705026','李梦','运营后台','报表中心希望支持导出不同 tab 数据','已关闭','2026-07-05 16:15:48']];return `

意见反馈

集中处理用户端、司机端和运营后台提交的建议、问题与体验反馈

${metric('待处理反馈','12','今日新增 5 条')}${metric('处理中','8','平均响应 18 min')}${metric('已回复','126','本月闭环率 94.6%')}${metric('高频诉求','3','需产品评估')}
${rows.map(r=>``).join('')}
反馈编号提交人来源反馈内容状态提交时间操作
${r[0]}${r[1]}${r[2]}${r[3]}${r[4]}${r[5]}
`} function adminBanners(){const rows=[['首页主 Banner','用户端首页','环保积分翻倍日','2026-07-01 00:00:00','2026-07-15 23:59:59','上线中'],['附近设备 Banner','用户端首页','附近设备异常提醒','2026-07-08 08:00:00','2026-07-12 22:00:00','待上线'],['司机端 Banner','司机端首页','高温清运安全提示','2026-07-06 00:00:00','2026-07-31 23:59:59','上线中'],['活动页 Banner','用户端活动页','校园旧物回收季','2026-06-20 00:00:00','2026-07-05 23:59:59','已下线']];return `

Banner管理

配置用户端和司机端展示位、活动图、跳转链接、上下线时间与展示状态

${metric('展示位','8','用户端 5 / 司机端 3')}${metric('上线中','4','覆盖 2 个端')}${metric('待上线','2','等待发布时间')}${metric('点击率','12.8%','较上周 +2.1%')}
${rows.map(r=>``).join('')}
展示位投放端Banner 标题上线时间下线时间状态操作
${r[0]}${r[1]}${r[2]}${r[3]}${r[4]}${r[5]}
`} function adminAgreements(){const rows=[['用户协议','用户端','V2.1.0','2026-07-01 09:00:00','已发布','林小满'],['隐私协议','用户端','V2.3.0','2026-07-01 09:00:00','已发布','林小满'],['隐私协议','用户端','V2.4.0','2026-07-08 15:26:00','草稿','周子昂'],['司机服务协议','司机端','V1.6.0','2026-06-18 14:30:00','已发布','陈伟'],['隐私协议','司机端','V1.4.2','2026-06-18 14:30:00','草稿','陈伟']];return `

协议配置

维护用户协议、隐私协议和司机端服务协议的版本、发布状态与生效范围

${metric('协议模板','7','覆盖用户端 / 司机端')}${metric('已发布版本','5','当前生效')}${metric('草稿','2','待法务确认')}${metric('最近发布','7月1日','用户端协议')}
${rows.map(r=>``).join('')}
协议类型适用端版本号更新时间状态维护人操作
${r[0]}${r[1]}${r[2]}${r[3]}${r[4]}${r[5]}
`} function adminSettings(){return `

系统设置

配置平台运行参数、权限、安全策略和消息通知

运行参数

实时生效

权限与安全

${[['管理员双重确认','远程开门、急停等高危操作'],['登录异常提醒','异地登录、连续失败触发告警'],['操作日志留存','保留 180 天,可导出审计']].map(x=>`
${x[0]}${x[1]}
`).join('')}

消息通知

短信 / 站内信 / Webhook
${[['设备离线','片区管理员、运维组','站内信 + 短信','已启用'],['满仓待清运','调度员、司机池','站内信','已启用'],['提现审核','财务管理员','站内信','已启用'],['AI 高风险识别','运营管理员','Webhook + 站内信','观察中']].map(r=>``).join('')}
通知场景接收对象渠道状态操作
${r[0]}${r[1]}${r[2]}${r[3]}
`} function deviceModal(){return ``} function switchModal(){return ``} function alertModal(d={}){const level=d.alertLevel||'高';const danger=level==='紧急';return ``} function categoryModal(d={}){const isNew=d.categoryName==='新增品类';const campus=d.categoryCampus==='—'?'':d.categoryCampus||'';return ``} function ruleModal(d={}){return ``} function aiPolicyModal(d={}){const strategy=d.aiStrategy||'低风险直通';return ``} function personModal(d={}){const role=d.personRole==='司机'?'司机':'用户';const title=d.personName?`查看${role}档案`:`新增${role}账号`;const detail=role==='司机'?`
`:`
`;return ``} function settlementModal(d={}){return ``} function memberModal(d={}){return ``} function roleModal(d={}){return ``} function feedbackModal(d={}){return ``} function bannerModal(d={}){return ``} function agreementModal(d={}){return ``} function simpleModal(title,desc,confirmType='simple'){return ``} function modal(type,data={}){if(type==='device')return deviceModal();if(type==='switch')return switchModal();if(type==='alert')return alertModal(data);if(type==='category')return categoryModal(data);if(type==='rule')return ruleModal(data);if(type==='aiPolicy')return aiPolicyModal(data);if(type==='person')return personModal(data);if(type==='settlement')return settlementModal(data);if(type==='member')return memberModal(data);if(type==='role')return roleModal(data);if(type==='feedback')return feedbackModal(data);if(type==='banner')return bannerModal(data);if(type==='agreement')return agreementModal(data);if(type==='notify')return simpleModal(`编辑通知:${data.notifyName||'通知场景'}`,'配置通知接收对象、渠道和触发频率。','settings');const info={merge:['合并订单并派单','2 个订单合并后预计重量 1.42 吨,路线 28.6 km,预计装载率 93%。','推荐司机:陈伟 · 鄂A·76Q28 · 距首站 1.2 km'],remote:['批量远程配置','为选中设备下发新的容量阈值,设备将在下一次心跳时生效。','预警阈值 80% · 满仓阈值 95%'],manual:['人工创建清运单','用于临时清运或设备异常等人工触发场景。','订单将进入待调度池'],detail:['设备详情','阳光花园 2号柜当前在线,纸类仓容量 98%。','最后心跳:刚刚 · 固件 V2.6.1']}[type]||['操作确认','确认执行当前操作?',''];return ``} function renderAdmin(){let body={dashboard:adminDashboard,devices:adminDevices,warehouse:adminWarehouse,dispatch:adminDispatch,alerts:adminAlerts,reports:adminReports,config:adminConfig,users:adminUsers,drivers:adminDrivers,people:adminUsers,members:adminMembers,roles:adminRoles,settlement:adminSettlement,feedback:adminFeedback,banners:adminBanners,agreements:adminAgreements,settings:adminSettings}[admin.page]();const titles={dashboard:'首页驾驶舱',devices:'社区回收柜',warehouse:'高校回收仓',dispatch:'订单调度',alerts:'告警中心',reports:'报表中心',config:'品类与配置',users:'用户管理',drivers:'司机管理',people:'用户管理',members:'成员管理',roles:'角色管理',settlement:'奖励与结算',feedback:'意见反馈',banners:'Banner管理',agreements:'协议配置',settings:'系统设置'};app.innerHTML=adminShell(titles[admin.page],body);bindAdmin()} function bindAdmin(){$$('[data-apage]').forEach(b=>b.onclick=()=>{admin.page=b.dataset.apage;renderAdmin()});$$('[data-config-tab]').forEach(b=>b.onclick=()=>{admin.configTab=b.dataset.configTab;renderAdmin()});$$('[data-report-tab]').forEach(b=>b.onclick=()=>{admin.reportTab=b.dataset.reportTab;renderAdmin()});$$('[data-amodal]').forEach(b=>b.onclick=()=>{document.body.insertAdjacentHTML('beforeend',modal(b.dataset.amodal,b.dataset));bindModal()});$$('[data-order]').forEach(b=>b.onclick=()=>b.classList.toggle('selected'));$$('[data-aaction]').forEach(b=>b.onclick=()=>{if(b.dataset.aaction==='open-door')toast(b.dataset.status==='离线'?`${b.dataset.device} 当前离线,无法远程开门`:`${b.dataset.device} 远程开门指令已下发`);else if(b.dataset.aaction==='repair-device')toast(`${b.dataset.device} 报修工单已创建`);else if(b.dataset.aaction==='disable-device')toast(`${b.dataset.device} 已提交禁用指令`);else if(b.dataset.aaction==='emergency'&&confirm('确定触发输送带急停吗?'))toast('急停指令已下发,现场运维已收到通知');else if(b.dataset.aaction==='account-toggle')toast(`${b.dataset.device} 账号状态已更新`);else if(b.dataset.aaction==='driver-audit')toast(`${b.dataset.device} 审核流程已打开`);else if(b.dataset.aaction==='member-reset')toast(`${b.dataset.device} 密码重置链接已发送`);else if(b.dataset.aaction==='role-copy')toast(`${b.dataset.device} 已复制为新角色草稿`);else if(b.dataset.aaction==='members-export')toast('成员名单已导出');else if(b.dataset.aaction==='roles-export')toast('角色权限清单已导出');else if(b.dataset.aaction==='users-export')toast('用户名单已导出');else if(b.dataset.aaction==='drivers-export')toast('司机名单已导出');else if(b.dataset.aaction==='people-export')toast('名单已导出');else if(b.dataset.aaction==='settlement-export')toast('结算流水已导出');else if(b.dataset.aaction==='feedback-export')toast('意见反馈列表已导出');else if(b.dataset.aaction==='feedback-read')toast('全部反馈已标记为已读');else if(b.dataset.aaction==='banner-sort')toast('Banner 排序已进入调整模式');else if(b.dataset.aaction==='banner-toggle')toast(`${b.dataset.device} 展示状态已更新`);else if(b.dataset.aaction==='agreement-preview')toast('已打开当前生效协议预览');else if(b.dataset.aaction==='agreement-publish')toast(`${b.dataset.device} 已发布并生成生效记录`);else if(b.dataset.aaction==='settings-save')toast('系统设置已保存');else if(b.dataset.aaction==='settings-toggle')toast('开关状态已更新');else toast(b.dataset.aaction==='export'?'报表已生成,正在下载…':'已将全部告警标记为已读')})} function bindModal(){$('[data-close-modal]').onclick=()=>$('.modal-backdrop').remove();$('[data-confirm-modal]').onclick=()=>{const modalEl=$('.modal-backdrop');const confirmType=$('[data-confirm-modal]').dataset.confirmType;if(confirmType==='device'){const code=$('[name="deviceCode"]')?.value.trim();const name=$('[name="deviceName"]')?.value.trim();const type=$('[name="deviceType"]')?.value;const category=$('[name="deviceCategory"]')?.value;if(!code||!name){toast('请填写设备编号和设备名称');return}deviceRows.push([code,name,type,'在线',category,'0%','']);modalEl.remove();renderAdmin();toast(`${name} 已新增到设备列表`);return}if(confirmType==='switch'){modalEl.remove();toast('#2 塑料回收口已切换至塑料 B 区');return}if(confirmType==='alert'){const action=$('[name="alertAction"]')?.value||'处理';modalEl.remove();toast(`告警已处理:${action}`);return}if(confirmType==='category'){const name=$('[name="categoryName"]')?.value.trim()||'当前品类';modalEl.remove();toast(`${name} 配置已保存并同步`);return}if(confirmType==='rule'){const status=$('[name="ruleStatus"]')?.value||'启用';modalEl.remove();toast(`禁放物规则已保存,状态:${status}`);return}if(confirmType==='aiPolicy'){const strategy=$('[name="aiStrategy"]')?.value||'AI 策略';modalEl.remove();toast(`AI 风险策略已保存:${strategy}`);return}if(confirmType==='person'){const name=$('[name="personName"]')?.value.trim()||'账号';modalEl.remove();toast(`${name} 档案已保存`);return}if(confirmType==='settlement'){modalEl.remove();toast('结算处理已提交');return}if(confirmType==='settings'){modalEl.remove();toast('设置已保存并同步');return}modalEl.remove();toast('操作成功,系统状态已同步更新')}} if(appType==='user')renderUser();if(appType==='driver')renderDriver();if(appType==='admin')renderAdmin();
取消
访问码: g5egaquh