/** 结算菜单拆分后的展示名与权限前缀 */ export const SETTLEMENT_TYPE_PAYABLE = 'payable'; export const SETTLEMENT_TYPE_RECEIVABLE = 'receivable'; export function settlementBillLabel(settlementType) { return settlementType === SETTLEMENT_TYPE_RECEIVABLE ? '收款结算单' : '付款结算单'; } export function settlementPermissionPrefix(settlementType) { return settlementType === SETTLEMENT_TYPE_RECEIVABLE ? 'receipt_settlement' : 'payment_settlement'; } export function settlementListPath(settlementType) { return settlementType === SETTLEMENT_TYPE_RECEIVABLE ? '/settlement/receipt-settlement' : '/settlement/payment-settlement'; } /** * 权限判断:优先新菜单码,兼容旧 formal_settlement_*。 * @param {Object} ctx 组件实例(需含 permission、isAdmin、validData) * @param {string} settlementType payable|receivable * @param {string} action add|edit|view... */ export function hasSettlementPermission(ctx, settlementType, action) { if (ctx?.isAdmin) return true; const prefix = settlementPermissionPrefix(settlementType); const codes = [`${prefix}_${action}`, `formal_settlement_${action}`]; return codes.some(code => { const value = ctx?.permission?.[code]; if (typeof ctx?.validData === 'function') { return ctx.validData(value, false); } return value === true; }); }