云
5 小时以前 7a93a85f75bcfc8001ea1d3b921860806a8209ac
src/mobile/access.ts
@@ -8,6 +8,12 @@
  { key: 'quality', title: '种子质检', hint: '袋码、托盘与批次', icon: 'scan', permission: 'mes:qc-seed-quality:submit' },
  { key: 'quality-records', title: '质检记录', hint: '结果与不合格原因', icon: 'records', permission: 'mes:qc-seed-quality:query' },
  { key: 'sales', title: '销售出库', hint: '拣货、运单与出库', icon: 'box', permission: 'mes:wm-product-sales:query' },
  { key: 'productissue', title: '生产领料', hint: '扫码领用物料', icon: 'work', permission: 'mes:wm-product-issue:create' },
  { key: 'miscissue', title: '其他出库', hint: '扫码新增出库明细', icon: 'box', permission: 'mes:wm-misc-issue:create' },
  { key: 'transfer', title: '库存移库', hint: '扫码新增移库明细', icon: 'layers', permission: 'mes:wm-transfer:create' },
  { key: 'stocktaking', title: '盘点任务', hint: '扫码提交盘点数量', icon: 'records', permission: 'mes:wm-stock-taking-task:update' },
  { key: 'returnsales', title: '销售退货', hint: '扫码新增退货明细', icon: 'back', permission: 'mes:wm-return-sales:create' },
  { key: 'returnissue', title: '生产退料', hint: '扫码新增退料明细', icon: 'warehouse', permission: 'mes:wm-return-issue:create' },
] as const;
export function can(permission: string) { return useAccessStore().accessCodes.includes(permission); }
export function availableFeatures() {
@@ -20,14 +26,4 @@
  if (key === 'records') return can('mes:pro-scan-in:query') && useAccessStore().accessMenus.some(m => m.path === '/mobile/inbound');
  return availableFeatures().some(f => f.key === key);
}
export function extractCode(raw: string) {
  let value = raw.trim();
  if (!value) throw new Error('请扫描或输入码值');
  if (/^https?:\/\//i.test(value)) {
    const code = new URL(value).searchParams.get('code');
    if (!code) throw new Error('该链接不包含业务码值');
    value = code.trim();
  }
  if (!value || value.length > 64 || /\s/.test(value)) throw new Error('码值格式不正确');
  return value;
}
export { extractCode } from '#/utils/traceCode';