diff --git a/inventory-web/src/views/stock/inbound/buy.vue b/inventory-web/src/views/stock/inbound/buy.vue index 751ab4e..d04d2ad 100644 --- a/inventory-web/src/views/stock/inbound/buy.vue +++ b/inventory-web/src/views/stock/inbound/buy.vue @@ -960,31 +960,8 @@ const permissionMap: Record = { inspection_report: 'inbound_buy:inspection_report' } -// 初始化列显示状态 +// 初始化列显示状态(纯权限驱动,废除本地缓存) const initColumnPermissions = () => { - // 生成存储键:基于用户 ID 进行隔离,A/B 账号互不干扰 - const userId = userStore.user?.id || userStore.username || 'anonymous' - const storageKey = `inbound_buy_columns_${userId}` - - // 尝试从 localStorage 读取保存的列配置 - const savedColumns = localStorage.getItem(storageKey) - if (savedColumns) { - try { - const parsed = JSON.parse(savedColumns) - // 【核心修复】权限二次交集:缓存的列必须同时满足"存在于 allColumns 且当前拥有该字段权限" - const permittedCols = parsed.filter((prop: string) => - allColumns.some(col => col.prop === prop) && hasColumnPermission(prop) - ) - if (permittedCols.length > 0) { - visibleColumnProps.value = permittedCols - return - } - } catch (e) { - console.warn('Failed to parse saved columns:', e) - } - } - - // 【任务1】废除硬编码默认,动态计算:所有有权限的列默认展示 visibleColumnProps.value = allColumns .filter(col => hasColumnPermission(col.prop)) .map(col => col.prop) @@ -1003,17 +980,6 @@ const allColumns = [...baseColumns, ...stockColumns] const visibleColumnProps = ref([]) -// 监听列配置变化并保存到 localStorage -watch(visibleColumnProps, (newVal) => { - const userId = userStore.user?.id || userStore.username || 'anonymous' - const storageKey = `inbound_buy_columns_${userId}` - try { - localStorage.setItem(storageKey, JSON.stringify(newVal)) - } catch (e) { - console.warn('Failed to save columns to localStorage:', e) - } -}, { deep: true }) - const form = reactive({ id: undefined, base_id: undefined as number | undefined, company_name: '', diff --git a/inventory-web/src/views/stock/inbound/product.vue b/inventory-web/src/views/stock/inbound/product.vue index 64c371a..fb875c7 100644 --- a/inventory-web/src/views/stock/inbound/product.vue +++ b/inventory-web/src/views/stock/inbound/product.vue @@ -780,31 +780,8 @@ const permissionMap: Record = { } // 根据用户权限初始化列显示状态 -// 初始化列显示状态 +// 初始化列显示状态(纯权限驱动,废除本地缓存) const initColumnPermissions = () => { - // 生成存储键:基于用户 ID 进行隔离,A/B 账号互不干扰 - const userId = userStore.user?.id || userStore.username || 'anonymous' - const storageKey = `inbound_product_columns_${userId}` - - // 尝试从 localStorage 读取保存的列配置 - const savedColumns = localStorage.getItem(storageKey) - if (savedColumns) { - try { - const parsed = JSON.parse(savedColumns) - // 【核心修复】权限二次交集:缓存的列必须同时满足"存在于 allColumns 且当前拥有该字段权限" - const permittedCols = parsed.filter((prop: string) => - allColumns.some(col => col.prop === prop) && hasColumnPermission(prop) - ) - if (permittedCols.length > 0) { - visibleColumnProps.value = permittedCols - return - } - } catch (e) { - console.warn('Failed to parse saved columns:', e) - } - } - - // 【任务1】废除硬编码默认,动态计算:所有有权限的列默认展示 visibleColumnProps.value = allColumns .filter(col => hasColumnPermission(col.prop)) .map(col => col.prop) @@ -855,17 +832,6 @@ const displayData = computed(() => { const defaultVisibleCols = ['company_name', 'material_name', 'sku', 'serial_number', 'qty_stock', 'status', 'quality_status', 'product_photo', 'sale_price', 'order_id'] const visibleColumnProps = ref([]) -// 监听列配置变化并保存到 localStorage -watch(visibleColumnProps, (newVal) => { - const userId = userStore.user?.id || userStore.username || 'anonymous' - const storageKey = `inbound_product_columns_${userId}` - try { - localStorage.setItem(storageKey, JSON.stringify(newVal)) - } catch (e) { - console.warn('Failed to save columns to localStorage:', e) - } -}, { deep: true }) - const form = reactive({ id: undefined, base_id: undefined as number | undefined, company_name: '', // [新增] diff --git a/inventory-web/src/views/stock/inbound/semi.vue b/inventory-web/src/views/stock/inbound/semi.vue index 507a026..b3079dc 100644 --- a/inventory-web/src/views/stock/inbound/semi.vue +++ b/inventory-web/src/views/stock/inbound/semi.vue @@ -811,31 +811,8 @@ const stockColumns = [ ] const allColumns = [...baseColumns, ...stockColumns] -// 初始化列显示状态 +// 初始化列显示状态(纯权限驱动,废除本地缓存) const initColumnPermissions = () => { - // 生成存储键:基于用户 ID 进行隔离,A/B 账号互不干扰 - const userId = userStore.user?.id || userStore.username || 'anonymous' - const storageKey = `inbound_semi_columns_${userId}` - - // 尝试从 localStorage 读取保存的列配置 - const savedColumns = localStorage.getItem(storageKey) - if (savedColumns) { - try { - const parsed = JSON.parse(savedColumns) - // 【核心修复】权限二次交集:缓存的列必须同时满足"存在于 allColumns 且当前拥有该字段权限" - const permittedCols = parsed.filter((prop: string) => - allColumns.some(col => col.prop === prop) && hasColumnPermission(prop) - ) - if (permittedCols.length > 0) { - visibleColumnProps.value = permittedCols - return - } - } catch (e) { - console.warn('Failed to parse saved columns:', e) - } - } - - // 【任务1】废除硬编码默认,动态计算:所有有权限的列默认展示 visibleColumnProps.value = allColumns .filter(col => hasColumnPermission(col.prop)) .map(col => col.prop) @@ -892,17 +869,6 @@ const hasColumnPermission = (prop: string) => { const defaultColumns = ['company_name', 'material_name', 'spec_model', 'unit', 'inbound_date', 'sn_bn', 'status', 'quality_status', 'bom_code', 'work_order_code', 'qty_stock', 'qty_available', 'unit_total_cost', 'arrival_photo', 'quality_report_link'] const visibleColumnProps = ref([]) -// 监听列配置变化并保存到 localStorage -watch(visibleColumnProps, (newVal) => { - const userId = userStore.user?.id || userStore.username || 'anonymous' - const storageKey = `inbound_semi_columns_${userId}` - try { - localStorage.setItem(storageKey, JSON.stringify(newVal)) - } catch (e) { - console.warn('Failed to save columns to localStorage:', e) - } -}, { deep: true }) - const form = reactive({ id: undefined, base_id: undefined as number | undefined, company_name: '', diff --git a/inventory-web/src/views/system/PermissionConfig.vue b/inventory-web/src/views/system/PermissionConfig.vue index cd99e4a..c34271c 100644 --- a/inventory-web/src/views/system/PermissionConfig.vue +++ b/inventory-web/src/views/system/PermissionConfig.vue @@ -213,7 +213,7 @@ const fetchTree = async () => { { id: 999991, name: '跨组织/跨区域数据查询', - code: 'global:cross_company', + code: 'global:cross_company_op', // 加上 _op 让它显示在操作权限列 type: 'element' } ]