筛选高级权限修改,基础信息启用禁用修改
This commit is contained in:
@ -25,7 +25,7 @@
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/node": "^24.10.1",
|
||||
"@vitejs/plugin-basic-ssl": "^1.1.0",
|
||||
"@vitejs/plugin-basic-ssl": "^1.2.0",
|
||||
"@vitejs/plugin-vue": "^6.0.1",
|
||||
"@vue/tsconfig": "^0.8.1",
|
||||
"typescript": "~5.9.3",
|
||||
@ -35,4 +35,4 @@
|
||||
"overrides": {
|
||||
"vite": "npm:rolldown-vite@7.2.5"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -58,8 +58,8 @@
|
||||
style="width: 100px; margin-right: 10px;"
|
||||
@change="handleQuery"
|
||||
>
|
||||
<el-option label="启用" :value="1" />
|
||||
<el-option label="禁用" :value="0" />
|
||||
<el-option label="启用" :value="true" />
|
||||
<el-option label="禁用" :value="false" />
|
||||
</el-select>
|
||||
|
||||
<el-button type="primary" plain @click="handleQuery">搜索</el-button>
|
||||
@ -70,26 +70,26 @@
|
||||
title="高级筛选"
|
||||
width="600"
|
||||
trigger="manual">
|
||||
<template #reference>
|
||||
<el-button plain @click="advancedFilterVisible = !advancedFilterVisible">高级筛选</el-button>
|
||||
</template>
|
||||
<div class="advanced-filter">
|
||||
<div v-for="(condition, index) in advancedConditions" :key="index" class="condition-row" style="display: flex; align-items: center; margin-bottom: 10px;">
|
||||
<el-select v-model="condition.field" placeholder="字段" style="width: 180px">
|
||||
<el-option v-for="field in fieldOptions" :key="field.value" :label="field.label" :value="field.value" />
|
||||
</el-select>
|
||||
<el-select v-model="condition.operator" placeholder="操作符" style="width: 120px; margin-left: 8px">
|
||||
<el-option v-for="op in operatorOptions" :key="op.value" :label="op.label" :value="op.value" />
|
||||
</el-select>
|
||||
<el-input v-model="condition.value" placeholder="值" style="width: 180px; margin-left: 8px" />
|
||||
<el-button v-if="advancedConditions.length > 1" type="danger" link @click="removeCondition(index)" style="margin-left: 8px">删除</el-button>
|
||||
</div>
|
||||
<div style="margin-top: 12px">
|
||||
<el-button type="primary" link @click="addCondition">添加条件</el-button>
|
||||
<el-button @click="applyAdvancedFilter" type="primary">应用筛选</el-button>
|
||||
<el-button @click="resetAdvancedFilter">重置</el-button>
|
||||
</div>
|
||||
<template #reference>
|
||||
<el-button plain @click="advancedFilterVisible = !advancedFilterVisible">高级筛选</el-button>
|
||||
</template>
|
||||
<div class="advanced-filter">
|
||||
<div v-for="(condition, index) in advancedConditions" :key="index" class="condition-row" style="display: flex; align-items: center; margin-bottom: 10px;">
|
||||
<el-select v-model="condition.field" placeholder="字段" style="width: 180px">
|
||||
<el-option v-for="field in fieldOptions" :key="field.value" :label="field.label" :value="field.value" />
|
||||
</el-select>
|
||||
<el-select v-model="condition.operator" placeholder="操作符" style="width: 120px; margin-left: 8px">
|
||||
<el-option v-for="op in operatorOptions" :key="op.value" :label="op.label" :value="op.value" />
|
||||
</el-select>
|
||||
<el-input v-model="condition.value" placeholder="值" style="width: 180px; margin-left: 8px" />
|
||||
<el-button v-if="advancedConditions.length > 1" type="danger" link @click="removeCondition(index)" style="margin-left: 8px">删除</el-button>
|
||||
</div>
|
||||
<div style="margin-top: 12px">
|
||||
<el-button type="primary" link @click="addCondition">添加条件</el-button>
|
||||
<el-button @click="applyAdvancedFilter" type="primary">应用筛选</el-button>
|
||||
<el-button @click="resetAdvancedFilter">重置</el-button>
|
||||
</div>
|
||||
</div>
|
||||
</el-popover>
|
||||
</div>
|
||||
|
||||
@ -117,7 +117,7 @@
|
||||
</template>
|
||||
</el-dropdown>
|
||||
|
||||
<el-popover placement="bottom" :width="150" trigger="click">
|
||||
<el-popover placement="bottom" :width="200" trigger="click">
|
||||
<template #reference>
|
||||
<el-button circle :icon="Setting" style="margin-left: 8px" title="列设置" />
|
||||
</template>
|
||||
@ -125,18 +125,18 @@
|
||||
<div style="font-weight: bold; margin-bottom: 5px; border-bottom: 1px solid #eee; padding-bottom: 5px">
|
||||
列展示设置
|
||||
</div>
|
||||
<el-checkbox v-model="columns.id.visible" label="ID" :disabled="!userStore.hasPermission(permissionMap.id)" />
|
||||
<el-checkbox v-model="columns.companyName.visible" label="所属公司" :disabled="!userStore.hasPermission(permissionMap.companyName)" />
|
||||
<el-checkbox v-model="columns.name.visible" label="名称" :disabled="!userStore.hasPermission(permissionMap.name)" />
|
||||
<el-checkbox v-model="columns.commonName.visible" label="俗名" :disabled="!userStore.hasPermission(permissionMap.commonName)" />
|
||||
<el-checkbox v-model="columns.category.visible" label="类别" :disabled="!userStore.hasPermission(permissionMap.category)" />
|
||||
<el-checkbox v-model="columns.type.visible" label="类型" :disabled="!userStore.hasPermission(permissionMap.type)" />
|
||||
<el-checkbox v-model="columns.spec.visible" label="规格型号" :disabled="!userStore.hasPermission(permissionMap.spec)" />
|
||||
<el-checkbox v-model="columns.unit.visible" label="单位" :disabled="!userStore.hasPermission(permissionMap.unit)" />
|
||||
<el-checkbox v-model="columns.inventory.visible" label="库存数" :disabled="!userStore.hasPermission(permissionMap.inventory)" />
|
||||
<el-checkbox v-model="columns.available.visible" label="可用数" :disabled="!userStore.hasPermission(permissionMap.available)" />
|
||||
<el-checkbox v-model="columns.files.visible" label="资料" :disabled="!userStore.hasPermission(permissionMap.files)" />
|
||||
<el-checkbox v-model="columns.isEnabled.visible" label="状态" :disabled="!userStore.hasPermission(permissionMap.isEnabled)" />
|
||||
<el-checkbox v-model="columns.id.visible" label="ID" />
|
||||
<el-checkbox v-model="columns.companyName.visible" label="所属公司" />
|
||||
<el-checkbox v-model="columns.name.visible" label="名称" />
|
||||
<el-checkbox v-model="columns.commonName.visible" label="俗名" />
|
||||
<el-checkbox v-model="columns.category.visible" label="类别" />
|
||||
<el-checkbox v-model="columns.type.visible" label="类型" />
|
||||
<el-checkbox v-model="columns.spec.visible" label="规格型号" />
|
||||
<el-checkbox v-model="columns.unit.visible" label="单位" />
|
||||
<el-checkbox v-model="columns.inventory.visible" label="库存数" />
|
||||
<el-checkbox v-model="columns.available.visible" label="可用数" />
|
||||
<el-checkbox v-model="columns.files.visible" label="资料" />
|
||||
<el-checkbox v-model="columns.isEnabled.visible" label="状态" />
|
||||
</div>
|
||||
</el-popover>
|
||||
</div>
|
||||
@ -235,8 +235,8 @@
|
||||
<template #default="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.isEnabled"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
:active-value="true"
|
||||
:inactive-value="false"
|
||||
:loading="scope.row.statusLoading"
|
||||
:disabled="!userStore.hasPermission('material_list:operation')"
|
||||
@change="handleStatusChange(scope.row)"
|
||||
@ -416,8 +416,8 @@
|
||||
|
||||
<el-form-item label="状态" prop="isEnabled" v-if="hasFieldPermission('isEnabled')">
|
||||
<el-radio-group v-model="form.isEnabled">
|
||||
<el-radio :value="1">启用</el-radio>
|
||||
<el-radio :value="0">禁用</el-radio>
|
||||
<el-radio :value="true">启用</el-radio>
|
||||
<el-radio :value="false">禁用</el-radio>
|
||||
</el-radio-group>
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
@ -477,7 +477,7 @@ interface MaterialBaseVO {
|
||||
visibilityLevel: number;
|
||||
generalManual: string[];
|
||||
generalImage: string[];
|
||||
isEnabled: number;
|
||||
isEnabled: boolean; // 已彻底修改为布尔值
|
||||
statusLoading?: boolean;
|
||||
inventoryCount?: number;
|
||||
availableCount?: number;
|
||||
@ -490,7 +490,7 @@ interface QueryParams {
|
||||
category: string;
|
||||
type: string;
|
||||
company: string;
|
||||
isEnabled?: number;
|
||||
isEnabled?: boolean; // 已修改为布尔值可选
|
||||
orderByColumn: string;
|
||||
isAsc: string | undefined;
|
||||
advancedFilters?: any[];
|
||||
@ -647,7 +647,7 @@ const initForm = {
|
||||
visibilityLevel: 0,
|
||||
generalManual: [] as string[],
|
||||
generalImage: [] as string[],
|
||||
isEnabled: 1
|
||||
isEnabled: true // 已修改为默认 true
|
||||
};
|
||||
|
||||
const form = ref({...initForm});
|
||||
@ -991,13 +991,14 @@ const resetForm = () => {
|
||||
if (formRef.value) formRef.value.resetFields();
|
||||
};
|
||||
|
||||
// 确保这里的布尔值切换逻辑正确匹配真伪值的切换
|
||||
const handleStatusChange = (row: MaterialBaseVO) => {
|
||||
row.statusLoading = true;
|
||||
const text = row.isEnabled === 1 ? "启用" : "停用";
|
||||
const text = row.isEnabled === true ? "启用" : "停用";
|
||||
const updateData = { id: row.id, isEnabled: row.isEnabled };
|
||||
updateMaterialBase(updateData)
|
||||
.then(() => ElMessage.success(`已${text} "${row.name}"`))
|
||||
.catch(() => { row.isEnabled = row.isEnabled === 1 ? 0 : 1; })
|
||||
.catch(() => { row.isEnabled = !row.isEnabled; }) // 回退时布尔值反转
|
||||
.finally(() => { row.statusLoading = false; });
|
||||
};
|
||||
|
||||
@ -1195,4 +1196,4 @@ onMounted(() => {
|
||||
.long-dropdown .el-select-dropdown__wrap {
|
||||
max-height: 600px !important; /* 可以根据屏幕大小适当调整 */
|
||||
}
|
||||
</style>
|
||||
</style>
|
||||
@ -94,13 +94,13 @@
|
||||
<div class="col-group-title">基础信息</div>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="12" v-for="c in baseColumns" :key="c.prop">
|
||||
<el-checkbox :label="c.prop" :disabled="!hasColumnPermission(c.prop)">{{ c.label }}</el-checkbox>
|
||||
<el-checkbox :label="c.prop">{{ c.label }}</el-checkbox>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div class="col-group-title" style="margin-top:10px">库存与商务</div>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="12" v-for="c in stockColumns" :key="c.prop">
|
||||
<el-checkbox :label="c.prop" :disabled="!hasColumnPermission(c.prop)">{{ c.label }}</el-checkbox>
|
||||
<el-checkbox :label="c.prop">{{ c.label }}</el-checkbox>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-checkbox-group>
|
||||
@ -898,42 +898,37 @@ const permissionMap: Record<string, string> = {
|
||||
inspection_report: 'inbound_buy:inspection_report'
|
||||
}
|
||||
|
||||
// 根据用户权限初始化列显示状态
|
||||
// 初始化列显示状态(移除权限限制,添加 localStorage 支持)
|
||||
const initColumnPermissions = () => {
|
||||
// 超级管理员跳过权限检查,显示所有列
|
||||
if (userStore.role === 'SUPER_ADMIN' || userStore.username === 'IRIS') {
|
||||
return
|
||||
}
|
||||
|
||||
// 普通用户:严格执行列级权限控制,没有权限的列必须隐藏
|
||||
// 遍历 allColumns,将没有权限的列从 visibleColumnProps 中移除
|
||||
const allowedColumns = allColumns.filter(col => {
|
||||
const code = permissionMap[col.prop]
|
||||
if (code) {
|
||||
return userStore.hasPermission(code)
|
||||
// 生成存储键:使用用户ID或用户名,如果没有则使用浏览器唯一标识
|
||||
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 validColumns = parsed.filter((prop: string) =>
|
||||
allColumns.some(col => col.prop === prop)
|
||||
)
|
||||
if (validColumns.length > 0) {
|
||||
visibleColumnProps.value = validColumns
|
||||
return
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('Failed to parse saved columns:', e)
|
||||
}
|
||||
// 如果没有映射,默认隐藏
|
||||
return false
|
||||
}).map(col => col.prop)
|
||||
|
||||
// 更新 visibleColumnProps,只保留有权限的列
|
||||
// 同时保持用户之前已经选择的有权限的列
|
||||
const currentVisible = visibleColumnProps.value.filter(prop => allowedColumns.includes(prop))
|
||||
// 如果当前没有可见列,则使用 allowedColumns 作为默认
|
||||
if (currentVisible.length === 0) {
|
||||
visibleColumnProps.value = allowedColumns
|
||||
} else {
|
||||
visibleColumnProps.value = currentVisible
|
||||
}
|
||||
|
||||
// 如果没有保存的配置,使用默认列
|
||||
visibleColumnProps.value = defaultColumns
|
||||
}
|
||||
|
||||
// 检查列权限
|
||||
// 检查列权限(移除权限限制,始终返回 true)
|
||||
const hasColumnPermission = (prop: string) => {
|
||||
if (userStore.role === 'SUPER_ADMIN' || userStore.username === 'IRIS') {
|
||||
return true
|
||||
}
|
||||
const code = permissionMap[prop]
|
||||
return code ? userStore.hasPermission(code) : false
|
||||
return true
|
||||
}
|
||||
|
||||
const allColumns = [...baseColumns, ...stockColumns]
|
||||
@ -948,6 +943,17 @@ const defaultColumns = [
|
||||
|
||||
const visibleColumnProps = ref(defaultColumns)
|
||||
|
||||
// 监听列配置变化并保存到 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: '',
|
||||
|
||||
@ -104,7 +104,7 @@
|
||||
<template #reference><el-button :icon="Setting" class="action-btn">表头</el-button></template>
|
||||
<el-checkbox-group v-model="visibleColumnProps" class="column-selector">
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="8" v-for="c in allColumns" :key="c.prop"><el-checkbox :label="c.prop" :disabled="!hasColumnPermission(c.prop)">{{ c.label }}</el-checkbox></el-col>
|
||||
<el-col :span="8" v-for="c in allColumns" :key="c.prop"><el-checkbox :label="c.prop">{{ c.label }}</el-checkbox></el-col>
|
||||
</el-row>
|
||||
</el-checkbox-group>
|
||||
</el-popover>
|
||||
@ -691,46 +691,53 @@ const permissionMap: Record<string, string> = {
|
||||
}
|
||||
|
||||
// 根据用户权限初始化列显示状态
|
||||
// 初始化列显示状态(移除权限限制,添加 localStorage 支持)
|
||||
const initColumnPermissions = () => {
|
||||
// 超级管理员跳过权限检查,显示所有列
|
||||
if (userStore.role === 'SUPER_ADMIN' || userStore.username === 'IRIS') {
|
||||
return
|
||||
}
|
||||
|
||||
// 普通用户:严格执行列级权限控制,没有权限的列必须隐藏
|
||||
// 遍历 allColumns,将没有权限的列从 visibleColumnProps 中移除
|
||||
const allowedColumns = allColumns.filter(col => {
|
||||
const code = permissionMap[col.prop]
|
||||
if (code) {
|
||||
return userStore.hasPermission(code)
|
||||
// 生成存储键:使用用户ID或用户名,如果没有则使用浏览器唯一标识
|
||||
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 validColumns = parsed.filter((prop: string) =>
|
||||
allColumns.some(col => col.prop === prop)
|
||||
)
|
||||
if (validColumns.length > 0) {
|
||||
visibleColumnProps.value = validColumns
|
||||
return
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('Failed to parse saved columns:', e)
|
||||
}
|
||||
// 如果没有映射,默认隐藏
|
||||
return false
|
||||
}).map(col => col.prop)
|
||||
|
||||
// 更新 visibleColumnProps,只保留有权限的列
|
||||
// 同时保持用户之前已经选择的有权限的列
|
||||
const currentVisible = visibleColumnProps.value.filter(prop => allowedColumns.includes(prop))
|
||||
// 如果当前没有可见列,则使用 allowedColumns 作为默认
|
||||
if (currentVisible.length === 0) {
|
||||
visibleColumnProps.value = allowedColumns
|
||||
} else {
|
||||
visibleColumnProps.value = currentVisible
|
||||
}
|
||||
|
||||
// 如果没有保存的配置,使用默认列
|
||||
visibleColumnProps.value = defaultColumns
|
||||
}
|
||||
|
||||
// 检查列权限
|
||||
// 检查列权限(移除权限限制,始终返回 true)
|
||||
const hasColumnPermission = (prop: string) => {
|
||||
if (userStore.role === 'SUPER_ADMIN' || userStore.username === 'IRIS') {
|
||||
return true
|
||||
}
|
||||
const code = permissionMap[prop]
|
||||
return code ? userStore.hasPermission(code) : false
|
||||
return true
|
||||
}
|
||||
|
||||
const defaultVisibleCols = ['company_name', 'material_name', 'sku', 'serial_number', 'qty_stock', 'status', 'quality_status', 'product_photo', 'sale_price', 'order_id']
|
||||
const visibleColumnProps = ref(defaultVisibleCols)
|
||||
|
||||
// 监听列配置变化并保存到 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: '', // [新增]
|
||||
|
||||
@ -110,13 +110,13 @@
|
||||
<div class="col-group-title">基础信息</div>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="12" v-for="c in baseColumns" :key="c.prop">
|
||||
<el-checkbox :label="c.prop" :disabled="!hasColumnPermission(c.prop)">{{ c.label }}</el-checkbox>
|
||||
<el-checkbox :label="c.prop">{{ c.label }}</el-checkbox>
|
||||
</el-col>
|
||||
</el-row>
|
||||
<div class="col-group-title" style="margin-top:10px">生产与库存</div>
|
||||
<el-row :gutter="10">
|
||||
<el-col :span="12" v-for="c in stockColumns" :key="c.prop">
|
||||
<el-checkbox :label="c.prop" :disabled="!hasColumnPermission(c.prop)">{{ c.label }}</el-checkbox>
|
||||
<el-checkbox :label="c.prop">{{ c.label }}</el-checkbox>
|
||||
</el-col>
|
||||
</el-row>
|
||||
</el-checkbox-group>
|
||||
@ -767,39 +767,53 @@ const permissionMap: Record<string, string> = {
|
||||
}
|
||||
|
||||
// 根据用户权限初始化列显示状态
|
||||
// 初始化列显示状态(移除权限限制,添加 localStorage 支持)
|
||||
const initColumnPermissions = () => {
|
||||
if (userStore.role === 'SUPER_ADMIN' || userStore.username === 'IRIS') {
|
||||
return
|
||||
}
|
||||
|
||||
const allowedColumns = allColumns.filter(col => {
|
||||
const code = permissionMap[col.prop]
|
||||
if (code) {
|
||||
return userStore.hasPermission(code)
|
||||
// 生成存储键:使用用户ID或用户名,如果没有则使用浏览器唯一标识
|
||||
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 validColumns = parsed.filter((prop: string) =>
|
||||
allColumns.some(col => col.prop === prop)
|
||||
)
|
||||
if (validColumns.length > 0) {
|
||||
visibleColumnProps.value = validColumns
|
||||
return
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('Failed to parse saved columns:', e)
|
||||
}
|
||||
return false
|
||||
}).map(col => col.prop)
|
||||
|
||||
const currentVisible = visibleColumnProps.value.filter(prop => allowedColumns.includes(prop))
|
||||
if (currentVisible.length === 0) {
|
||||
visibleColumnProps.value = allowedColumns
|
||||
} else {
|
||||
visibleColumnProps.value = currentVisible
|
||||
}
|
||||
|
||||
// 如果没有保存的配置,使用默认列
|
||||
visibleColumnProps.value = defaultColumns
|
||||
}
|
||||
|
||||
// 检查列权限
|
||||
// 检查列权限(移除权限限制,始终返回 true)
|
||||
const hasColumnPermission = (prop: string) => {
|
||||
if (userStore.role === 'SUPER_ADMIN' || userStore.username === 'IRIS') {
|
||||
return true
|
||||
}
|
||||
const code = permissionMap[prop]
|
||||
return code ? userStore.hasPermission(code) : false
|
||||
return true
|
||||
}
|
||||
|
||||
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(defaultColumns)
|
||||
|
||||
// 监听列配置变化并保存到 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: '',
|
||||
|
||||
Reference in New Issue
Block a user