Commit 156196ee authored by 杨欣's avatar 杨欣

issue: 迁移 ISS-GB-001/002 → ISS-GEB-009/010(来自 gbjzd-issue-001)

parent 25eee93d
.push-pending
......@@ -44,15 +44,8 @@ tr.issue{cursor:pointer}tr.issue:hover{background:#171a21}
.tag{display:inline-block;background:#202637;color:#8fb0ff;border-radius:5px;padding:1px 7px;font-size:11px;margin-right:5px}
.note{color:#6f7689;font-size:12px;margin-top:4px}
.foot{color:#5b6172;font-size:11px;margin:24px 0 8px;text-align:center}
.lang-btn{background:#232734;color:#b9c0d0;border:1px solid #2a2f3d;border-radius:7px;padding:6px 14px;font-size:13px;cursor:pointer;font-weight:600}
.lang-btn.active{background:#5fa8ff;color:#fff;border-color:#5fa8ff}
</style></head><body><div class="wrap">
<div style="display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap">
<h1 id="h1">gebijia问题清单 · Ledger 看板</h1>
<div style="display:flex;gap:6px">
<button class="lang-btn active" onclick="setLang('zh')" id="btn-zh">中文</button>
<button class="lang-btn" onclick="setLang('en')" id="btn-en">EN</button>
</div></div>
<h1>gebijia问题清单 · Ledger 看板</h1>
<div class="sub" id="sub"></div>
<div class="sec">① Excel 体检 — 这张表把什么藏起来了</div>
......@@ -82,174 +75,74 @@ tr.issue{cursor:pointer}tr.issue:hover{background:#171a21}
<div class="foot" id="foot"></div>
</div>
<script>
const DATA=[], S={"total": 0, "total_logs": 0, "fs": {}, "pri": {}, "owner_open": {}, "overdue": 0, "sap_done": 0, "final_done": 0, "today": "2026-08-03", "audit": null};
let lang='zh';
const h1El=document.getElementById('h1');
const origH1=h1El.textContent;
const listName=origH1.replace(/\s\s*Ledger\s*看板$/i,'').replace(/\s\s*Issue\/Task\s*Ledger$/i,'');
const fsOrder_zh=["进行中(返工)","进行中","待用户验证","未开始","已完成","已关闭"];
const fsOrder_en=["Rework","In Progress","Pending Verification","Not Started","Completed","Closed"];
const fsOrder=fsOrder_zh;
const colMap={'已完成':'#48d597','Completed':'#48d597','待用户验证':'#e8c24b','Pending Verification':'#e8c24b',
'进行中':'#5fa8ff','In Progress':'#5fa8ff','进行中(返工)':'#ff9b54','Rework':'#ff9b54',
'未开始':'#9aa3b5','Not Started':'#9aa3b5','已关闭':'#6f7689','Closed':'#6f7689',
'高':'#ff6b81','High':'#ff6b81','中':'#e8c24b','Medium':'#e8c24b','低':'#7f8aa0','Low':'#7f8aa0','未定':'#7f8aa0','Unset':'#7f8aa0'};
const L={
zh:{title:listName+' · 问题清单 Ledger 看板',sub:`数据源 = ${S.total} 个结构化对象 · 实时重算 · ${S.today}`,
audit:`① Excel 体检`,summary:`② 可信汇总`,ownerSec:`各责任顾问 · 未关闭`,priSec:`按优先级`,
workSec:`③ 工作台 — 点行展开日志`,fOwner:'全部责任顾问',fFinal:'全部状态',fPri:'全部优先级',
fQ:'搜索编号/标题/描述…',fOd:'只看超期',fOpen:'只看未关闭',
thId:'编号',thOwner:'责任顾问',thPri:'优先级',thFinal:'最终状态',thPlan:'计划完成',thNlog:'进展',thTitle:'标题',
total:'问题总数',done:'最终已完成',sapDone:'SAP 已完成',overdueN:'超期未关闭',
fsDist:'按最终状态(派生)',ownerDist:'各责任顾问 · 未关闭(调度)',priDist:'按优先级',
od:'⚠超期',descLabel:'问题描述',planLabel:'当前方案',histLabel:'责任人变更历史',logLabel:'进展日志(append-only)',
footer:`显示 {n} / {t} 条 · 点行展开进展日志`,
auditC:'处状态自相矛盾',auditLog:'个单元格塞手写流水账',auditPri:'缺优先级/缺分类',auditAcc:'种"验收反馈"自由写法',
auditWhy1:'原表"SAP已完成"却"最终状态≠已完成"。Ledger 里最终态是派生函数,结构上不可能矛盾。',
auditWhy2:(n)=>`已拆成 ${n} 条带 时间·作者·来源 的 append-only 日志。`,
auditWhy3:'没人强制填。Ledger 受控字段缺失即标红不过门。',
auditWhy4:'同一个"已解决"68 种写法,机器没法聚合。Ledger 用受控状态+证据指针。'},
en:{title:listName+' · Issue/Task Ledger',sub:`${S.total} structured objects · Real-time · ${S.today}`,
audit:`① Excel Audit`,summary:`② Summary`,ownerSec:`Owner · Open Issues`,priSec:`By Priority`,
workSec:`③ Workbench — Click row to expand`,fOwner:'All Owners',fFinal:'All Status',fPri:'All Priority',
fQ:'Search ID/title/desc…',fOd:'Overdue only',fOpen:'Open only',
thId:'ID',thOwner:'Owner',thPri:'Priority',thFinal:'Final Status',thPlan:'Plan Date',thNlog:'Logs',thTitle:'Title',
total:'Total',done:'Completed',sapDone:'SAP Done',overdueN:'Overdue',
fsDist:'By Final Status',ownerDist:'Owner · Open (Dispatch)',priDist:'By Priority',
od:'⚠Overdue',descLabel:'Description',planLabel:'Current Plan',histLabel:'Owner Change History',logLabel:'Progress Log (append-only)',
footer:`Showing {n} / {t} · Click row to expand`,
auditC:'Status contradictions',auditLog:'Cells with handwritten logs',auditPri:'Missing priority/category',auditAcc:'Different acceptance formats',
auditWhy1:'SAP=Done but Final≠Done. Ledger derives final status — structurally impossible to contradict.',
auditWhy2:(n)=>`Split into ${n} append-only logs with time·author·source.`,
auditWhy3:'No enforcement. Ledger marks missing fields red.',
auditWhy4:'68 ways to write "resolved". Ledger uses controlled states + evidence pointers.'}
};
function setLang(l){
lang=l;
document.getElementById('btn-zh').className='lang-btn'+(l==='zh'?' active':'');
document.getElementById('btn-en').className='lang-btn'+(l==='en'?' active':'');
const t=L[l];
document.getElementById('h1').textContent=t.title;
document.getElementById('sub').textContent=t.sub;
document.getElementById('sec-audit').textContent=t.audit;
document.getElementById('sec-summary').textContent=t.summary;
document.getElementById('sec-owner').textContent=t.ownerSec;
document.getElementById('sec-pri').textContent=t.priSec;
document.getElementById('sec-work').textContent=t.workSec;
document.getElementById('f_q').placeholder=t.fQ;
document.getElementById('lbl-od').textContent=t.fOd;
document.getElementById('lbl-open').textContent=t.fOpen;
document.querySelectorAll('th[data-k]').forEach(th=>{
const k=th.dataset.k;
th.textContent=t['th'+k.charAt(0).toUpperCase()+k.slice(1)]||k;
});
// Update selects
const fO=document.getElementById('f_owner');
const fF=document.getElementById('f_final');
const fP=document.getElementById('f_pri');
fO.options[0].text=t.fOwner;
fF.options[0].text=t.fFinal;
fP.options[0].text=t.fPri;
render();
}
const DATA=[{"id": "ISS-GEB-001", "owner": "刘欣媛 <xinyuan.liu@boscloud.cn>", "raised_by": "", "raised_dept": "采购部", "priority": "高", "category": "系统优化问题", "sap": "未开始", "acc": "NA", "final": "未开始", "plan": "", "overdue": false, "desc": "公司间交易采购下达时要根据气泡等级(Z01-Z28)去带出相应的价格。当前采购订单创建时价格未按气泡等级自动带出,需要系统根据气泡等级自动匹配公司间交易价格。", "desc_html": "公司间交易采购下达时要根据气泡等级(Z01-Z28)去带出相应的价格。当前采购订单创建时价格未按气泡等级自动带出,需要系统根据气泡等级自动匹配公司间交易价格。", "plan_txt": "## 进展日志\n- 2026-08-03 · 刘欣媛 · [opencode会话] · 创建问题;sap_status=未开始, acceptance=NA;owner=刘欣媛→刘欣媛 <xinyuan.liu@boscloud.cn>(新建指派)", "title": "公司间采购按气泡等级带出价格", "nlog": 1, "logs": [{"date": "2026-08-03", "author": "刘欣媛", "source": "opencode会话", "text": "创建问题;sap_status=未开始, acceptance=NA;owner=刘欣媛→刘欣媛 <xinyuan.liu@boscloud.cn>(新建指派)"}], "linked": [], "owner_history": [{"from": "刘欣媛", "to": "刘欣媛 <xinyuan.liu@boscloud.cn>", "by": "刘欣媛", "date": "2026-08-03", "reason": "新建指派"}], "attachments": []}, {"id": "ISS-GEB-002", "owner": "jing.wang <jing.wang@boscloud.cn>", "raised_by": "", "raised_dept": "IT", "priority": "高", "category": "系统优化问题", "sap": "已完成", "acc": "已验证", "final": "已完成", "plan": "", "overdue": false, "desc": "WMS系统12月上线,SAP实施是否需要考虑对接", "desc_html": "WMS系统12月上线,SAP实施是否需要考虑对接", "plan_txt": "本次实施需对接WMS,与SAP一起上线", "title": "WMS-SAP对接考虑", "nlog": 6, "logs": [{"date": "2026-07-15", "author": "jing.wang", "source": "问题清单_20260408", "text": "创建问题;sap_status=未开始, acceptance=NA;owner=jing.wang→jing.wang <jing.wang@boscloud.cn>(新建指派)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "确认", "text": "WMS为项目范围外,本次需对接,同步与SAP上线;(sap_status: 未开始→已完成)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "checklist:chk-complete", "text": "测过了吗?已确定WMS对接方案了吗?=已确认方案;影响哪些范围?=仅WMS-SAP接口"}, {"date": "2026-08-03", "author": "jing.wang", "source": "更新", "text": "(acceptance: NA→已验证,更新当前方案)"}, {"date": "2026-08-03", "author": "jing.wang", "source": "checklist:chk-accept-verified", "text": "谁确认验收?=IT/用户;验收渠道是什么?=会议/纪要;证据指针(可抽检的依据)?=对接方案/纪要"}, {"date": "2026-08-03", "author": "jing.wang <jing.wang@boscloud.cn>", "source": "迁移", "text": "从旧清单 gebijia-issues-ops 迁移,原编号 GBJ-GBJ-001 → ISS-GEB-002"}], "linked": [], "owner_history": [{"from": "jing.wang", "to": "jing.wang <jing.wang@boscloud.cn>", "by": "jing.wang", "date": "2026-07-15", "reason": "新建指派"}], "attachments": []}, {"id": "ISS-GEB-003", "owner": "jing.wang <jing.wang@boscloud.cn>", "raised_by": "", "raised_dept": "财务部", "priority": "中", "category": "系统优化问题", "sap": "已完成", "acc": "已验证", "final": "已完成", "plan": "", "overdue": false, "desc": "个别子公司仅财务账无实际业务,SAP是否纳入", "desc_html": "个别子公司仅财务账无实际业务,SAP是否纳入", "plan_txt": "## 进展日志\n- 2026-07-15 · jing.wang · [问题清单_20260408] · 创建问题;sap_status=未开始, acceptance=NA;owner=jing.wang→jing.wang <jing.wang@boscloud.cn>(新建指派)\n- 2026-07-15 · jing.wang · [确认] · 本次实施范围是5家法人公司,其他公司与账务不考虑;(sap_status: 未开始→已完成)\n- 2026-07-15 · jing.wang · [checklist:chk-complete] · 测过了吗?已确定WMS对接方案了吗?=方案已明确;影响哪些范围?=仅影响未纳入的法人公司\n- 2026-07-15 · jing.wang · [验收确认] · 用户已确认验收;(acceptance: NA→已验证)\n- 2026-07-15 · jing.wang · [checklist:chk-accept-verified] · 谁确认验收?=用户确认;验收渠道是什么?=项目确认;证据指针(可抽检的依据)=项目决策记录", "title": "子公司仅财务账处理", "nlog": 5, "logs": [{"date": "2026-07-15", "author": "jing.wang", "source": "问题清单_20260408", "text": "创建问题;sap_status=未开始, acceptance=NA;owner=jing.wang→jing.wang <jing.wang@boscloud.cn>(新建指派)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "确认", "text": "本次实施范围是5家法人公司,其他公司与账务不考虑;(sap_status: 未开始→已完成)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "checklist:chk-complete", "text": "测过了吗?已确定WMS对接方案了吗?=方案已明确;影响哪些范围?=仅影响未纳入的法人公司"}, {"date": "2026-07-15", "author": "jing.wang", "source": "验收确认", "text": "用户已确认验收;(acceptance: NA→已验证)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "checklist:chk-accept-verified", "text": "谁确认验收?=用户确认;验收渠道是什么?=项目确认;证据指针(可抽检的依据)=项目决策记录"}], "linked": [], "owner_history": [{"from": "jing.wang", "to": "jing.wang <jing.wang@boscloud.cn>", "by": "jing.wang", "date": "2026-07-15", "reason": "新建指派"}], "attachments": []}, {"id": "ISS-GEB-004", "owner": "jing.wang <jing.wang@boscloud.cn>", "raised_by": "", "raised_dept": "财务部", "priority": "中", "category": "报表需求问题", "sap": "已完成", "acc": "已验证", "final": "已完成", "plan": "", "overdue": false, "desc": "预算管理报表:系统可实现/不可实现功能分类清单", "desc_html": "预算管理报表:系统可实现/不可实现功能分类清单", "plan_txt": "## 进展日志\n- 2026-07-15 · jing.wang · [经营分析专题会_20260615] · 创建问题;sap_status=未开始, acceptance=NA;owner=jing.wang→jing.wang <jing.wang@boscloud.cn>(新建指派)\n- 2026-07-15 · jing.wang · [确认] · 已确认,状态更新为进行中;(sap_status: 未开始→进行中)\n- 2026-07-15 · jing.wang · [checklist:chk-take-ownership] · 沟通清楚了吗?=已沟通;和谁沟通的?=项目组", "title": "预算管理报表功能分类", "nlog": 3, "logs": [{"date": "2026-07-15", "author": "jing.wang", "source": "经营分析专题会_20260615", "text": "创建问题;sap_status=未开始, acceptance=NA;owner=jing.wang→jing.wang <jing.wang@boscloud.cn>(新建指派)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "确认", "text": "已确认,状态更新为进行中;(sap_status: 未开始→进行中)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "checklist:chk-take-ownership", "text": "沟通清楚了吗?=已沟通;和谁沟通的?=项目组"}], "linked": [], "owner_history": [{"from": "jing.wang", "to": "jing.wang <jing.wang@boscloud.cn>", "by": "jing.wang", "date": "2026-07-15", "reason": "新建指派"}], "attachments": []}, {"id": "ISS-GEB-005", "owner": "jing.wang <jing.wang@boscloud.cn>", "raised_by": "", "raised_dept": "总经办", "priority": "高", "category": "管理综合问题", "sap": "已完成", "acc": "已验证", "final": "已完成", "plan": "", "overdue": false, "desc": "组织架构事业部交叉问题(产品/区域/客户)需捋清", "desc_html": "组织架构事业部交叉问题(产品/区域/客户)需捋清", "plan_txt": "## 进展日志\n- 2026-07-15 · jing.wang · [顶层设计会_20260408] · 创建问题;sap_status=未开始, acceptance=NA;owner=jing.wang→jing.wang <jing.wang@boscloud.cn>(新建指派)\n- 2026-07-15 · jing.wang · [确认] · 已确认,状态更新为进行中;(sap_status: 未开始→进行中)\n- 2026-07-15 · jing.wang · [checklist:chk-take-ownership] · 沟通清楚了吗?=已沟通;和谁沟通的?=项目组", "title": "组织架构事业部交叉问题", "nlog": 3, "logs": [{"date": "2026-07-15", "author": "jing.wang", "source": "顶层设计会_20260408", "text": "创建问题;sap_status=未开始, acceptance=NA;owner=jing.wang→jing.wang <jing.wang@boscloud.cn>(新建指派)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "确认", "text": "已确认,状态更新为进行中;(sap_status: 未开始→进行中)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "checklist:chk-take-ownership", "text": "沟通清楚了吗?=已沟通;和谁沟通的?=项目组"}], "linked": [], "owner_history": [{"from": "jing.wang", "to": "jing.wang <jing.wang@boscloud.cn>", "by": "jing.wang", "date": "2026-07-15", "reason": "新建指派"}], "attachments": []}, {"id": "ISS-GEB-006", "owner": "jing.wang <jing.wang@boscloud.cn>", "raised_by": "", "raised_dept": "IT", "priority": "高", "category": "数据问题", "sap": "已完成", "acc": "已验证", "final": "已完成", "plan": "", "overdue": false, "desc": "BOM/物料/客户/供应商缺乏统一管控规则", "desc_html": "BOM/物料/客户/供应商缺乏统一管控规则", "plan_txt": "主数据管控规则按数据文档填写,部门同步出具配套制度", "title": "主数据缺乏统一管控规则", "nlog": 6, "logs": [{"date": "2026-07-15", "author": "jing.wang", "source": "顶层设计会_20260408", "text": "创建问题;sap_status=未开始, acceptance=NA;owner=jing.wang→jing.wang <jing.wang@boscloud.cn>(新建指派)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "确认", "text": "按照业务蓝图中确认,各数据管控规则按照数据文档中的规则填写,部门同步出具配套制度;(sap_status: 未开始→已完成)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "checklist:chk-complete", "text": "测过了吗?已确定WMS对接方案了吗?=蓝图已确认;影响哪些范围?=主数据管控规则+配套制度"}, {"date": "2026-08-03", "author": "jing.wang", "source": "更新", "text": "(acceptance: NA→已验证,更新当前方案)"}, {"date": "2026-08-03", "author": "jing.wang", "source": "checklist:chk-accept-verified", "text": "谁确认验收?=IT/用户;验收渠道是什么?=会议/纪要;证据指针(可抽检的依据)?=主数据管控规则及配套制度"}, {"date": "2026-08-03", "author": "jing.wang <jing.wang@boscloud.cn>", "source": "迁移", "text": "从旧清单 gebijia-issues-ops 迁移,原编号 GBJ-GBJ-005 → ISS-GEB-006"}], "linked": [], "owner_history": [{"from": "jing.wang", "to": "jing.wang <jing.wang@boscloud.cn>", "by": "jing.wang", "date": "2026-07-15", "reason": "新建指派"}], "attachments": []}, {"id": "ISS-GEB-007", "owner": "jing.wang <jing.wang@boscloud.cn>", "raised_by": "", "raised_dept": "总经办", "priority": "中", "category": "跟踪类问题", "sap": "已完成", "acc": "已验证", "final": "已完成", "plan": "", "overdue": false, "desc": "玻纤子公司拆分时间未明确", "desc_html": "玻纤子公司拆分时间未明确", "plan_txt": "玻纤子公司剥离时间未定,暂配置系统组织架构,后续迁移时补充数据", "title": "玻纤子公司拆分时间未明确", "nlog": 6, "logs": [{"date": "2026-07-15", "author": "jing.wang", "source": "KB_05风险", "text": "创建问题;sap_status=未开始, acceptance=NA;owner=jing.wang→jing.wang <jing.wang@boscloud.cn>(新建指派)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "确认", "text": "玻纤子公司剥离时间未定,SAP系统暂配置组织架构即可;(sap_status: 未开始→已完成)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "checklist:chk-complete", "text": "测过了吗?已确定WMS对接方案了吗?=方案已定;影响哪些范围?=仅组织架构配置"}, {"date": "2026-08-03", "author": "jing.wang", "source": "更新", "text": "(acceptance: NA→已验证,更新当前方案)"}, {"date": "2026-08-03", "author": "jing.wang", "source": "checklist:chk-accept-verified", "text": "谁确认验收?=总经办/用户;验收渠道是什么?=会议/纪要;证据指针(可抽检的依据)?=组织架构配置方案,后续迁移时补充数据"}, {"date": "2026-08-03", "author": "jing.wang <jing.wang@boscloud.cn>", "source": "迁移", "text": "从旧清单 gebijia-issues-ops 迁移,原编号 GBJ-GBJ-006 → ISS-GEB-007"}], "linked": [], "owner_history": [{"from": "jing.wang", "to": "jing.wang <jing.wang@boscloud.cn>", "by": "jing.wang", "date": "2026-07-15", "reason": "新建指派"}], "attachments": []}, {"id": "ISS-GEB-008", "owner": "jing.wang <jing.wang@boscloud.cn>", "raised_by": "", "raised_dept": "IT", "priority": "高", "category": "跟踪类问题", "sap": "已取消", "acc": "NA", "final": "已关闭", "plan": "", "overdue": false, "desc": "立体库/WMS实施周期150天,与SAP协同时间待确认", "desc_html": "立体库/WMS实施周期150天,与SAP协同时间待确认", "plan_txt": "## 进展日志\n- 2026-07-15 · jing.wang · [KB_05风险] · 创建问题;sap_status=未开始, acceptance=NA;owner=jing.wang→jing.wang <jing.wang@boscloud.cn>(新建指派)\n- 2026-07-15 · jing.wang · [整理合并] · 与问题GBJ-GBJ-001重复(WMS-SAP对接),关闭;(sap_status: 未开始→已取消)\n- 2026-07-15 · jing.wang · [checklist:chk-close] · 为什么关闭?=与GBJ-GBJ-001重复;客户知道吗?=已告知", "title": "立体库WMS实施周期协同", "nlog": 3, "logs": [{"date": "2026-07-15", "author": "jing.wang", "source": "KB_05风险", "text": "创建问题;sap_status=未开始, acceptance=NA;owner=jing.wang→jing.wang <jing.wang@boscloud.cn>(新建指派)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "整理合并", "text": "与问题GBJ-GBJ-001重复(WMS-SAP对接),关闭;(sap_status: 未开始→已取消)"}, {"date": "2026-07-15", "author": "jing.wang", "source": "checklist:chk-close", "text": "为什么关闭?=与GBJ-GBJ-001重复;客户知道吗?=已告知"}], "linked": [], "owner_history": [{"from": "jing.wang", "to": "jing.wang <jing.wang@boscloud.cn>", "by": "jing.wang", "date": "2026-07-15", "reason": "新建指派"}], "attachments": []}], S={"total": 8, "total_logs": 33, "fs": {"未开始": 1, "已完成": 6, "已关闭": 1}, "pri": {"高": 5, "中": 3}, "owner_open": {"刘欣媛 <xinyuan.liu@boscloud.cn>": 1}, "overdue": 0, "sap_done": 6, "final_done": 6, "today": "2026-08-04", "audit": null};
const fsOrder=["进行中(返工)","进行中","待用户验证","未开始","已完成","已关闭"];
document.getElementById('sub').textContent=
`数据源 = ${S.total} 个结构化对象(issues/*.md)· 实时重算 · 生成于 ${S.today} — 这不是那张 Excel,是它本该有的样子`;
// ① audit
if(S.audit){const a=S.audit;const t=L[lang];
const items=[
[a.contradictions,t.auditC,t.auditWhy1],
[a.changelog_cells,t.auditLog,t.auditWhy2(S.total_logs)],
[a.missing_priority+'/'+a.missing_category,t.auditPri,t.auditWhy3],
[a.acc_distinct,t.auditAcc,t.auditWhy4]];
if(S.audit){const a=S.audit;const items=[
[a.contradictions,'处状态自相矛盾','原表"SAP已完成"却"最终状态≠已完成"。Ledger 里最终状态是派生函数,结构上不可能矛盾。'],
[a.changelog_cells,'个单元格塞手写流水账',`已拆成 ${S.total_logs} 条带 时间·作者·来源 的 append-only 日志(点下方任意行看)。`],
[a.missing_priority+'/'+a.missing_category,'缺优先级/缺分类','没人强制填。Ledger 受控字段缺失即标红不过门。'],
[a.acc_distinct,'种"验收反馈"自由写法','同一个"已解决"68 种写法,机器没法聚合。Ledger 用受控状态+证据指针。']];
document.getElementById('audit').innerHTML=items.map(x=>
`<div class="card bad"><div class="n">${x[0]}</div><div class="l">${x[1]}</div><div class="why">${x[2]}</div></div>`).join('');
}else{document.getElementById('audit').innerHTML='<div class="card">No source Excel</div>';}
}else{document.getElementById('audit').innerHTML='<div class="card">未提供源 Excel,跳过体检</div>';}
// ② top nums
const pct=(n)=>S.total?Math.round(n/S.total*100):0;
function renderStats(){
const t=L[lang];
document.getElementById('topnums').innerHTML=[
['good',S.total,t.total,''],
['good',S.final_done,t.done,`SAP done + verified · ${pct(S.final_done)}%`],
['',S.sap_done,t.sapDone,`${pct(S.sap_done)}%`],
['bad',S.overdue,t.overdueN,'Plan date passed']
].map(x=>`<div class="card ${x[0]}"><div class="n">${x[1]}</div><div class="l">${x[2]}</div><div class="why">${x[3]}</div></div>`).join('');
}
document.getElementById('topnums').innerHTML=[
['good',S.total,'问题总数',''],
['good',S.final_done,'最终已完成',`SAP完成且用户验证 · ${pct(S.final_done)}%`],
['',S.sap_done,'SAP 已完成',`${pct(S.sap_done)}%(≠最终完成)`],
['bad',S.overdue,'超期未关闭','计划完成日已过']
].map(x=>`<div class="card ${x[0]}"><div class="n">${x[1]}</div><div class="l">${x[2]}</div><div class="why">${x[3]}</div></div>`).join('');
function dist(el,obj,order,total,title){
const keys=order?order.filter(k=>obj[k]):Object.keys(obj).sort((a,b)=>obj[b]-obj[a]);
const mx=Math.max(1,...Object.values(obj));
function dist(el,obj,order,total,title){const keys=order?order.filter(k=>obj[k]):Object.keys(obj).sort((a,b)=>obj[b]-obj[a]);
const mx=Math.max(1,...Object.values(obj));const col={'已完成':'#48d597','待用户验证':'#e8c24b','进行中':'#5fa8ff','进行中(返工)':'#ff9b54','未开始':'#9aa3b5','已关闭':'#6f7689','高':'#ff6b81','中':'#e8c24b','低':'#7f8aa0'};
let h=title?`<div class="sec" style="margin:0 0 8px">${title}</div>`:'';
h+=keys.map(k=>`<div class="item"><span>${k}</span><div class="bar"><i style="width:${obj[k]/mx*100}%;background:${colMap[k]||'#5fa8ff'}"></i></div><span>${obj[k]}</span></div>`).join('');
h+=keys.map(k=>`<div class="item"><span>${k}</span><div class="bar"><i style="width:${obj[k]/mx*100}%;background:${col[k]||'#5fa8ff'}"></i></div><span>${obj[k]}</span></div>`).join('');
el.innerHTML=h;}
function renderDist(){
const t=L[lang];
const fo=fsOrder;
dist(document.getElementById('fsdist'),S.fs,fo,S.total,t.fsDist);
dist(document.getElementById('ownerdist'),S.owner_open,null,S.total,t.ownerDist);
dist(document.getElementById('pridist'),S.pri,['高','High','中','Medium','低','Low','未定','Unset'],S.total,t.priDist);
}
dist(document.getElementById('fsdist'),S.fs,fsOrder,S.total,'按最终状态(派生)');
dist(document.getElementById('ownerdist'),S.owner_open,null,S.total,'各责任顾问 · 未关闭(调度)');
dist(document.getElementById('pridist'),S.pri,['高','中','低','未定'],S.total,'按优先级');
// ③ table
function opts(el,arr,all){el.innerHTML=`<option value="">${all}</option>`+arr.map(v=>`<option>${v}</option>`).join('');}
opts(document.getElementById('f_owner'),[...new Set(DATA.map(d=>d.owner))].sort(),L.zh.fOwner);
opts(document.getElementById('f_final'),fsOrder_zh,L.zh.fFinal);
opts(document.getElementById('f_pri'),['高','中','低','未定'],L.zh.fPri);
opts(document.getElementById('f_owner'),[...new Set(DATA.map(d=>d.owner))].sort(),'全部责任顾问');
opts(document.getElementById('f_final'),fsOrder,'全部状态');
opts(document.getElementById('f_pri'),['高','中','低','未定'],'全部优先级');
let sortK='id',sortAsc=true;
const esc=s=>(s||'').replace(/[&<>]/g,c=>({'&':'&amp;','<':'&lt;','>':'&gt;'}[c]));
function render(){
const t=L[lang];
const isEn=lang==='en';
const fo=f_owner.value,ff=f_final.value,fp=f_pri.value,q=f_q.value.trim(),od=f_od.checked,op=f_open.checked;
const fsNow=isEn?fsOrder_en:fsOrder_zh;
let rows=DATA.filter(d=>{
const dPri=isEn?d.priority_en:d.priority;
const dFinal=isEn?mapFinalEn(d.final):d.final;
return(!fo||d.owner===fo)&&(!ff||dFinal===ff)&&(!fp||dPri===fp)
&&(!od||d.overdue)&&(!op||(dFinal!=='Completed'&&dFinal!=='Closed'&&d.final!=='已完成'&&d.final!=='已关闭'))
&&(!q||(d.id+(isEn?d.title_en:d.title)+(isEn?d.desc_en:d.desc)).toLowerCase().includes(q.toLowerCase()));
});
let rows=DATA.filter(d=>(!fo||d.owner===fo)&&(!ff||d.final===ff)&&(!fp||d.priority===fp)
&&(!od||d.overdue)&&(!op||(d.final!=='已完成'&&d.final!=='已关闭'))
&&(!q||(d.id+d.title+d.desc).toLowerCase().includes(q.toLowerCase())));
rows.sort((a,b)=>{let x=a[sortK],y=b[sortK];if(sortK==='nlog'){x=+x;y=+y}return (x>y?1:x<y?-1:0)*(sortAsc?1:-1)});
tb.innerHTML=rows.map(d=>{
const od=d.overdue?`<span class="od"> ${t.od}</span>`:'';
const od=d.overdue?'<span class="od"> ⚠超期</span>':'';
const logs=d.logs.map(l=>`<div class="e"><div class="meta"><b>${l.date}</b> · ${esc(l.author)} · <span class="tag">${esc(l.source)}</span></div>${esc(l.text)}</div>`).join('');
const lk=(d.linked||[]).map(x=>`<span class="tag">${x.rel}${x.id}</span>`).join('');
const attChips=(d.attachments||[]).map(a=>`<span class="tag">${esc(a.filename)}</span>`).join('');
const ownerHist=(d.owner_history||[]).map(h=>`<div class="e"><div class="meta"><b>${esc(h.date)}</b> · ${esc(h.by)} · <span class="tag">${isEn?'Reassigned':'转派'}</span></div>${esc(h.from)}${esc(h.to)}${esc(h.reason||'')}</div>`).join('');
const title=isEn?d.title_en:d.title;
const cat=isEn?d.category_en:d.category;
const pri=isEn?d.priority_en:d.priority;
const sap=isEn?d.sap_en:d.sap;
const acc=isEn?d.acc_en:d.acc;
const final=isEn?mapFinalEn(d.final):d.final;
const descH=isEn?esc(d.desc_en):d.desc_html;
const ownerHist=(d.owner_history||[]).map(h=>`<div class="e"><div class="meta"><b>${esc(h.date)}</b> · ${esc(h.by)} · <span class="tag">转派</span></div>${esc(h.from)}${esc(h.to)}${esc(h.reason||'')}</div>`).join('');
return `<tr class="issue" onclick="this.nextElementSibling.style.display=this.nextElementSibling.style.display==='table-row'?'none':'table-row'">
<td>${d.id}</td><td>${esc(d.owner)}</td><td class="pr-${pri}">${pri}</td>
<td><span class="pill f-${final}">${final}</span></td><td>${d.plan||'—'}${od}</td><td>${d.nlog}</td><td>${esc(title)}</td></tr>
<td>${d.id}</td><td>${esc(d.owner)}</td><td class="pr-${d.priority}">${d.priority}</td>
<td><span class="pill f-${d.final}">${d.final}</span></td><td>${d.plan||'—'}${od}</td><td>${d.nlog}</td><td>${esc(d.title)}</td></tr>
<tr class="detail" style="display:none"><td colspan="7"><div class="dbox">
<div class="kv"><b>${d.id}</b> ${isEn?'Raised':'提出'}${esc(d.raised_dept)}/${esc(d.raised_by)} SAP:${sap} ${isEn?'Acceptance':'验收'}${acc} ${isEn?'Category':'分类'}${esc(cat)} ${lk}</div>
<div class="kv">${isEn?'Owner':'责任顾问'}${esc(d.owner)} ${attChips}</div>
<div class="kv" style="white-space:pre-wrap">${t.descLabel}${descH}</div>
<div class="kv">${t.planLabel}${esc(d.plan_txt)||'—'}</div>
<div class="sec" style="margin:12px 0 6px">${t.histLabel}</div>
<div class="log">${ownerHist||'<div class="note">'+(isEn?'None':'无')+'</div>'}</div>
<div class="sec" style="margin:12px 0 6px">${t.logLabel}</div>
<div class="log">${logs||'<div class="note">'+(isEn?'None':'无')+'</div>'}</div>
<div class="kv"><b>${d.id}</b> 提出:${esc(d.raised_dept)}/${esc(d.raised_by)} SAP:${d.sap} 验收:${d.acc} 分类:${esc(d.category)} ${lk}</div>
<div class="kv">责任顾问${esc(d.owner)} ${attChips}</div>
<div class="kv" style="white-space:pre-wrap">问题描述:${d.desc_html}</div>
<div class="kv">当前方案${esc(d.plan_txt)||'—'}</div>
<div class="sec" style="margin:12px 0 6px">责任人变更历史</div>
<div class="log">${ownerHist||'<div class="note"></div>'}</div>
<div class="sec" style="margin:12px 0 6px">进展日志(append-only)</div>
<div class="log">${logs||'<div class="note"></div>'}</div>
</div></td></tr>`;}).join('');
foot.textContent=t.footer.replace('{n}',rows.length).replace('{t}',DATA.length);
renderStats();renderDist();
foot.textContent=`显示 ${rows.length} / ${DATA.length} 条 · 点行展开进展日志`;
}
function mapFinalEn(f){
const m={'已完成':'Completed','已关闭':'Closed','进行中':'In Progress','进行中(返工)':'Rework','待用户验证':'Pending Verification','未开始':'Not Started'};
return m[f]||f;
}
document.querySelectorAll('th[data-k]').forEach(th=>th.onclick=()=>{const k=th.dataset.k;if(sortK===k)sortAsc=!sortAsc;else{sortK=k;sortAsc=true}render();});
['f_owner','f_final','f_pri','f_q','f_od','f_open'].forEach(id=>document.getElementById(id).addEventListener('input',render));
setLang('zh');
render();
</script></body></html>
\ No newline at end of file
---
id: ISS-GEB-009
project: gebijia项目
title: 车灯事业部产线组织变更
raised_dept: 车灯事业部
raised_by: 杨欣
owner: 杨欣 <yangxin@bosi.com>
owner_history:
- {from: 杨欣, to: 杨欣 <yangxin@bosi.com>, by: 杨欣, date: 2026-07-08, reason: 新建指派}
system: SAP
registered: 2026-07-08
category: 管理综合问题
priority:
sap_status: 已完成
acceptance: NA
plan_date: ""
developer: ""
evidence: []
attachments: []
source: 新建
linked: []
---
# ISS-GEB-009 车灯事业部产线组织变更
## 问题描述
车灯事业部的一条产线需要从原组织架构下变更到精密器件公司法人下,需要调整SAP组织架构(公司代码/工厂/利润中心/成本中心等)。
## 当前方案
调整SAP组织架构:车灯工厂利润中心取消,车灯成本中心编码调整
## 进展日志
- 2026-07-08 · 杨欣 · [新建] · 创建问题;sap_status=未开始, acceptance=NA;owner=杨欣→杨欣 <yangxin@bosi.com>(新建指派)
- 2026-07-08 · 杨欣 · [更新] · 结论:调整SAP组织架构,车灯工厂、利润中心取消,车灯成本中心编码调整;(sap_status: 未开始→已完成,更新当前方案)
- 2026-07-08 · 杨欣 · [更新] · 调整SAP组织架构,车灯工厂利润中心取消,车灯成本中心编码调整;(更新当前方案)
- 2026-08-04 · 杨欣 · [迁移] · 从 gbjzd-issue-001 清单迁移至 gebijia-ops-26 清单(原ID: ISS-GB-001)
---
id: ISS-GEB-010
project: gebijia项目
title: OA同步物料主数据-分类视图缺新建API
raised_dept: 项目组
raised_by: 杨欣
owner: 杨欣 <yangxin@bosi.com>
owner_history:
- {from: 杨欣, to: 杨欣 <yangxin@bosi.com>, by: 杨欣, date: 2026-07-28, reason: 新建指派}
system: SAP
registered: 2026-07-28
category: 开发需求
priority:
sap_status: 未开始
acceptance: NA
plan_date: 2026-08-30
developer: ""
attachments: []
source: 新建
linked: []
---
# ISS-GEB-010 OA同步物料主数据-分类视图缺新建API
## 问题描述
物料主数据通过OA系统同步到SAP系统,自动生成编码成功,但分类视图没有新建的API,导致分类视图数据无法通过OA自动同步到SAP。
## 当前方案
## 进展日志
- 2026-07-28 · 杨欣 · [新建] · 创建问题;sap_status=未开始, acceptance=NA;owner=杨欣→杨欣 <yangxin@bosi.com>(新建指派)
- 2026-08-04 · 杨欣 · [迁移] · 从 gbjzd-issue-001 清单迁移至 gebijia-ops-26 清单(原ID: ISS-GB-002)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment