workspace.js 7.6 KB

12345678910111213
  1. register('staff', 'queue', 'S01', '接待工作台', () => desktop(`<div class="workspace"><section><h3>客户会话</h3><div class="tabs"><span class="tag">待接待</span><span class="tag">我的会话</span></div>${state.empty ? '<p>暂无待处理会话</p>' : `<button class="session-row" data-page="conversation" data-role="staff"><strong>A01 H5</strong><p>键盘空格键无法使用</p><small>${state.humanRequested ? '请求人工协助' : state.owner === 'HUMAN' ? '王芳接待中' : 'AI 接待中'}</small></button>`}</section><section><div class="chat-empty"><h2>选择会话开始接待</h2><p>查看咨询记录,接管后回复客户。</p>${!state.empty ? link('进入 A01 会话', 'conversation') : ''}</div></section><section><h3>客户信息</h3><p class="muted">选择会话后显示客户资料。</p><hr><h3>关联订单</h3><p class="muted">当前客户授权范围内的订单。</p><hr><h3>售后工单</h3><p class="muted">确认、审批和履约进度。</p></section></div>`), ['会话列表、聊天工作区、客户业务上下文在同一接待页面。', '未选择会话时显示工作区空状态;选择后加载会话与业务资料。']);
  2. register('staff', 'conversation', 'S02', '会话处理与业务上下文', () => desktop(`<div class="workspace"><section>${box('当前会话', `<p>A01 / H5</p>${tag(state.humanRequested ? '等待人工' : '换货咨询')}${link('返回会话队列', 'queue')}`)}${box('服务控制', `<p>${state.owner === 'HUMAN' ? '当前接管:王芳' : '智能助手服务中'}</p>${actions(state.owner === 'AGENT' ? button('接管会话', 'takeover', 'class="primary"') : button('结束接管', 'release'))}`)}</section><section><h2>咨询记录</h2><div class="message customer"><small>客户 A01</small>键盘空格键无法使用,希望换货。</div>${state.messages.map(item => `<div class="message"><small>${escapeHtml(item.sender)}</small>${escapeHtml(item.text)}</div>`).join('')}${state.owner === 'AGENT' ? hint('接管后可以发送人工回复。接管将停止助手继续回复。') : hint('你正在接管会话。')}${form('staff-message', area('人工回复', 'message', '', 'required maxlength="2000"'), '发送回复', state.owner !== 'HUMAN' ? 'disabled' : '')}</section><section>${box('当前客户订单', `${orderSummary()}${actions(link('整理换货方案', 'draft'))}`)}${box('售后进度', `${tag(statusLabels[state.ticket])}<p>客户确认:${state.customerConfirmed ? `已确认 V${state.version}` : '待客户本人确认'}</p>${actions(link('查看工单', 'ticket'))}`)}${box('规则依据', `<p>键盘换货规则 V${state.ruleVersion}</p><p>7 天内功能故障,客户确认及主管审批。</p>`)}${['PROCESSING', 'RESULT_UNKNOWN'].includes(state.ticket) ? hint('已有外部申请正在跟踪,接管后继续查询同一笔申请。') : ''}</section></div>`), ['会话、订单、方案和规则在同一处理页面可见。', '接管后禁止新的 Agent 写操作和自动回复;已提交外部操作继续跟踪。', '结束接管后,下一条客户消息交由助手处理。客服不能代替客户确认方案。']);
  3. register('staff', 'draft', 'S03', '代客户整理或修订方案', () => desktop(`<div class="grid">${box('订单与规则', `${orderSummary()}<p>键盘换货规则 V${state.ruleVersion}:7 天内功能故障可申请。</p><p>客户本人确认后进入主管审批。</p>`)}${box('方案编辑', `${state.owner !== 'HUMAN' ? hint('请先接管会话。') : ''}${form('proposal', `${field('申请数量', 'quantity', state.quantity, 'number', 'required min="1" max="1"')}${area('故障描述', 'reason', state.reason, 'required maxlength="2000"')}`, '保存并交客户检查', state.owner !== 'HUMAN' || (!canCreate() && !canRevise()) ? 'disabled' : '')}`)}</div>`), ['保存为待客户确认方案。', '修订内容生成新版本,旧确认与审批失效。', '只有当前接管客服可以通过会话整理方案。']);
  4. register('staff', 'ticket', 'S04', '工单详情与执行记录', () => desktop(state.ticket === 'NONE' ? `<div class="empty">当前客户没有工单。${actions(link('进入会话处理', 'conversation'))}</div>` : `<div class="grid">${box('当前工单', ticketSummary())}${box('确认与审批', `<p>客户确认:${state.customerConfirmed ? `A01 已确认 V${state.version}` : '等待客户确认'}</p><p>主管处理:${tag(statusLabels[state.ticket])}</p><p>外部申请:${['PROCESSING', 'RESULT_UNKNOWN', 'COMPLETED'].includes(state.ticket) ? 'EX-001 · 持续跟踪同一笔申请' : '尚未登记'}</p>${canRevise() ? link('修订并重新请客户确认', 'draft') : ''}`)}</div>${state.ticket === 'RESULT_UNKNOWN' ? hint('受理结果未知,后台继续核实原申请;工单保留数量占用。') : ''}${box('处理记录', state.audit.length ? `<ol>${state.audit.map(item => `<li>${escapeHtml(item)}</li>`).join('')}</ol>` : '<p>已生成方案,等待后续处理。</p>')}`), ['业务进度、客户确认、主管决定与外部操作分开展示。', '客服只能修订允许修订的方案;客户取消仍由客户操作。']);
  5. register('supervisor', 'approvals', 'S05', '待审批列表', () => desktop(`${hint('主管仅审批已获授权店铺的申请,审批人与提交人必须不同。')}${state.ticket === 'WAITING_REVIEW' && !state.empty ? table(['工单 / 客户', '方案', '确认记录', '操作'], [['SH-001 / A01', `V${state.version} · 键盘 × ${state.quantity}`, `客户已确认 V${state.version}`, link('查看并审批', 'review')]]) : `<div class="empty">当前没有待审批方案。${actions(link('查看工单记录', 'history'))}</div>`}`), ['进入详情后查看订单、规则和客户确认记录。', '角色为主管仍需检查店铺权限,已处理或已修订申请退出待办。']);
  6. register('supervisor', 'review', 'S06', '审批资料与决定', () => desktop(state.ticket === 'NONE' ? '<div class="empty">当前没有方案,请从消费者入口创建并确认方案。</div>' : `<div class="grid">${box('申请资料', proposalSummary())}${box('确认与权限', `<p>客户确认:${state.customerConfirmed ? `A01 已确认 V${state.version}` : '尚未确认'}</p><p>当前审批人:主管李明</p><p>提交人:${state.selfApproval ? '主管李明' : '客户 A01 / 客服王芳整理'}</p><p>当前工单:${statusLabels[state.ticket]}</p>${state.selfApproval ? hint('申请人不能审批自己提交的申请,请交由其他主管处理。') : ''}${state.stale ? hint('方案版本已变化,请重新获取资料后审批。') : ''}`)}</div>${form('approval', `${select('审批决定', 'decision', ['批准', '拒绝'], '批准')}${area('审批意见', 'reason', '', 'required placeholder="请填写决定依据;拒绝原因会提供给客户"')}${consent('checked', `已核对订单、规则和客户对 V${state.version} 的确认记录`)}`, '提交审批决定', state.ticket !== 'WAITING_REVIEW' || !state.customerConfirmed || state.selfApproval || state.stale ? 'disabled' : '')}${state.stale ? actions(button('重新读取资料', 'refresh-proposal')) : ''}`), ['审批操作绑定当前方案版本及工单版本。', '客户未确认、自己提交、版本已更新、无权限或已处理时不能批准。', '批准后仍需执行前复核;履约完成由外部业务结果确定。']);
  7. register('supervisor', 'history', 'S07', '审批后业务进度', () => desktop(state.ticket === 'NONE' ? '<div class="empty">当前没有工单记录。</div>' : `${box('工单 SH-001', ticketSummary())}${hint('审批完成后持续跟踪业务结果;需要修订时重新由客户确认并创建审批任务。')}`), ['用于从审批列表回查处理结果,不提供直接修改外部履约状态的产品按钮。']);