fix: 生产订单数量放宽为正整數(≥1、不限位数、禁止小数)

- 用户澄清"保持个位"实为"不要小数点":移除 1–9 单 digit 上限,允许任意位正整数(如 12、100)
- 前端 capQty 改为仅保留数字、去小数点/负号、允许多位;输入框去掉 maxlength=1
- 后端 _bom_qty_invalid 改为校验正整数(≥1 且非小数),拒绝 1.5 等带小数点数量并提示

Co-Authored-By: WorkBuddy <workbuddy@tencent.com>
This commit is contained in:
2026-10-26 11:10:05 +08:00
co-authored by WorkBuddy
parent 38ee24f6ee
commit 27fb218c40
2 changed files with 21 additions and 20 deletions
+5 -7
View File
@@ -9,7 +9,7 @@
<input name="order_no" value="{{ o.order_no if o else '' }}" placeholder="如 WO20260911xxx">
<label>BOM 与生产数量 *</label>
<p class="small muted" style="margin:0 0 6px">可在同一订单中加入多个 BOM,每个 BOM 独立填写生产数量(限 <b>1–9 的个位正整数</b>);点击「+ 添加 BOM」增加一行,不需要的行可删除。</p>
<p class="small muted" style="margin:0 0 6px">可在同一订单中加入多个 BOM,每个 BOM 独立填写生产数量(限<b>正整数,不含小数点</b>,如 1、12、100);点击「+ 添加 BOM」增加一行,不需要的行可删除。</p>
<div id="bomRows" class="bom-rows"></div>
<button type="button" class="btn" style="margin:2px 0 12px" onclick="addBomRow()">+ 添加 BOM</button>
@@ -36,18 +36,16 @@
<option value="">-- 选择 BOM --</option>
{% for b in boms %}<option value="{{ b.id }}">{{ b.code }}{% if b.name %} · {{ b.name }}{% endif %}</option>{% endfor %}
</select>
<input name="qty[]" type="text" inputmode="numeric" maxlength="1" required placeholder="数量 1-9" style="width:110px" oninput="capQty(this)">
<input name="qty[]" type="text" inputmode="numeric" required placeholder="数量(整数)" style="width:130px" oninput="capQty(this)">
<button type="button" class="link-danger" onclick="this.closest('.bom-row').remove();checkRows()">删除</button>
</div>
</template>
<script>
function capQty(el){
// 仅允许 1–9 的个位正整数: 去非数字、限制 1 位、超出范围清空
var v = (el.value || '').replace(/[^0-9]/g, '');
if (v.length > 1) v = v.slice(0, 1);
if (v !== '' && (parseInt(v, 10) < 1 || parseInt(v, 10) > 9)) v = '';
el.value = v;
// 仅保留数字, 禁止小数点/负号, 允许多位正整数(不限位数)
var v = (el.value || '').replace(/[^\d]/g, '');
el.value = v === '' ? '' : String(parseInt(v, 10));
}
function addBomRow(sel, qty){
var tpl = document.getElementById('bomTpl');