liu
2026-10-27 c67da2d96eb93b8f2e542c194f391b4f2051aa99
refactor(permission): 移除查询按钮权限并按菜单过滤首页
已添加1个文件
已修改94个文件
256 ■■■■■ 文件已修改
src/utils/menu-access.ts 43 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/aftersales/compensation/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/ai/knowledge/document/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/ai/knowledge/knowledge/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/form/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/oa/notice/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/processInstance/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/processInstance/manager/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/processInstance/report/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/task/copy/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/task/manager/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/bpm/task/todo/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/crm/cancellation/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/crm/contract/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/crm/refund/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/analytics/index.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/analytics/modules/alert-panel.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/analytics/modules/biz-cards.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/analytics/modules/kpi-cards.vue 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/dashboard/analytics/modules/quick-actions.vue 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/energy/alert/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/energy/meter/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/energy/quota/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/energy/record/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/finance/payment/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/finance/receipt/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/purchase/in/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/purchase/invoice/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/purchase/order/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/purchase/plan/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/purchase/request/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/purchase/return/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/sale/order/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/sale/out/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/sale/return/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/stock/check/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/stock/in/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/stock/move/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/erp/stock/out/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hrm/certificate/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/hrm/training/index.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/im/manager/face/pack/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/im/manager/group/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/im/manager/message/group/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/im/manager/message/private/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/im/manager/rtc/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infra/apiAccessLog/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infra/apiErrorLog/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infra/job/index.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/infra/job/logger/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/cal/calendar/components/use-calendar.ts 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/cal/scheduleDetail/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/dv/checkrecord/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/dv/machinery/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/dv/maintenrecord/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/dv/metering/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/dv/meteringcheck/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/dv/repair/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/md/workstation/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pd/basedata/modules/base-table.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pd/ctc-reel/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pd/ctc/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pd/product/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pd/tech-confirm/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/alternativeplan/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/andon/record/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/emergencyplan/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/maintenance-plan/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/maintenancecalendar/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/mps/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/pro/workorder/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/batchtrace/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/ipqc/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/iqc/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/oqc/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/outsourcetest/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/mes/qc/rqc/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/srm/supplierCertificate/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/loginlog/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/mail/log/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/notify/message/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/operatelog/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/sms/log/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/system/social/user/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/barcode/index.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/sn/index.vue 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/sn/modules/detail.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/stocktaking/task/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/warehouse/area/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/warehouse/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wls/warehouse/location/index.vue 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wms/order/check/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wms/order/movement/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wms/order/receipt/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/views/wms/order/shipment/index.vue 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/utils/menu-access.ts
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,43 @@
import type { RouteRecordRaw } from 'vue-router';
import { computed } from 'vue';
import { useAccessStore } from '@vben/stores';
export const QUALITY_MENU_ROUTES = [
  'MesQcIqc',
  'MesQcIpqc',
  'MesQcOqc',
  'MesQcRqc',
] as const;
export function collectAccessibleRouteNames(routes: RouteRecordRaw[]): Set<string> {
  const names = new Set<string>();
  const visit = (items: RouteRecordRaw[]) => {
    for (const route of items) {
      if (typeof route.name === 'string') {
        names.add(route.name);
      }
      if (route.children) {
        visit(route.children);
      }
    }
  };
  visit(routes);
  return names;
}
export function useMenuAccess() {
  const accessStore = useAccessStore();
  const routeNames = computed(() => collectAccessibleRouteNames(accessStore.accessRoutes));
  function firstAccessibleRoute(names: readonly string[]) {
    return names.find((name) => routeNames.value.has(name));
  }
  function hasMenuAccess(names: readonly string[]) {
    return firstAccessibleRoute(names) !== undefined;
  }
  return { firstAccessibleRoute, hasMenuAccess };
}
src/views/aftersales/compensation/index.vue
@@ -193,7 +193,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['aftersales:compensation:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/ai/knowledge/document/index.vue
@@ -188,7 +188,6 @@
              label: '分段',
              type: 'link',
              icon: ACTION_ICON.BOOK,
              auth: ['ai:knowledge:query'],
              onClick: handleSegment.bind(null, row.id),
            },
            {
src/views/ai/knowledge/knowledge/index.vue
@@ -160,14 +160,12 @@
              label: $t('ui.widgets.document'),
              type: 'link',
              icon: ACTION_ICON.BOOK,
              auth: ['ai:knowledge:query'],
              onClick: handleDocument.bind(null, row.id),
            },
            {
              label: '召回测试',
              type: 'link',
              icon: ACTION_ICON.SEARCH,
              auth: ['ai:knowledge:query'],
              onClick: handleRetrieval.bind(null, row.id),
            },
            {
src/views/bpm/form/index.vue
@@ -185,7 +185,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['bpm:form:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/bpm/oa/notice/index.vue
@@ -139,7 +139,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['bpm:oa-notice:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/bpm/processInstance/index.vue
@@ -192,7 +192,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['bpm:process-instance:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/bpm/processInstance/manager/index.vue
@@ -120,7 +120,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['bpm:process-instance:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/bpm/processInstance/report/index.vue
@@ -141,7 +141,6 @@
              label: '详情',
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['bpm:process-instance:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/bpm/task/copy/index.vue
@@ -65,7 +65,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['bpm:task:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/bpm/task/manager/index.vue
@@ -62,7 +62,6 @@
              label: '历史',
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['bpm:task:query'],
              onClick: handleHistory.bind(null, row),
            },
          ]"
src/views/bpm/task/todo/index.vue
@@ -63,7 +63,6 @@
              label: '办理',
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['bpm:task:query'],
              onClick: handleAudit.bind(null, row),
            },
          ]"
src/views/crm/cancellation/index.vue
@@ -196,7 +196,6 @@
            {
              label: '查看',
              type: 'link',
              auth: ['crm:cancellation:query'],
              // å®¡æ ¸é€šè¿‡åŽä»…提供只读详情入口
              ifShow: row.auditStatus === 20,
              onClick: handleView.bind(null, row),
src/views/crm/contract/index.vue
@@ -355,7 +355,6 @@
            {
              label: '查看订单',
              type: 'link',
              auth: ['erp:sale-order:query'],
              onClick: handleViewOrder.bind(null, row),
              ifShow: !!row.orderId,
            },
src/views/crm/refund/index.vue
@@ -194,7 +194,6 @@
            {
              label: '查看',
              type: 'link',
              auth: ['crm:refund:query'],
              // å®¡æ ¸é€šè¿‡åŽä»…提供只读详情入口
              ifShow: row.auditStatus === 20,
              onClick: handleView.bind(null, row),
src/views/dashboard/analytics/index.vue
@@ -3,11 +3,11 @@
import { useRouter } from 'vue-router';
import { Page } from '@vben/common-ui';
import { useAccess } from '@vben/access';
import { Card, Col, Row } from 'ant-design-vue';
import { getHomeSummary } from '#/api/mes/home';
import { QUALITY_MENU_ROUTES, useMenuAccess } from '#/utils/menu-access';
import { defaultSummary } from './data';
import AlertPanel from './modules/alert-panel.vue';
@@ -19,27 +19,27 @@
defineOptions({ name: 'DashboardAnalytics' });
const router = useRouter();
const { hasAccessByCodes } = useAccess();
const { hasMenuAccess } = useMenuAccess();
const summary = ref(defaultSummary);
const canViewProduction = computed(() =>
  hasAccessByCodes(['mes:pro-work-order:query', 'mes:pro-feedback:query']),
  hasMenuAccess(['MesProWorkOrder', 'MesProFeedback']),
);
const canViewAlerts = computed(() =>
  hasAccessByCodes([
    'mes:pro-work-order:query',
    'mes:pro-andon-record:query',
    'mes:dv-repair:query',
  hasMenuAccess([
    'MesProWorkOrder',
    'MesProAndonRecord',
    'MesDvRepair',
  ]),
);
const canViewMesSummary = computed(() =>
  hasAccessByCodes([
    'mes:pro-work-order:query',
    'mes:pro-feedback:query',
    'mes:qc-ipqc:query',
    'mes:dv-machinery:query',
    'mes:pro-andon-record:query',
    'mes:dv-repair:query',
  hasMenuAccess([
    'MesProWorkOrder',
    'MesProFeedback',
    ...QUALITY_MENU_ROUTES,
    'MesDvMachinery',
    'MesProAndonRecord',
    'MesDvRepair',
  ]),
);
src/views/dashboard/analytics/modules/alert-panel.vue
@@ -5,13 +5,13 @@
import { computed, onMounted, ref } from 'vue';
import { CountTo } from '@vben/common-ui';
import { useAccess } from '@vben/access';
import { IconifyIcon } from '@vben/icons';
import { EchartsUI, useEcharts } from '@vben/plugins/echarts';
import { Spin } from 'ant-design-vue';
import { getWorkOrderStatusDistribution } from '#/api/mes/home';
import { useMenuAccess } from '#/utils/menu-access';
defineOptions({ name: 'DashboardAlertPanel' });
@@ -23,10 +23,10 @@
const emit = defineEmits<{
  navigate: [name: string];
}>();
const { hasAccessByCodes } = useAccess();
const canViewWorkOrder = computed(() => hasAccessByCodes(['mes:pro-work-order:query']));
const canViewAndon = computed(() => hasAccessByCodes(['mes:pro-andon-record:query']));
const canViewRepair = computed(() => hasAccessByCodes(['mes:dv-repair:query']));
const { hasMenuAccess } = useMenuAccess();
const canViewWorkOrder = computed(() => hasMenuAccess(['MesProWorkOrder']));
const canViewAndon = computed(() => hasMenuAccess(['MesProAndonRecord']));
const canViewRepair = computed(() => hasMenuAccess(['MesDvRepair']));
const chartRef = ref<EchartsUIType>();
const { renderEcharts } = useEcharts(chartRef);
src/views/dashboard/analytics/modules/biz-cards.vue
@@ -1,7 +1,6 @@
<script lang="ts" setup>
import { onMounted, ref } from 'vue';
import { computed, onMounted, ref } from 'vue';
import { useAccess } from '@vben/access';
import { CountTo } from '@vben/common-ui';
import { IconifyIcon } from '@vben/icons';
@@ -11,17 +10,18 @@
import { getSaleOrderPage } from '#/api/erp/sale/order';
import { getMaterialStockPage } from '#/api/mes/wm/materialstock';
import { getTaskTodoPage } from '#/api/bpm/task';
import { useMenuAccess } from '#/utils/menu-access';
defineOptions({ name: 'DashboardBizCards' });
const emit = defineEmits<{
  navigate: [name: string];
}>();
const { hasAccessByCodes } = useAccess();
const canPurchase = hasAccessByCodes(['erp:purchase-order:query']);
const canSale = hasAccessByCodes(['erp:sale-order:query']);
const canStock = hasAccessByCodes(['mes:wm-material-stock:query']);
const canBpmTodo = hasAccessByCodes(['bpm:task:query']);
const { hasMenuAccess } = useMenuAccess();
const canPurchase = computed(() => hasMenuAccess(['ErpPurchaseOrder']));
const canSale = computed(() => hasMenuAccess(['ErpSaleOrder']));
const canStock = computed(() => hasMenuAccess(['MesWmMaterialStock']));
const canBpmTodo = computed(() => hasMenuAccess(['BpmTaskTodo']));
const purchaseCount = ref(0);
const saleCount = ref(0);
@@ -81,10 +81,10 @@
}
onMounted(() => {
  if (canPurchase) loadPurchase();
  if (canSale) loadSale();
  if (canStock) loadStock();
  if (canBpmTodo) loadBpmTodo();
  if (canPurchase.value) loadPurchase();
  if (canSale.value) loadSale();
  if (canStock.value) loadStock();
  if (canBpmTodo.value) loadBpmTodo();
});
</script>
src/views/dashboard/analytics/modules/kpi-cards.vue
@@ -4,24 +4,23 @@
import { computed, ref } from 'vue';
import { CountTo } from '@vben/common-ui';
import { useAccess } from '@vben/access';
import { IconifyIcon } from '@vben/icons';
import { Col, Row } from 'ant-design-vue';
import { QUALITY_MENU_ROUTES, useMenuAccess } from '#/utils/menu-access';
defineOptions({ name: 'DashboardKpiCards' });
const props = defineProps<{
  summary: MesHomeApi.Summary;
}>();
const { hasAccessByCodes } = useAccess();
const { firstAccessibleRoute, hasMenuAccess } = useMenuAccess();
const canViewWorkOrder = computed(() => hasAccessByCodes(['mes:pro-work-order:query']));
const canViewFeedback = computed(() => hasAccessByCodes(['mes:pro-feedback:query']));
const canViewQuality = computed(() => hasAccessByCodes([
  'mes:qc-iqc:query', 'mes:qc-ipqc:query', 'mes:qc-oqc:query', 'mes:qc-rqc:query',
]));
const canViewEquipment = computed(() => hasAccessByCodes(['mes:dv-machinery:query']));
const canViewWorkOrder = computed(() => hasMenuAccess(['MesProWorkOrder']));
const canViewFeedback = computed(() => hasMenuAccess(['MesProFeedback']));
const qualityRoute = computed(() => firstAccessibleRoute(QUALITY_MENU_ROUTES));
const canViewQuality = computed(() => Boolean(qualityRoute.value));
const canViewEquipment = computed(() => hasMenuAccess(['MesDvMachinery']));
const emit = defineEmits<{
  navigate: [name: string];
@@ -136,7 +135,7 @@
        :style="tiltStyle('quality')"
        @mousemove="(e: MouseEvent) => onMouseMove(e, 'quality')"
        @mouseleave="onMouseLeave('quality')"
        @click="emit('navigate', 'MesQcRecord')"
        @click="qualityRoute && emit('navigate', qualityRoute)"
      >
        <div class="relative z-10 flex items-center gap-4 p-5">
          <div class="flex size-12 flex-shrink-0 items-center justify-center rounded-xl bg-gradient-to-br from-orange-500 to-amber-400 shadow-lg shadow-orange-500/25 transition-transform duration-300 group-hover:scale-110">
src/views/dashboard/analytics/modules/quick-actions.vue
@@ -1,8 +1,9 @@
<script lang="ts" setup>
import { computed } from 'vue';
import { useAccess } from '@vben/access';
import { IconifyIcon } from '@vben/icons';
import { QUALITY_MENU_ROUTES, useMenuAccess } from '#/utils/menu-access';
defineOptions({ name: 'DashboardQuickActions' });
@@ -16,22 +17,25 @@
  route: string;
  gradient: string;
  shadow: string;
  permissions: string[];
  routes: readonly string[];
}
const { hasAccessByCodes } = useAccess();
const { firstAccessibleRoute } = useMenuAccess();
const allActions: QuickAction[] = [
  { title: '生产工单', icon: 'lucide:file-text', route: 'MesProWorkOrder', gradient: 'from-blue-500 to-cyan-500', shadow: 'shadow-blue-500/15', permissions: ['mes:pro-work-order:query'] },
  { title: '生产报工', icon: 'lucide:check-square', route: 'MesProFeedback', gradient: 'from-emerald-500 to-green-500', shadow: 'shadow-emerald-500/15', permissions: ['mes:pro-feedback:query'] },
  { title: '质检管理', icon: 'lucide:clipboard-check', route: 'MesQcIqc', gradient: 'from-orange-500 to-amber-500', shadow: 'shadow-orange-500/15', permissions: ['mes:qc-iqc:query', 'mes:qc-ipqc:query', 'mes:qc-oqc:query', 'mes:qc-rqc:query'] },
  { title: '设备台账', icon: 'lucide:settings', route: 'MesDvMachinery', gradient: 'from-violet-500 to-purple-500', shadow: 'shadow-violet-500/15', permissions: ['mes:dv-machinery:query'] },
  { title: '员工排班', icon: 'lucide:calendar-range', route: 'MesCalScheduleDetail', gradient: 'from-cyan-500 to-teal-500', shadow: 'shadow-cyan-500/15', permissions: ['mes:cal-schedule-detail:query'] },
  { title: '安灯呼叫', icon: 'lucide:bell-ring', route: 'MesProAndonRecord', gradient: 'from-red-500 to-rose-500', shadow: 'shadow-red-500/15', permissions: ['mes:pro-andon-record:query'] },
  { title: '物料库存', icon: 'lucide:package-search', route: 'MesWmMaterialStock', gradient: 'from-indigo-500 to-blue-500', shadow: 'shadow-indigo-500/15', permissions: ['mes:wm-material-stock:query'] },
  { title: '工艺路线', icon: 'lucide:route', route: 'MesProRoute', gradient: 'from-teal-500 to-emerald-500', shadow: 'shadow-teal-500/15', permissions: ['mes:pro-route:query'] },
  { title: '生产工单', icon: 'lucide:file-text', route: 'MesProWorkOrder', gradient: 'from-blue-500 to-cyan-500', shadow: 'shadow-blue-500/15', routes: ['MesProWorkOrder'] },
  { title: '生产报工', icon: 'lucide:check-square', route: 'MesProFeedback', gradient: 'from-emerald-500 to-green-500', shadow: 'shadow-emerald-500/15', routes: ['MesProFeedback'] },
  { title: '质检管理', icon: 'lucide:clipboard-check', route: 'MesQcIqc', gradient: 'from-orange-500 to-amber-500', shadow: 'shadow-orange-500/15', routes: QUALITY_MENU_ROUTES },
  { title: '设备台账', icon: 'lucide:settings', route: 'MesDvMachinery', gradient: 'from-violet-500 to-purple-500', shadow: 'shadow-violet-500/15', routes: ['MesDvMachinery'] },
  { title: '员工排班', icon: 'lucide:calendar-range', route: 'MesCalScheduleDetail', gradient: 'from-cyan-500 to-teal-500', shadow: 'shadow-cyan-500/15', routes: ['MesCalScheduleDetail'] },
  { title: '安灯呼叫', icon: 'lucide:bell-ring', route: 'MesProAndonRecord', gradient: 'from-red-500 to-rose-500', shadow: 'shadow-red-500/15', routes: ['MesProAndonRecord'] },
  { title: '物料库存', icon: 'lucide:package-search', route: 'MesWmMaterialStock', gradient: 'from-indigo-500 to-blue-500', shadow: 'shadow-indigo-500/15', routes: ['MesWmMaterialStock'] },
  { title: '工艺路线', icon: 'lucide:route', route: 'MesProRoute', gradient: 'from-teal-500 to-emerald-500', shadow: 'shadow-teal-500/15', routes: ['MesProRoute'] },
];
const actions = computed(() =>
  allActions.filter((action) => hasAccessByCodes(action.permissions)),
  allActions.flatMap((action) => {
    const route = firstAccessibleRoute(action.routes);
    return route ? [{ ...action, route }] : [];
  }),
);
</script>
src/views/energy/alert/index.vue
@@ -127,7 +127,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:em-alert:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/energy/meter/index.vue
@@ -129,7 +129,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:em-meter:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/energy/quota/index.vue
@@ -129,7 +129,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:em-quota:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/energy/record/index.vue
@@ -131,7 +131,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:em-record:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/erp/finance/payment/index.vue
@@ -239,7 +239,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:finance-payment:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
@@ -263,7 +262,6 @@
              label: '查看审批',
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:finance-payment:query'],
              ifShow: () => row.status === 20 || !!row.reviewRemark,
              onClick: handleViewProcess.bind(null, row),
            },
src/views/erp/finance/receipt/index.vue
@@ -174,7 +174,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:finance-receipt:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/erp/purchase/in/index.vue
@@ -193,7 +193,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:purchase-in:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/erp/purchase/invoice/index.vue
@@ -170,7 +170,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:purchase-invoice:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/erp/purchase/order/index.vue
@@ -290,7 +290,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:purchase-order:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
@@ -314,7 +313,6 @@
              label: '查看审批',
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:purchase-order:query'],
              ifShow: () => row.status === 20 || row.status === 30,
              onClick: handleViewProcess.bind(null, row),
            },
src/views/erp/purchase/plan/index.vue
@@ -316,7 +316,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:purchase-plan:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/erp/purchase/request/index.vue
@@ -295,7 +295,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:purchase-request:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/erp/purchase/return/index.vue
@@ -175,7 +175,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:purchase-return:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/erp/sale/order/index.vue
@@ -335,7 +335,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:sale-order:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/erp/sale/out/index.vue
@@ -171,7 +171,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:sale-out:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/erp/sale/return/index.vue
@@ -174,7 +174,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:sale-return:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/erp/stock/check/index.vue
@@ -174,7 +174,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:stock-check:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/erp/stock/in/index.vue
@@ -171,7 +171,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:stock-in:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/erp/stock/move/index.vue
@@ -174,7 +174,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:stock-move:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/erp/stock/out/index.vue
@@ -174,7 +174,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['erp:stock-out:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/hrm/certificate/index.vue
@@ -167,7 +167,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['hrm:certificate:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/hrm/training/index.vue
@@ -196,7 +196,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['hrm:training:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
@@ -260,4 +259,4 @@
      </template>
    </Grid>
  </Page>
</template>
</template>
src/views/im/manager/face/pack/index.vue
@@ -169,7 +169,6 @@
              label: '管理表情',
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['im:manager:face-pack-item:query'],
              onClick: handleItems.bind(null, row),
            },
            {
src/views/im/manager/group/index.vue
@@ -133,7 +133,6 @@
              label: '详情',
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['im:manager:group:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/im/manager/message/group/index.vue
@@ -99,7 +99,6 @@
              label: '详情',
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['im:manager:message:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/im/manager/message/private/index.vue
@@ -90,7 +90,6 @@
              label: '详情',
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['im:manager:message:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/im/manager/rtc/index.vue
@@ -87,7 +87,6 @@
              label: '详情',
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['im:manager:rtc:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/infra/apiAccessLog/index.vue
@@ -90,7 +90,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['infra:api-access-log:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/infra/apiErrorLog/index.vue
@@ -112,7 +112,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['infra:api-error-log:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/infra/job/index.vue
@@ -252,7 +252,6 @@
              label: '执行日志',
              type: 'primary',
              icon: 'lucide:history',
              auth: ['infra:job:query'],
              onClick: () => handleLog(undefined),
            },
            {
@@ -312,13 +311,11 @@
            {
              label: $t('common.detail'),
              type: 'link',
              auth: ['infra:job:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
              label: '日志',
              type: 'link',
              auth: ['infra:job:query'],
              onClick: handleLog.bind(null, row),
            },
            {
src/views/infra/job/logger/index.vue
@@ -87,7 +87,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['infra:job:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/mes/cal/calendar/components/use-calendar.ts
@@ -53,7 +53,7 @@
        }
      }
    } catch {
      // æ²¡æœ‰ mes:cal-holiday:query æƒé™æˆ–接口异常时,仅忽略假期标记
      // æŽ¥å£å¼‚常时仅忽略假期标记。
    }
    holidaySet.value = days;
  }
src/views/mes/cal/scheduleDetail/index.vue
@@ -139,7 +139,6 @@
              label: '合规校验',
              type: 'primary',
              icon: ACTION_ICON.SEARCH,
              auth: ['mes:cal-schedule-detail:query'],
              onClick: handleCheck,
            },
          ]"
@@ -172,7 +171,6 @@
            {
              label: '合规校验',
              type: 'link',
              auth: ['mes:cal-schedule-detail:query'],
              onClick: handleCheckUser.bind(null, row),
            },
          ]"
src/views/mes/dv/checkrecord/index.vue
@@ -173,7 +173,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:dv-check-record:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/mes/dv/machinery/index.vue
@@ -185,7 +185,6 @@
                  label: $t('common.detail'),
                  type: 'link',
                  icon: ACTION_ICON.VIEW,
                  auth: ['mes:dv-machinery:query'],
                  onClick: handleDetail.bind(null, row),
                },
              ]"
src/views/mes/dv/maintenrecord/index.vue
@@ -173,7 +173,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:dv-mainten-record:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/mes/dv/metering/index.vue
@@ -187,7 +187,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:dv-metering:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/mes/dv/meteringcheck/index.vue
@@ -169,7 +169,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:dv-metering-check:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/mes/dv/repair/index.vue
@@ -193,7 +193,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:dv-repair:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/mes/md/workstation/index.vue
@@ -197,7 +197,6 @@
            // {
            //   label: '条码',
            //   type: 'link',
            //   auth: ['mes:md-workstation:query'],
            //   onClick: handleBarcode.bind(null, row),
            // },
          ]"
src/views/mes/pd/basedata/modules/base-table.vue
@@ -124,7 +124,6 @@
            label: '阶梯电价测算',
            type: 'primary',
            icon: ACTION_ICON.CALC,
            auth: ['mes:pd-basedata:query'],
            ifShow: config.key === 'tieredPrice',
            onClick: handleCalc,
          },
@@ -165,7 +164,6 @@
            label: $t('common.detail'),
            type: 'link',
            icon: ACTION_ICON.VIEW,
            auth: ['mes:pd-basedata:query'],
            onClick: handleDetail.bind(null, row),
          },
        ]"
src/views/mes/pd/ctc-reel/index.vue
@@ -166,7 +166,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:pd-ctc-reel:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/mes/pd/ctc/index.vue
@@ -177,7 +177,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:pd-ctc:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/mes/pd/product/index.vue
@@ -231,7 +231,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:pd-product:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/mes/pd/tech-confirm/index.vue
@@ -286,7 +286,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:pd-tech-confirm:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/mes/pro/alternativeplan/index.vue
@@ -178,7 +178,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:pro-alternative-plan:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/mes/pro/andon/record/index.vue
@@ -117,7 +117,6 @@
            {
              label: '安灯设置',
              type: 'primary',
              auth: ['mes:pro-andon-config:query'],
              onClick: handleOpenConfig,
            },
            {
@@ -143,7 +142,6 @@
            {
              label: '详情',
              type: 'link',
              auth: ['mes:pro-andon-record:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/mes/pro/emergencyplan/index.vue
@@ -178,7 +178,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:pro-emergency-plan:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/mes/pro/maintenance-plan/index.vue
@@ -233,7 +233,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:pro-maintenance-plan:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/mes/pro/maintenancecalendar/index.vue
@@ -178,7 +178,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:pro-maintenance-calendar:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/mes/pro/mps/index.vue
@@ -294,7 +294,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:pro-mps:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/mes/pro/workorder/index.vue
@@ -296,7 +296,6 @@
            // {
            //   label: '条码',
            //   type: 'link',
            //   auth: ['mes:pro-work-order:query'],
            //   onClick: handleBarcode.bind(null, row),
            // },
            {
src/views/mes/qc/batchtrace/index.vue
@@ -86,7 +86,6 @@
              label: '批次追溯',
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:wm-batch:query'],
              onClick: handleTrace.bind(null, row),
            },
          ]"
src/views/mes/qc/ipqc/index.vue
@@ -174,7 +174,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:qc-ipqc:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/mes/qc/iqc/index.vue
@@ -188,7 +188,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:qc-iqc:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/mes/qc/oqc/index.vue
@@ -174,7 +174,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:qc-oqc:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/mes/qc/outsourcetest/index.vue
@@ -180,7 +180,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:qc-outsource-test:query'],
              onClick: handleDetail.bind(null, row),
            },
            {
src/views/mes/qc/rqc/index.vue
@@ -174,7 +174,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:qc-rqc:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/srm/supplierCertificate/index.vue
@@ -135,7 +135,6 @@
              label: '到期提醒',
              type: 'warning',
              icon: 'ant-design:bell-outlined',
              auth: ['srm:supplier-certificate:query'],
              onClick: handleExpiringCertificates,
            },
          ]"
src/views/system/loginlog/index.vue
@@ -87,7 +87,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['system:login-log:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/system/mail/log/index.vue
@@ -75,7 +75,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['system:mail-log:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/system/notify/message/index.vue
@@ -67,7 +67,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['system:notify-message:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/system/operatelog/index.vue
@@ -87,7 +87,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['system:operate-log:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/system/sms/log/index.vue
@@ -87,7 +87,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['system:sms-log:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/system/social/user/index.vue
@@ -62,7 +62,6 @@
              label: $t('common.detail'),
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['system:social-user:query'],
              onClick: handleDetail.bind(null, row),
            },
          ]"
src/views/wls/barcode/index.vue
@@ -214,7 +214,6 @@
              label: '扫码解析',
              type: 'primary',
              icon: ACTION_ICON.SCAN,
              auth: ['mes:wm-barcode:query'],
              onClick: handleScan,
            },
            {
@@ -241,14 +240,12 @@
            {
              label: '条码设置',
              type: 'primary',
              auth: ['mes:wm-barcode-config:query'],
              onClick: handleConfig,
            },
            {
              label: '全链路追溯',
              type: 'primary',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:wm-batch:query'],
              onClick: handleTraceCenter,
            },
            {
@@ -277,14 +274,12 @@
            {
              label: $t('common.detail'),
              type: 'link',
              auth: ['mes:wm-barcode:query'],
              onClick: handleView.bind(null, row),
            },
            {
              label: '追溯',
              type: 'link',
              icon: ACTION_ICON.VIEW,
              auth: ['mes:wm-batch:query'],
              ifShow: isTraceable(row),
              onClick: handleTrace.bind(null, row),
            },
src/views/wls/sn/index.vue
@@ -243,7 +243,6 @@
                {
                  label: `${row.count ?? 0}`,
                  type: 'link',
                  auth: ['mes:wm-sn:query'],
                  onClick: handleDetail.bind(null, row),
                },
              ]"
@@ -255,7 +254,6 @@
                {
                  label: '查看明细',
                  type: 'link',
                  auth: ['mes:wm-sn:query'],
                  onClick: handleDetail.bind(null, row),
                },
                {
@@ -330,7 +328,6 @@
                {
                  label: '详情',
                  type: 'link',
                  auth: ['mes:wm-sn:query'],
                  onClick: handleSnDetail.bind(null, row),
                },
              ]"
src/views/wls/sn/modules/detail.vue
@@ -88,7 +88,6 @@
            {
              label: '条码',
              type: 'link',
              auth: ['mes:wm-sn:query'],
              onClick: handleBarcode.bind(null, row),
            },
          ]"
src/views/wls/stocktaking/task/index.vue
@@ -258,7 +258,6 @@
              label: '导入模板',
              type: 'primary',
              icon: ACTION_ICON.DOWNLOAD,
              auth: ['mes:wm-stock-taking-task:query'],
              onClick: handleImportTemplate,
            },
          ]"
src/views/wls/warehouse/area/index.vue
@@ -251,7 +251,6 @@
            {
              label: '条码',
              type: 'link',
              auth: ['mes:wm-warehouse:query'],
              onClick: handleBarcode.bind(null, row),
            },
          ]"
src/views/wls/warehouse/index.vue
@@ -174,7 +174,6 @@
            {
              label: '库区',
              type: 'link',
              auth: ['mes:wm-warehouse:query'],
              onClick: handleOpenLocation.bind(null, row),
            },
            {
@@ -198,7 +197,6 @@
            {
              label: '条码',
              type: 'link',
              auth: ['mes:wm-warehouse:query'],
              onClick: handleBarcode.bind(null, row),
            },
          ]"
src/views/wls/warehouse/location/index.vue
@@ -227,7 +227,6 @@
            {
              label: '库位',
              type: 'link',
              auth: ['mes:wm-warehouse:query'],
              onClick: handleOpenArea.bind(null, row),
            },
            {
@@ -251,7 +250,6 @@
            {
              label: '条码',
              type: 'link',
              auth: ['mes:wm-warehouse:query'],
              onClick: handleBarcode.bind(null, row),
            },
          ]"
src/views/wms/order/check/index.vue
@@ -362,7 +362,6 @@
            {
              label: '打印',
              type: 'link',
              auth: ['wms:check-order:query'],
              onClick: () => printRef?.print(row.id!),
            },
          ]"
src/views/wms/order/movement/index.vue
@@ -331,7 +331,6 @@
            {
              label: '打印',
              type: 'link',
              auth: ['wms:movement-order:query'],
              onClick: () => printRef?.print(row.id!),
            },
          ]"
src/views/wms/order/receipt/index.vue
@@ -336,7 +336,6 @@
            {
              label: '打印',
              type: 'link',
              auth: ['wms:receipt-order:query'],
              onClick: () => printRef?.print(row.id!),
            },
          ]"
src/views/wms/order/shipment/index.vue
@@ -334,7 +334,6 @@
            {
              label: '打印',
              type: 'link',
              auth: ['wms:shipment-order:query'],
              onClick: () => printRef?.print(row.id!),
            },
          ]"