Compare commits

...

3 Commits

Author SHA1 Message Date
ea1c5a7835 fix: salesman角色添加order:update权限,修复修改物流单号403问题
业务员修改物流单号时PUT /api/orders/{id}/tracking返回403,
根因是salesman角色缺少order:update权限码。在DEFAULT_ROLE_PERMISSIONS、
DEFAULT_ROLE_MENU_CODES和DEFAULT_MENUS三处同步补全。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-06 14:31:43 +08:00
e1b7de50a5 fix: 数量输入变更时重新计算需求规格结果
数量输入框添加@input触发calcDemandResult,确保修改数量后
计算结果和公式展示同步更新(管理员和业务员页面)。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-06 10:43:07 +08:00
0b45356292 fix: 新建订单需求规格计算和公式展示加入数量乘数
产品明细中需求规格的计算结果和公式展示从仅显示单件面积改为
面积×数量的总面积,管理员和业务员新建订单页面同步修改。

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-06 10:28:59 +08:00
4 changed files with 18 additions and 9 deletions

View File

@ -77,6 +77,7 @@ class AuthService:
"order:list",
"order:create",
"order:submit",
"order:update",
"customer:list",
"reminder:list",
"ai:parse-order",

View File

@ -104,6 +104,7 @@ DEFAULT_MENUS = [
# 按钮权限 - 订单相关
{"id": 20, "parent_id": 5, "menu_name": "提交审核", "menu_path": "", "menu_type": "button", "permission_code": "order:submit", "icon": "", "sort_no": 20, "status": 1},
{"id": 21, "parent_id": 5, "menu_name": "取消审批", "menu_path": "", "menu_type": "button", "permission_code": "order:cancel-approve", "icon": "", "sort_no": 21, "status": 1},
{"id": 24, "parent_id": 5, "menu_name": "订单更新", "menu_path": "", "menu_type": "button", "permission_code": "order:update", "icon": "", "sort_no": 24, "status": 1},
# 按钮权限 - 基础资料
{"id": 22, "parent_id": 3, "menu_name": "定价规则编辑", "menu_path": "", "menu_type": "button", "permission_code": "master-data:update", "icon": "", "sort_no": 22, "status": 1},
@ -164,6 +165,7 @@ DEFAULT_ROLE_MENU_CODES = {
"order:list",
"order:create",
"order:submit",
"order:update",
"customer:list",
"reminder:list",
"ai:parse-order",

View File

@ -243,7 +243,7 @@
</label>
<label>
<span>数量</span>
<input v-model.number="row.quantity" type="number" min="0.01" step="0.01" />
<input v-model.number="row.quantity" type="number" min="0.01" step="0.01" @input="calcDemandResult(row)" />
</label>
</div>
</div>
@ -820,10 +820,13 @@ function calcDemandResult(row) {
const toM = (v, u) => (u === "m" ? v : u === "mm" ? v / 1000 : v / 100);
const m1 = toM(v1, u1);
const m2 = toM(v2, u2);
const area = m1 * m2;
row._demandResult = `${area.toFixed(4)}`;
row._demandCalcHint = `${v1}${u1} × ${v2}${u2} = ${m1}m × ${m2}m = ${area.toFixed(4)}`;
// 使
const qty = Number(row.quantity) || 0;
const total = m1 * m2 * qty;
row._demandResult = qty > 0 ? `${total.toFixed(4)}` : `${(m1 * m2).toFixed(4)}`;
row._demandCalcHint = qty > 0
? `${v1}${u1} × ${v2}${u2} × ${qty} = ${m1}m × ${m2}m × ${qty} = ${total.toFixed(4)}`
: `${v1}${u1} × ${v2}${u2} = ${m1}m × ${m2}m = ${(m1 * m2).toFixed(4)}`;
// 使
row.length_m = m2;
row.width_m = m1;
return;

View File

@ -223,7 +223,7 @@
</label>
<label>
<span>数量</span>
<input v-model.number="row.quantity" type="number" min="0.01" step="0.01" />
<input v-model.number="row.quantity" type="number" min="0.01" step="0.01" @input="calcDemandResult(row)" />
</label>
<!-- 特殊计价字段 -->
<label>
@ -808,9 +808,12 @@ function calcDemandResult(row) {
const m2 = toM(v2, u2);
row.length_m = m2;
row.width_m = m1;
const area = m1 * m2;
row._demandResult = `${area.toFixed(4)}`;
row._demandCalcHint = `${v1}${u1} × ${v2}${u2} = ${m1}m × ${m2}m = ${area.toFixed(4)}`;
const qty = Number(row.quantity) || 0;
const total = m1 * m2 * qty;
row._demandResult = qty > 0 ? `${total.toFixed(4)}` : `${(m1 * m2).toFixed(4)}`;
row._demandCalcHint = qty > 0
? `${v1}${u1} × ${v2}${u2} × ${qty} = ${m1}m × ${m2}m × ${qty} = ${total.toFixed(4)}`
: `${v1}${u1} × ${v2}${u2} = ${m1}m × ${m2}m = ${(m1 * m2).toFixed(4)}`;
return;
}