wwt-certificate-tool 1.2.50 → 1.2.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/app.html +35 -16
- package/dist/version.json +6 -6
- package/package.json +1 -1
package/dist/app.html
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
<head>
|
|
4
4
|
<meta charset="UTF-8">
|
|
5
5
|
<meta name="viewport" content="width=device-width,initial-scale=1">
|
|
6
|
-
<title>WWT 金蝶凭证工具 · 纯前端版 P1.2.
|
|
6
|
+
<title>WWT 金蝶凭证工具 · 纯前端版 P1.2.52</title>
|
|
7
7
|
<style>*{box-sizing:border-box;margin:0;padding:0}
|
|
8
8
|
body{font-family:"Microsoft YaHei","PingFang SC",-apple-system,Segoe UI,sans-serif;font-size:13px;color:#1f2328;background:#f4f6f9;line-height:1.6}
|
|
9
9
|
h1{font-size:17px;font-weight:600}
|
|
@@ -320,7 +320,7 @@ input[data-f="field"][list^="dlGe_"]::placeholder{color:#a8861f;font-style:itali
|
|
|
320
320
|
<div class="brand">
|
|
321
321
|
<span class="logo">WWT</span>
|
|
322
322
|
<div>
|
|
323
|
-
<h1>金蝶凭证工具 <span class="ver">P1.2.
|
|
323
|
+
<h1>金蝶凭证工具 <span class="ver">P1.2.52</span></h1>
|
|
324
324
|
<div class="sub">纯前端离线版 · 双击即用 · 数据只存在本机,不上传任何服务器</div>
|
|
325
325
|
</div>
|
|
326
326
|
</div>
|
|
@@ -410,6 +410,7 @@ input[data-f="field"][list^="dlGe_"]::placeholder{color:#a8861f;font-style:itali
|
|
|
410
410
|
</select>
|
|
411
411
|
</label>
|
|
412
412
|
<label>分组字段 <input type="text" id="genGroupBy" placeholder="单位名称"></label>
|
|
413
|
+
<label>凭证起始号 <input type="number" id="genVStart" value="1" style="width:70px" title="生成凭证时第一张凭证的编号,可在生成前直接改"></label>
|
|
413
414
|
<button class="btn primary" onclick="UI.doGenerate()">⚙ 生成凭证草稿</button>
|
|
414
415
|
<button class="btn" onclick="UI.clearGenerated()" title="清空规则列表的绿色「已生成」标记">清空已生成</button>
|
|
415
416
|
</div>
|
|
@@ -449,7 +450,7 @@ input[data-f="field"][list^="dlGe_"]::placeholder{color:#a8861f;font-style:itali
|
|
|
449
450
|
|
|
450
451
|
<!-- ⑥ 对碰 -->
|
|
451
452
|
<section class="pane" id="tab-check">
|
|
452
|
-
<div class="notice">对碰检测 = 拿业务数据里的<b>单位名称 / 供应商名称</b>,去客户 / 供应商基础档案里对一遍,<b>档案里没有的列出来</b
|
|
453
|
+
<div class="notice">对碰检测 = 拿业务数据里的<b>单位名称 / 供应商名称</b>,去客户 / 供应商基础档案里对一遍,<b>档案里没有的列出来</b>(只检测「已确认/已结算」单据,未结算单据不参与;付款方式=挂账·对账S·冲转S;不再核对部门、员工)。</div>
|
|
453
454
|
<div class="rowacts">
|
|
454
455
|
<button class="btn primary" onclick="UI.runDetect()">🔍 运行对碰检测</button>
|
|
455
456
|
<button class="btn ghost" id="btnDlMissing" style="display:none" onclick="UI.dlMissing()">📥 下载缺失清单 Excel</button>
|
|
@@ -893,11 +894,10 @@ window.WWT_CONST = (function () {
|
|
|
893
894
|
{key:"已完工未结算", label:"已完工未结算(维修完工)"},
|
|
894
895
|
{key:"维修已结算", label:"维修已结算(维修已结)"},
|
|
895
896
|
];
|
|
896
|
-
// 对碰检测只覆盖"已确认/已结算"
|
|
897
|
+
// 对碰检测只覆盖"已确认/已结算"的来源;已完工未结算/入库未结算 用户要求不参与(2026-09-09 / 2026-09-21)
|
|
897
898
|
// 【P1.2.39】新增 维修已结算(已结算类,按设计意图纳入对碰检测)
|
|
898
|
-
// 【P1.2.
|
|
899
|
-
|
|
900
|
-
const DETECT_ALLOWED_SOURCES = ["入库已确认","入库未结算","销售已确认","调拨已确认","维修已结算"];
|
|
899
|
+
// 【P1.2.52】移除「入库未结算」:未结算单据不需要对碰,避免干扰补档案。
|
|
900
|
+
const DETECT_ALLOWED_SOURCES = ["入库已确认","销售已确认","调拨已确认","维修已结算"];
|
|
901
901
|
// v1.2.20:只核对 挂账 / 对账S / 冲转S 三类(去掉 对帐F / 冲转F)
|
|
902
902
|
const DETECT_ALLOWED_PAY = ["对帐S","挂帐","冲转S"];
|
|
903
903
|
|
|
@@ -2455,11 +2455,12 @@ window.WWT_ENGINE = (function () {
|
|
|
2455
2455
|
const meta = C.SOURCE_META[src] || {};
|
|
2456
2456
|
const allow = C.DETECT_ALLOWED_PAY.map(normPay);
|
|
2457
2457
|
const checked = rows.filter(r => {
|
|
2458
|
-
// ① 单据状态:已结算 / 已确认
|
|
2458
|
+
// ① 单据状态:已结算 / 已确认 才参与(无状态列则不过滤);含「未结算」字样的明确跳过
|
|
2459
2459
|
let statusVal = "";
|
|
2460
2460
|
for (const k of STATUS_KEYS) { const v = clean(r[k]); if (v) { statusVal = v; break; } }
|
|
2461
2461
|
if (statusVal) {
|
|
2462
2462
|
const sv = statusVal.toLowerCase();
|
|
2463
|
+
if (sv.indexOf("未结算") >= 0) return false;
|
|
2463
2464
|
if (sv.indexOf("已确认") < 0 && sv.indexOf("已结算") < 0) return false;
|
|
2464
2465
|
}
|
|
2465
2466
|
// ② 付款方式 / 结算方式
|
|
@@ -2468,7 +2469,7 @@ window.WWT_ENGINE = (function () {
|
|
|
2468
2469
|
});
|
|
2469
2470
|
totalRows += checked.length;
|
|
2470
2471
|
|
|
2471
|
-
const push = (dimName, val, kind, hint) => {
|
|
2472
|
+
const push = (dimName, val, kind, hint, billNo) => {
|
|
2472
2473
|
if (!val) return;
|
|
2473
2474
|
let code = "";
|
|
2474
2475
|
if (kind === "客户" || kind === "供应商") {
|
|
@@ -2478,7 +2479,7 @@ window.WWT_ENGINE = (function () {
|
|
|
2478
2479
|
if (!code) {
|
|
2479
2480
|
missCount++;
|
|
2480
2481
|
byDim[dimName] = (byDim[dimName] || 0) + 1;
|
|
2481
|
-
res.push({ 来源单据: src, 维度: dimName, 名称: val, 建议: hint });
|
|
2482
|
+
res.push({ 来源单据: src, 维度: dimName, 名称: val, 单号: billNo || '', 建议: hint });
|
|
2482
2483
|
}
|
|
2483
2484
|
};
|
|
2484
2485
|
|
|
@@ -2487,7 +2488,8 @@ window.WWT_ENGINE = (function () {
|
|
|
2487
2488
|
const party = clean(r[meta.party]);
|
|
2488
2489
|
if (party) {
|
|
2489
2490
|
const dimName = meta.partytype === "供应商" ? "供应商" : "客户";
|
|
2490
|
-
|
|
2491
|
+
const billNo = clean(r[meta.no]) || clean(r["原单号"]);
|
|
2492
|
+
push(dimName, party, dimName, suggest[dimName], billNo);
|
|
2491
2493
|
}
|
|
2492
2494
|
}
|
|
2493
2495
|
}
|
|
@@ -2525,7 +2527,7 @@ const S = window.__STATE__ = {
|
|
|
2525
2527
|
};
|
|
2526
2528
|
|
|
2527
2529
|
/* ---------------- 版本 & 框架自动更新(只更新程序本身,本地数据/规则不动) ---------------- */
|
|
2528
|
-
const WWT_VER=(function(){const raw='P1.2.
|
|
2530
|
+
const WWT_VER=(function(){const raw='P1.2.52';return raw.indexOf('__WVER__')>=0?'P1.2.10':raw;})();
|
|
2529
2531
|
const UPD_URL_KEY='wwt_fe_updurl';
|
|
2530
2532
|
// 默认更新源:Gitee 上本项目的 version.json(API 接口,浏览器可直接跨域读)
|
|
2531
2533
|
const DEFAULT_UPD_URL='https://gitee.com/api/v5/repos/wwtmrhu/certificate-generation/contents/dist/version.json';
|
|
@@ -4204,6 +4206,16 @@ function redrawRuleForm(){
|
|
|
4204
4206
|
* ④ 生成凭证
|
|
4205
4207
|
* ============================================================ */
|
|
4206
4208
|
function doGenerate(){
|
|
4209
|
+
// 【P1.2.51】生成栏里的「凭证起始号」优先级最高:生成前把它写回 S.monthly,并同步到②映射页的输入框
|
|
4210
|
+
const vsInp=$('genVStart');
|
|
4211
|
+
if(vsInp){
|
|
4212
|
+
const vs=vsInp.value.trim();
|
|
4213
|
+
if(vs!==''){
|
|
4214
|
+
S.monthly.vstart=vs;
|
|
4215
|
+
const v2=document.querySelector('input[data-mk="vstart"]');
|
|
4216
|
+
if(v2)v2.value=vs;
|
|
4217
|
+
}
|
|
4218
|
+
}
|
|
4207
4219
|
collectMonthly(); collectMaps();
|
|
4208
4220
|
if(!Object.keys(S.biz).some(k=>(S.biz[k]||[]).length)){ toast('先到「① 上传数据」传业务数据表'); return; }
|
|
4209
4221
|
if(!S.rules.length){ toast('还没有规则,去「③ 规则配置」建一条'); return; }
|
|
@@ -4729,9 +4741,9 @@ function runDetect(){
|
|
|
4729
4741
|
(Object.keys(r.byDim).length?'('+Object.entries(r.byDim).map(x=>esc(x[0])+' '+x[1]).join('、')+')':'');
|
|
4730
4742
|
let h='';
|
|
4731
4743
|
if(r.rows.length){
|
|
4732
|
-
h='<table><thead><tr><th>来源单据</th><th>维度</th><th>业务里的名称</th><th>建议</th></tr></thead><tbody>'+
|
|
4744
|
+
h='<table><thead><tr><th>来源单据</th><th>维度</th><th>业务里的名称</th><th>单号</th><th>建议</th></tr></thead><tbody>'+
|
|
4733
4745
|
r.rows.slice(0,500).map(x=>'<tr><td>'+esc(x.来源单据)+'</td><td>'+esc(x.维度)+'</td><td><b>'+esc(x.名称)+'</b></td>'+
|
|
4734
|
-
'<td style="color:#8b949e">'+esc(x.建议)+'</td></tr>').join('')+'</tbody></table>';
|
|
4746
|
+
'<td>'+esc(x.单号||'-')+'</td><td style="color:#8b949e">'+esc(x.建议)+'</td></tr>').join('')+'</tbody></table>';
|
|
4735
4747
|
$('btnDlMissing').style.display='';
|
|
4736
4748
|
}else h='<div class="notice">✅ 全部对得上,没有缺失。</div>';
|
|
4737
4749
|
$('checkWrap').innerHTML=h;
|
|
@@ -4861,7 +4873,7 @@ function dlMissing(){
|
|
|
4861
4873
|
const aoa=[C.MISSING_HEAD].concat(S.missing.map(m=>C.MISSING_HEAD.map(h=>m[h]||'')));
|
|
4862
4874
|
aoaToXlsx([aoa],['缺失编码清单'],'缺失编码清单.xlsx');
|
|
4863
4875
|
}else{
|
|
4864
|
-
const aoa=[['来源单据','维度','业务里的名称','建议']].concat(S.checkRows.map(x=>[x.来源单据,x.维度,x.名称,x.建议]));
|
|
4876
|
+
const aoa=[['来源单据','维度','业务里的名称','单号','建议']].concat(S.checkRows.map(x=>[x.来源单据,x.维度,x.名称,x.单号||'',x.建议]));
|
|
4865
4877
|
aoaToXlsx([aoa],['缺失清单'],'缺失编码清单.xlsx');
|
|
4866
4878
|
}
|
|
4867
4879
|
}
|
|
@@ -5498,7 +5510,13 @@ function switchTab(t){
|
|
|
5498
5510
|
document.querySelectorAll('.pane').forEach(p=>p.classList.toggle('on',p.id==='tab-'+t));
|
|
5499
5511
|
if(t==='maps'&&!$('monthlyForm').innerHTML)renderMaps();
|
|
5500
5512
|
if(t==='vrules'&&!$('ruleList').innerHTML)renderRules();
|
|
5501
|
-
if(t==='gen'
|
|
5513
|
+
if(t==='gen'){
|
|
5514
|
+
if(!$('ruleChecks').innerHTML)renderRuleChecks();
|
|
5515
|
+
// 【P1.2.51】切到生成页时,把最新的凭证起始号同步到生成栏,避免月度参数页改了这里还是旧值
|
|
5516
|
+
const v2=document.querySelector('input[data-mk="vstart"]');
|
|
5517
|
+
const vs=v2?v2.value:(S.monthly.vstart||1);
|
|
5518
|
+
if($('genVStart'))$('genVStart').value=vs;
|
|
5519
|
+
}
|
|
5502
5520
|
if(t==='audit')renderAudit();
|
|
5503
5521
|
}
|
|
5504
5522
|
async function init(){
|
|
@@ -5545,6 +5563,7 @@ async function init(){
|
|
|
5545
5563
|
S.balance=S.draft.length?E.balanceCheck(S.draft):null;
|
|
5546
5564
|
S.rules.forEach(r=>S.selRules.add(r.id));
|
|
5547
5565
|
if(S.monthly.date)$('genDate').value=S.monthly.date;
|
|
5566
|
+
if($('genVStart'))$('genVStart').value=S.monthly.vstart||1;
|
|
5548
5567
|
// 4) 顶部持久化状态提示(让用户一眼看清"能不能撑过刷新")
|
|
5549
5568
|
renderPersistHint();
|
|
5550
5569
|
if(getUpdUrl() && location.protocol!=='blob:' && window.parent===window) checkUpdate(true); // 已配置更新地址则静默检查一次;启动器内(blob URL 或 iframe srcdoc)由启动器统一处理更新
|
package/dist/version.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
|
-
"ver": "P1.2.
|
|
3
|
-
"npm": "1.2.
|
|
4
|
-
"url": "https://cdn.jsdelivr.net/npm/wwt-certificate-tool@1.2.
|
|
5
|
-
"url_unpkg": "https://unpkg.com/wwt-certificate-tool@1.2.
|
|
6
|
-
"url_gh": "https://api.github.com/repos/huweipei745839/certificate-generation/contents/dist/WWT%E5%87%AD%E8%AF%81%E5%B7%A5%E5%85%B7_P1.2.
|
|
7
|
-
"note": "①
|
|
2
|
+
"ver": "P1.2.52",
|
|
3
|
+
"npm": "1.2.52",
|
|
4
|
+
"url": "https://cdn.jsdelivr.net/npm/wwt-certificate-tool@1.2.52/dist/app.html",
|
|
5
|
+
"url_unpkg": "https://unpkg.com/wwt-certificate-tool@1.2.52/dist/app.html",
|
|
6
|
+
"url_gh": "https://api.github.com/repos/huweipei745839/certificate-generation/contents/dist/WWT%E5%87%AD%E8%AF%81%E5%B7%A5%E5%85%B7_P1.2.52.html",
|
|
7
|
+
"note": "① 内置默认基础表/规则/映射:新安装或分享打开即自带当前这套标准配置。② 生成凭证后实际生成了凭证的规则自动变绿并显示「已生成」徽章,状态持久化。③ 新增「清空已生成」按钮。④ 凭证起始号放到「④ 生成凭证」页生成栏。⑤ 【P1.2.52】对碰检测跳过未结算单据,缺失清单增加「单号」列。"
|
|
8
8
|
}
|