merge code pull
This commit is contained in:
12356
docs/默认模块.openapi.json
12356
docs/默认模块.openapi.json
File diff suppressed because one or more lines are too long
143
src/api/admin/usertable.ts
Normal file
143
src/api/admin/usertable.ts
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
import request from '/@/utils/request';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户表格配置管理API
|
||||||
|
*/
|
||||||
|
|
||||||
|
// 固定的 key,用于存储所有表格配置
|
||||||
|
const USER_TABLE_CONFIG_KEY = 'user-table-configs'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取用户表格列配置(获取所有配置)
|
||||||
|
* @returns 返回所有列配置数据
|
||||||
|
*/
|
||||||
|
export function getUserTableConfig() {
|
||||||
|
return request({
|
||||||
|
url: '/admin/sysUserTable/currentInfo',
|
||||||
|
method: 'get',
|
||||||
|
params: { tableKey: USER_TABLE_CONFIG_KEY }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取所有用户表格配置(从本地缓存)
|
||||||
|
* @returns 所有配置对象
|
||||||
|
*/
|
||||||
|
export function getAllTableConfigsFromLocal(): Record<string, any> {
|
||||||
|
const localKey = 'user-table-configs-all'
|
||||||
|
const localData = localStorage.getItem(localKey)
|
||||||
|
if (localData) {
|
||||||
|
try {
|
||||||
|
return JSON.parse(localData)
|
||||||
|
} catch (error) {
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存所有用户表格配置到本地缓存
|
||||||
|
* @param configs 所有配置对象
|
||||||
|
*/
|
||||||
|
export function saveAllTableConfigsToLocal(configs: Record<string, any>) {
|
||||||
|
const localKey = 'user-table-configs-all'
|
||||||
|
localStorage.setItem(localKey, JSON.stringify(configs))
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取指定 tableKey 的配置(从本地统一存储)
|
||||||
|
* @param tableKey 表格标识
|
||||||
|
* @returns 配置对象 { visibleColumns: string[], columnOrder: string[] } 或 null
|
||||||
|
*/
|
||||||
|
export function getTableConfigFromLocal(tableKey: string): { visibleColumns: string[], columnOrder: string[] } | null {
|
||||||
|
const allConfigs = getAllTableConfigsFromLocal()
|
||||||
|
return allConfigs[tableKey] || null
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 保存指定 tableKey 的配置到本地统一存储
|
||||||
|
* @param tableKey 表格标识
|
||||||
|
* @param config 配置对象 { visibleColumns?: string[], columnOrder?: string[] }
|
||||||
|
*/
|
||||||
|
export function saveTableConfigToLocal(tableKey: string, config: { visibleColumns?: string[], columnOrder?: string[] }) {
|
||||||
|
const allConfigs = getAllTableConfigsFromLocal()
|
||||||
|
if (!allConfigs[tableKey]) {
|
||||||
|
allConfigs[tableKey] = {}
|
||||||
|
}
|
||||||
|
if (config.visibleColumns !== undefined) {
|
||||||
|
allConfigs[tableKey].visibleColumns = config.visibleColumns
|
||||||
|
}
|
||||||
|
if (config.columnOrder !== undefined) {
|
||||||
|
allConfigs[tableKey].columnOrder = config.columnOrder
|
||||||
|
}
|
||||||
|
saveAllTableConfigsToLocal(allConfigs)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新用户表格列配置(从本地读取所有配置,更新当前配置后一起保存)
|
||||||
|
* @param tableKey 表格标识(通常是路由路径)
|
||||||
|
* @param config 配置数据 { visibleColumns: string[], columnOrder: string[] }
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export async function updateUserTableConfig(tableKey: string, config: {
|
||||||
|
visibleColumns?: string[];
|
||||||
|
columnOrder?: string[];
|
||||||
|
}) {
|
||||||
|
// 从本地获取所有配置
|
||||||
|
let allConfigs = getAllTableConfigsFromLocal()
|
||||||
|
|
||||||
|
// 更新当前 tableKey 的配置
|
||||||
|
allConfigs[tableKey] = {
|
||||||
|
visibleColumns: config.visibleColumns || [],
|
||||||
|
columnOrder: config.columnOrder || []
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新本地缓存
|
||||||
|
saveAllTableConfigsToLocal(allConfigs)
|
||||||
|
|
||||||
|
// 保存所有配置到后端,使用固定的 key
|
||||||
|
return request({
|
||||||
|
url: '/admin/sysUserTable/save',
|
||||||
|
method: 'post',
|
||||||
|
data: {
|
||||||
|
value: {
|
||||||
|
[USER_TABLE_CONFIG_KEY]: allConfigs
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 初始化用户表格配置(登录后调用,获取所有配置并保存到本地)
|
||||||
|
* @returns Promise
|
||||||
|
*/
|
||||||
|
export async function initUserTableConfigs() {
|
||||||
|
try {
|
||||||
|
const res = await getUserTableConfig()
|
||||||
|
if (res.data && res.data.value && res.data.value[USER_TABLE_CONFIG_KEY]) {
|
||||||
|
// 从固定的 key 中获取所有配置
|
||||||
|
const allConfigs = res.data.value[USER_TABLE_CONFIG_KEY]
|
||||||
|
// 保存到本地
|
||||||
|
saveAllTableConfigsToLocal(allConfigs)
|
||||||
|
return allConfigs
|
||||||
|
}
|
||||||
|
} catch (error) {
|
||||||
|
console.error('初始化用户表格配置失败:', error)
|
||||||
|
}
|
||||||
|
return {}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除用户表格列配置
|
||||||
|
* @param tableKey 表格标识(通常是路由路径)
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
export function deleteUserTableConfig(tableKey: string) {
|
||||||
|
return request({
|
||||||
|
url: '/admin/sysUserTable/delete',
|
||||||
|
method: 'delete',
|
||||||
|
params: { tableKey }
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@@ -30,8 +30,9 @@ export const addObj = (data: any) => {
|
|||||||
*/
|
*/
|
||||||
export const getDetail = (id: string) => {
|
export const getDetail = (id: string) => {
|
||||||
return request({
|
return request({
|
||||||
url: `/stuwork/activityinfo/${id}`,
|
url: '/stuwork/activityinfo/detail',
|
||||||
method: 'get'
|
method: 'get',
|
||||||
|
params: { id }
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ export const exportData = (query?: any) => {
|
|||||||
*/
|
*/
|
||||||
export const syncClassroomArrangement = () => {
|
export const syncClassroomArrangement = () => {
|
||||||
return request({
|
return request({
|
||||||
url: '/stuwork/classroombase/sync',
|
url: '/stuwork/teachclassroom/initData',
|
||||||
method: 'post'
|
method: 'post'
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -72,11 +72,11 @@ export const delObj = (ids: string[]) => {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 批量设置(批量更新选中教室的学院)
|
* 批量设置(批量更新选中教室的学院)
|
||||||
* @param data 包含ids(教室ID数组)和deptCode(学院代码)
|
* @param data 数组格式,每个元素包含 id(教室ID)和 deptCode(学院代码)
|
||||||
*/
|
*/
|
||||||
export const batchSet = (data: any) => {
|
export const batchSet = (data: any[]) => {
|
||||||
return request({
|
return request({
|
||||||
url: '/stuwork/teachclassroom/batchSet',
|
url: '/stuwork/teachclassroom/putDeptList',
|
||||||
method: 'post',
|
method: 'post',
|
||||||
data
|
data
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -53,6 +53,7 @@ import { Menu, Rank } from '@element-plus/icons-vue'
|
|||||||
import type { TableInstance } from 'element-plus'
|
import type { TableInstance } from 'element-plus'
|
||||||
import { useTableColumns, type ColumnConfig } from '/@/composables/useTableColumns'
|
import { useTableColumns, type ColumnConfig } from '/@/composables/useTableColumns'
|
||||||
import Sortable from 'sortablejs'
|
import Sortable from 'sortablejs'
|
||||||
|
import { getUserTableConfig, saveUserTableConfig, updateUserTableConfig, getAllTableConfigsFromLocal, saveAllTableConfigsToLocal } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
const slots = useSlots()
|
const slots = useSlots()
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -189,35 +190,64 @@ const getAllColumns = (): string[] => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 初始化选中的列
|
// 初始化选中的列
|
||||||
const initCheckedColumns = () => {
|
const initCheckedColumns = async () => {
|
||||||
// 如果 actualColumns 为空,无法初始化
|
// 如果 actualColumns 为空,无法初始化
|
||||||
if (actualColumns.value.length === 0) {
|
if (actualColumns.value.length === 0) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
// 优先从 localStorage 读取配置
|
|
||||||
const storageKey = getStorageKey()
|
const storageKey = getStorageKey()
|
||||||
const saved = localStorage.getItem(storageKey)
|
|
||||||
|
|
||||||
if (saved) {
|
// 优先从本地缓存获取配置
|
||||||
try {
|
try {
|
||||||
const savedColumns = JSON.parse(saved)
|
const allConfigs = getAllTableConfigsFromLocal()
|
||||||
|
const currentConfig = allConfigs[storageKey]
|
||||||
|
|
||||||
|
if (currentConfig && currentConfig.visibleColumns) {
|
||||||
|
const savedColumns = currentConfig.visibleColumns
|
||||||
const allSelectableColumns = actualColumns.value
|
const allSelectableColumns = actualColumns.value
|
||||||
.filter(col => !col.alwaysShow && !col.fixed)
|
.filter(col => !col.alwaysShow && !col.fixed)
|
||||||
.map(col => col.prop || col.label)
|
.map(col => col.prop || col.label)
|
||||||
|
|
||||||
|
// 验证保存的列是否仍然存在
|
||||||
|
const validColumns = savedColumns.filter((col: string) => allSelectableColumns.includes(col))
|
||||||
|
|
||||||
// 使用保存的列配置(即使数量少于所有列,也使用保存的配置)
|
// 使用保存的列配置(即使数量少于所有列,也使用保存的配置)
|
||||||
// 但确保包含固定列和 alwaysShow 列
|
// 但确保包含固定列和 alwaysShow 列
|
||||||
const fixedAndAlwaysShow = actualColumns.value
|
const fixedAndAlwaysShow = actualColumns.value
|
||||||
.filter(col => col.alwaysShow || !!col.fixed)
|
.filter(col => col.alwaysShow || !!col.fixed)
|
||||||
.map(col => col.prop || col.label)
|
.map(col => col.prop || col.label)
|
||||||
checkedColumns.value = [...new Set([...savedColumns, ...fixedAndAlwaysShow])]
|
checkedColumns.value = [...new Set([...validColumns, ...fixedAndAlwaysShow])]
|
||||||
// 同步到外部 modelValue
|
// 同步到外部 modelValue
|
||||||
emit('update:modelValue', checkedColumns.value)
|
emit('update:modelValue', checkedColumns.value)
|
||||||
return // 已从 localStorage 加载,直接返回
|
return // 已从API加载,直接返回
|
||||||
} catch (e) {
|
|
||||||
// 如果解析失败,继续使用其他方式初始化
|
|
||||||
}
|
}
|
||||||
|
} catch (error) {
|
||||||
|
// API失败,回退到localStorage
|
||||||
|
}
|
||||||
|
|
||||||
|
// 回退到本地统一存储读取配置
|
||||||
|
const allConfigs = getAllTableConfigsFromLocal()
|
||||||
|
const currentConfig = allConfigs[storageKey]
|
||||||
|
|
||||||
|
if (currentConfig && currentConfig.visibleColumns) {
|
||||||
|
const savedColumns = currentConfig.visibleColumns
|
||||||
|
const allSelectableColumns = actualColumns.value
|
||||||
|
.filter(col => !col.alwaysShow && !col.fixed)
|
||||||
|
.map(col => col.prop || col.label)
|
||||||
|
|
||||||
|
// 验证保存的列是否仍然存在
|
||||||
|
const validColumns = savedColumns.filter((col: string) => allSelectableColumns.includes(col))
|
||||||
|
|
||||||
|
// 使用保存的列配置(即使数量少于所有列,也使用保存的配置)
|
||||||
|
// 但确保包含固定列和 alwaysShow 列
|
||||||
|
const fixedAndAlwaysShow = actualColumns.value
|
||||||
|
.filter(col => col.alwaysShow || !!col.fixed)
|
||||||
|
.map(col => col.prop || col.label)
|
||||||
|
checkedColumns.value = [...new Set([...validColumns, ...fixedAndAlwaysShow])]
|
||||||
|
// 同步到外部 modelValue
|
||||||
|
emit('update:modelValue', checkedColumns.value)
|
||||||
|
return // 已从本地存储加载,直接返回
|
||||||
}
|
}
|
||||||
|
|
||||||
// 如果 localStorage 中没有保存的配置,使用其他方式初始化
|
// 如果 localStorage 中没有保存的配置,使用其他方式初始化
|
||||||
@@ -265,8 +295,8 @@ const initColumnVisibleMap = () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 初始化列排序顺序
|
// 初始化列排序顺序
|
||||||
const initColumnOrder = () => {
|
const initColumnOrder = async () => {
|
||||||
const storageKey = getOrderStorageKey()
|
const storageKey = getStorageKey()
|
||||||
|
|
||||||
// 先获取所有可排序的列(不依赖 sortedColumns computed)
|
// 先获取所有可排序的列(不依赖 sortedColumns computed)
|
||||||
const allSortableColumns = actualColumns.value.filter(col => {
|
const allSortableColumns = actualColumns.value.filter(col => {
|
||||||
@@ -275,34 +305,100 @@ const initColumnOrder = () => {
|
|||||||
})
|
})
|
||||||
const validColumns = allSortableColumns.map(col => col.prop || col.label)
|
const validColumns = allSortableColumns.map(col => col.prop || col.label)
|
||||||
|
|
||||||
const saved = localStorage.getItem(storageKey)
|
// 优先从本地缓存获取配置
|
||||||
if (saved) {
|
try {
|
||||||
try {
|
const allConfigs = getAllTableConfigsFromLocal()
|
||||||
const savedOrder = JSON.parse(saved)
|
const currentConfig = allConfigs[storageKey]
|
||||||
// 验证保存的列是否仍然存在
|
|
||||||
columnOrder.value = savedOrder.filter((key: string) => validColumns.includes(key))
|
|
||||||
|
|
||||||
// 添加新列到排序列表末尾
|
if (currentConfig && currentConfig.columnOrder) {
|
||||||
validColumns.forEach(key => {
|
const savedOrder = currentConfig.columnOrder
|
||||||
if (!columnOrder.value.includes(key)) {
|
// 验证保存的列是否仍然存在
|
||||||
columnOrder.value.push(key)
|
columnOrder.value = savedOrder.filter((key: string) => validColumns.includes(key))
|
||||||
}
|
|
||||||
})
|
// 添加新列到排序列表末尾
|
||||||
} catch (e) {
|
validColumns.forEach(key => {
|
||||||
// 如果解析失败,使用默认顺序
|
if (!columnOrder.value.includes(key)) {
|
||||||
columnOrder.value = [...validColumns]
|
columnOrder.value.push(key)
|
||||||
}
|
}
|
||||||
} else {
|
})
|
||||||
// 首次使用,使用默认顺序
|
return // 已从API加载,直接返回
|
||||||
columnOrder.value = [...validColumns]
|
|
||||||
}
|
}
|
||||||
|
} catch (error) {
|
||||||
|
// API失败,回退到localStorage
|
||||||
|
}
|
||||||
|
|
||||||
|
// 回退到本地统一存储
|
||||||
|
const allConfigs = getAllTableConfigsFromLocal()
|
||||||
|
const currentConfig = allConfigs[storageKey]
|
||||||
|
|
||||||
|
if (currentConfig && currentConfig.columnOrder) {
|
||||||
|
const savedOrder = currentConfig.columnOrder
|
||||||
|
// 验证保存的列是否仍然存在
|
||||||
|
columnOrder.value = savedOrder.filter((key: string) => validColumns.includes(key))
|
||||||
|
|
||||||
|
// 添加新列到排序列表末尾
|
||||||
|
validColumns.forEach(key => {
|
||||||
|
if (!columnOrder.value.includes(key)) {
|
||||||
|
columnOrder.value.push(key)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
// 首次使用,使用默认顺序
|
||||||
|
columnOrder.value = [...validColumns]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 保存列排序顺序
|
// 保存列配置(同时保存 visibleColumns 和 columnOrder)
|
||||||
const saveColumnOrder = () => {
|
const saveColumnConfig = async () => {
|
||||||
const storageKey = getOrderStorageKey()
|
const storageKey = getStorageKey()
|
||||||
|
const selectableColumns = checkedColumns.value.filter(col => {
|
||||||
|
const column = actualColumns.value.find(c => (c.prop || c.label) === col)
|
||||||
|
return column && !column.alwaysShow && !column.fixed
|
||||||
|
})
|
||||||
|
|
||||||
|
// 优先保存到API,同时保存 visibleColumns 和 columnOrder
|
||||||
|
try {
|
||||||
|
await updateUserTableConfig(storageKey, {
|
||||||
|
visibleColumns: selectableColumns,
|
||||||
|
columnOrder: columnOrder.value.length > 0 ? columnOrder.value : []
|
||||||
|
})
|
||||||
|
// updateUserTableConfig 内部已经更新了本地缓存,这里不需要再操作
|
||||||
|
} catch (error) {
|
||||||
|
// API失败,只保存到本地统一存储
|
||||||
|
const allConfigs = getAllTableConfigsFromLocal()
|
||||||
|
allConfigs[storageKey] = {
|
||||||
|
visibleColumns: selectableColumns,
|
||||||
|
columnOrder: columnOrder.value
|
||||||
|
}
|
||||||
|
saveAllTableConfigsToLocal(allConfigs)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 保存列排序顺序(同时保存 visibleColumns 和 columnOrder)
|
||||||
|
const saveColumnOrder = async () => {
|
||||||
|
const storageKey = getStorageKey()
|
||||||
|
const selectableColumns = checkedColumns.value.filter(col => {
|
||||||
|
const column = actualColumns.value.find(c => (c.prop || c.label) === col)
|
||||||
|
return column && !column.alwaysShow && !column.fixed
|
||||||
|
})
|
||||||
|
|
||||||
if (columnOrder.value.length > 0) {
|
if (columnOrder.value.length > 0) {
|
||||||
localStorage.setItem(storageKey, JSON.stringify(columnOrder.value))
|
// 优先保存到API,同时保存 visibleColumns 和 columnOrder
|
||||||
|
try {
|
||||||
|
await updateUserTableConfig(storageKey, {
|
||||||
|
visibleColumns: selectableColumns,
|
||||||
|
columnOrder: columnOrder.value
|
||||||
|
})
|
||||||
|
// updateUserTableConfig 内部已经更新了本地缓存,这里不需要再操作
|
||||||
|
} catch (error) {
|
||||||
|
// API失败,只保存到本地统一存储
|
||||||
|
const allConfigs = getAllTableConfigsFromLocal()
|
||||||
|
allConfigs[storageKey] = {
|
||||||
|
visibleColumns: selectableColumns,
|
||||||
|
columnOrder: columnOrder.value
|
||||||
|
}
|
||||||
|
saveAllTableConfigsToLocal(allConfigs)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -544,13 +640,15 @@ const handleSwitchChange = (columnKey: string, value: boolean) => {
|
|||||||
})
|
})
|
||||||
updateAutoVisibleColumns(selectableValue)
|
updateAutoVisibleColumns(selectableValue)
|
||||||
} else {
|
} else {
|
||||||
// 保存到 localStorage(只保存可选择的列)
|
// 保存到API和本地统一存储(只保存可选择的列)
|
||||||
const storageKey = getStorageKey()
|
const storageKey = getStorageKey()
|
||||||
const selectableValue = finalValue.filter(col => {
|
const selectableValue = finalValue.filter(col => {
|
||||||
const column = actualColumns.value.find(c => (c.prop || c.label) === col)
|
const column = actualColumns.value.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableValue))
|
// 异步保存到API
|
||||||
|
saveColumnConfig()
|
||||||
|
// saveColumnConfig 内部已经更新了本地缓存,这里不需要再操作
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -574,13 +672,15 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
})
|
})
|
||||||
updateAutoVisibleColumns(selectableValue)
|
updateAutoVisibleColumns(selectableValue)
|
||||||
} else {
|
} else {
|
||||||
// 保存到 localStorage(只保存可选择的列)
|
// 保存到API和本地统一存储(只保存可选择的列)
|
||||||
const storageKey = getStorageKey()
|
const storageKey = getStorageKey()
|
||||||
const selectableValue = finalValue.filter(col => {
|
const selectableValue = finalValue.filter(col => {
|
||||||
const column = actualColumns.value.find(c => (c.prop || c.label) === col)
|
const column = actualColumns.value.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableValue))
|
// 异步保存到API
|
||||||
|
saveColumnConfig()
|
||||||
|
// saveColumnConfig 内部已经更新了本地缓存,这里不需要再操作
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -591,11 +691,12 @@ watch(() => props.modelValue, (newVal) => {
|
|||||||
const currentSorted = [...checkedColumns.value].sort()
|
const currentSorted = [...checkedColumns.value].sort()
|
||||||
const newSorted = [...newVal].sort()
|
const newSorted = [...newVal].sort()
|
||||||
if (JSON.stringify(currentSorted) !== JSON.stringify(newSorted)) {
|
if (JSON.stringify(currentSorted) !== JSON.stringify(newSorted)) {
|
||||||
// 检查是否是从 localStorage 加载的配置
|
// 检查是否是从本地统一存储加载的配置
|
||||||
const storageKey = getStorageKey()
|
const storageKey = getStorageKey()
|
||||||
const saved = localStorage.getItem(storageKey)
|
const allConfigs = getAllTableConfigsFromLocal()
|
||||||
|
const currentConfig = allConfigs[storageKey]
|
||||||
// 如果 checkedColumns 为空,或者没有保存的配置,才使用外部传入的值
|
// 如果 checkedColumns 为空,或者没有保存的配置,才使用外部传入的值
|
||||||
if (checkedColumns.value.length === 0 || !saved) {
|
if (checkedColumns.value.length === 0 || !currentConfig) {
|
||||||
checkedColumns.value = [...newVal]
|
checkedColumns.value = [...newVal]
|
||||||
initColumnVisibleMap()
|
initColumnVisibleMap()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import { defineStore } from 'pinia';
|
|||||||
import { Session } from '/@/utils/storage';
|
import { Session } from '/@/utils/storage';
|
||||||
import { getUserInfo, login, loginByMobile, loginBySocial, refreshTokenApi } from '/@/api/login/index';
|
import { getUserInfo, login, loginByMobile, loginBySocial, refreshTokenApi } from '/@/api/login/index';
|
||||||
import { useMessage } from '/@/hooks/message';
|
import { useMessage } from '/@/hooks/message';
|
||||||
|
import { initUserTableConfigs } from '/@/api/admin/usertable';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @function useUserInfo
|
* @function useUserInfo
|
||||||
@@ -129,6 +130,11 @@ export const useUserInfo = defineStore('userInfo', {
|
|||||||
authBtnList: res.data.permissions,
|
authBtnList: res.data.permissions,
|
||||||
};
|
};
|
||||||
this.userInfos = userInfo;
|
this.userInfos = userInfo;
|
||||||
|
|
||||||
|
// 初始化用户表格配置(登录后获取一次所有配置并保存到本地)
|
||||||
|
initUserTableConfigs().catch((err) => {
|
||||||
|
console.error('初始化用户表格配置失败:', err);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -263,6 +263,7 @@ import { fetchList as getRuleList } from "/@/api/stuwork/entrancerule";
|
|||||||
import { downBlobFile, adaptationUrl } from "/@/utils/other";
|
import { downBlobFile, adaptationUrl } from "/@/utils/other";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { List, OfficeBuilding, Grid, Document, UserFilled, Phone, User, Lock, CircleCheck, TrendCharts, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, Grid, Document, UserFilled, Phone, User, Lock, CircleCheck, TrendCharts, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import { defineAsyncComponent as defineStatusTag } from 'vue'
|
import { defineAsyncComponent as defineStatusTag } from 'vue'
|
||||||
const StatusTag = defineStatusTag(() => import('/@/components/StatusTag/index.vue'))
|
const StatusTag = defineStatusTag(() => import('/@/components/StatusTag/index.vue'))
|
||||||
|
|
||||||
@@ -303,39 +304,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -350,7 +340,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -358,7 +351,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -403,6 +403,7 @@
|
|||||||
import { ref, reactive, defineAsyncComponent, computed, onMounted } from 'vue'
|
import { ref, reactive, defineAsyncComponent, computed, onMounted } from 'vue'
|
||||||
import { useRoute } from 'vue-router'
|
import { useRoute } from 'vue-router'
|
||||||
import { List, OfficeBuilding, Briefcase, Grid, Document, UserFilled, User, CreditCard, HomeFilled, School, CircleCheck, Phone, Location, Tickets, Medal, Lock, DataAnalysis, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, Briefcase, Grid, Document, UserFilled, User, CreditCard, HomeFilled, School, CircleCheck, Phone, Location, Tickets, Medal, Lock, DataAnalysis, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import { BasicTableProps, useTable } from "/@/hooks/table";
|
import { BasicTableProps, useTable } from "/@/hooks/table";
|
||||||
import { fetchList } from "/@/api/basic/basicstudentinfo";
|
import { fetchList } from "/@/api/basic/basicstudentinfo";
|
||||||
import {
|
import {
|
||||||
@@ -478,39 +479,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -525,7 +515,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -533,7 +526,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -118,6 +118,7 @@ import { fetchList } from "/@/api/basic/basicstudentavatar";
|
|||||||
import { getClassListByRole } from "/@/api/basic/basicclass";
|
import { getClassListByRole } from "/@/api/basic/basicclass";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { Picture, List, Document, UserFilled, Grid, Menu } from '@element-plus/icons-vue'
|
import { Picture, List, Document, UserFilled, Grid, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -139,39 +140,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -186,7 +176,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -194,7 +187,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -163,6 +163,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import { parseTime } from "/@/utils/formatTime";
|
import { parseTime } from "/@/utils/formatTime";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { UploadFilled, List, Trophy, CreditCard, Avatar, Medal, Calendar, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
import { UploadFilled, List, Trophy, CreditCard, Avatar, Medal, Calendar, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
@@ -190,39 +191,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -237,7 +227,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -245,7 +238,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -52,7 +52,18 @@ const openDialog = async (id: string) => {
|
|||||||
try {
|
try {
|
||||||
const res = await getDetail(id)
|
const res = await getDetail(id)
|
||||||
if (res.data) {
|
if (res.data) {
|
||||||
detailData.value = res.data
|
// 根据接口文档,返回的数据可能是 { records: [...], total: ... } 格式
|
||||||
|
// 如果是列表格式,取第一条;如果是对象,直接使用
|
||||||
|
if (res.data.records && Array.isArray(res.data.records) && res.data.records.length > 0) {
|
||||||
|
detailData.value = res.data.records[0]
|
||||||
|
} else if (res.data.records && Array.isArray(res.data.records)) {
|
||||||
|
// 列表为空
|
||||||
|
useMessage().warning('未找到详情数据')
|
||||||
|
visible.value = false
|
||||||
|
} else {
|
||||||
|
// 直接是对象
|
||||||
|
detailData.value = res.data
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
useMessage().error(err.msg || '获取详情失败')
|
useMessage().error(err.msg || '获取详情失败')
|
||||||
|
|||||||
@@ -171,6 +171,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import { parseTime } from "/@/utils/formatTime";
|
import { parseTime } from "/@/utils/formatTime";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { UploadFilled, List, Trophy, Document, UserFilled, Calendar, Setting, Menu } from '@element-plus/icons-vue'
|
import { UploadFilled, List, Trophy, Document, UserFilled, Calendar, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import DetailDialog from './detail.vue'
|
import DetailDialog from './detail.vue'
|
||||||
|
|
||||||
@@ -200,39 +201,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -247,7 +237,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -255,7 +248,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -134,6 +134,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import { parseTime } from "/@/utils/formatTime";
|
import { parseTime } from "/@/utils/formatTime";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { List, Trophy, Document, Files, Calendar, UserFilled, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Trophy, Document, Files, Calendar, UserFilled, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -157,39 +158,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -204,7 +194,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -212,7 +205,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -146,6 +146,7 @@ import { fetchList, delObj, exportExcel, getActivityInfoList, getActivityInfoSub
|
|||||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { List, Trophy, Document, Files, CreditCard, Avatar, OfficeBuilding, Grid, UserFilled, Phone, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Trophy, Document, Files, CreditCard, Avatar, OfficeBuilding, Grid, UserFilled, Phone, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -174,39 +175,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -221,7 +211,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -229,7 +222,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -37,6 +37,18 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
<el-col :span="24" class="mb20">
|
||||||
|
<el-form-item label="备注" prop="remarks">
|
||||||
|
<el-input
|
||||||
|
v-model="form.remarks"
|
||||||
|
type="textarea"
|
||||||
|
:rows="3"
|
||||||
|
placeholder="请输入备注"
|
||||||
|
maxlength="250"
|
||||||
|
show-word-limit
|
||||||
|
style="width: 100%" />
|
||||||
|
</el-form-item>
|
||||||
|
</el-col>
|
||||||
</el-row>
|
</el-row>
|
||||||
</el-form>
|
</el-form>
|
||||||
<template #footer>
|
<template #footer>
|
||||||
@@ -71,7 +83,8 @@ const typeList = ref([
|
|||||||
const form = reactive({
|
const form = reactive({
|
||||||
id: '',
|
id: '',
|
||||||
category: '',
|
category: '',
|
||||||
type: ''
|
type: '',
|
||||||
|
remarks: ''
|
||||||
})
|
})
|
||||||
|
|
||||||
// 定义校验规则
|
// 定义校验规则
|
||||||
@@ -95,12 +108,14 @@ const openDialog = async (type: string = 'add', row?: any) => {
|
|||||||
form.id = ''
|
form.id = ''
|
||||||
form.category = ''
|
form.category = ''
|
||||||
form.type = ''
|
form.type = ''
|
||||||
|
form.remarks = ''
|
||||||
|
|
||||||
// 编辑时填充数据
|
// 编辑时填充数据
|
||||||
if (type === 'edit' && row) {
|
if (type === 'edit' && row) {
|
||||||
form.id = row.id
|
form.id = row.id
|
||||||
form.category = row.category || ''
|
form.category = row.category || ''
|
||||||
form.type = row.type || ''
|
form.type = row.type || ''
|
||||||
|
form.remarks = row.remarks || ''
|
||||||
|
|
||||||
// 如果需要获取详情
|
// 如果需要获取详情
|
||||||
if (row.id && (!row.category || !row.type)) {
|
if (row.id && (!row.category || !row.type)) {
|
||||||
@@ -109,6 +124,7 @@ const openDialog = async (type: string = 'add', row?: any) => {
|
|||||||
if (res.data) {
|
if (res.data) {
|
||||||
form.category = res.data.category || ''
|
form.category = res.data.category || ''
|
||||||
form.type = res.data.type || ''
|
form.type = res.data.type || ''
|
||||||
|
form.remarks = res.data.remarks || ''
|
||||||
}
|
}
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
}).finally(() => {
|
}).finally(() => {
|
||||||
@@ -130,7 +146,8 @@ const onSubmit = async () => {
|
|||||||
try {
|
try {
|
||||||
const submitData = {
|
const submitData = {
|
||||||
category: form.category,
|
category: form.category,
|
||||||
type: form.type
|
type: form.type,
|
||||||
|
remarks: form.remarks
|
||||||
}
|
}
|
||||||
|
|
||||||
if (operType.value === 'add') {
|
if (operType.value === 'add') {
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import { List, Document, Collection, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Document, Collection, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -156,39 +157,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -203,7 +193,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -211,7 +204,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -130,6 +130,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import { List, Document, Trophy, Reading, Minus, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Document, Trophy, Reading, Minus, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -152,39 +153,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -199,7 +189,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -207,7 +200,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -204,6 +204,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import { List, Calendar, Clock, Grid, Trophy, User, Location, UserFilled, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, Grid, Trophy, User, Location, UserFilled, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -234,39 +235,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -286,7 +276,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -294,7 +287,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -175,6 +175,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
// 引入组件
|
// 引入组件
|
||||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||||
import { List, Calendar, Clock, Grid, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, Grid, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -199,39 +200,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -246,7 +236,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -254,7 +247,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -145,6 +145,7 @@ import { getDicts } from '/@/api/admin/dict'
|
|||||||
import { useMessage } from '/@/hooks/message'
|
import { useMessage } from '/@/hooks/message'
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { List, CreditCard, Avatar, Phone, CircleCheck, Collection, House, Camera, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, CreditCard, Avatar, Phone, CircleCheck, Collection, House, Camera, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import { defineAsyncComponent } from 'vue'
|
import { defineAsyncComponent } from 'vue'
|
||||||
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
||||||
|
|
||||||
@@ -179,39 +180,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -226,7 +216,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -234,7 +227,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -250,6 +250,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
// 引入组件
|
// 引入组件
|
||||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||||
import { List, OfficeBuilding, Grid, Avatar, Calendar, DataAnalysis, Document, CircleCheck, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, Grid, Avatar, Calendar, DataAnalysis, Document, CircleCheck, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -278,39 +279,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -325,7 +315,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -333,7 +326,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -180,6 +180,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import FileListDialog from './fileList.vue'
|
import FileListDialog from './fileList.vue'
|
||||||
import { List, OfficeBuilding, Grid, Document, Calendar, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, Grid, Document, Calendar, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -205,39 +206,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -252,7 +242,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -260,7 +253,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -234,6 +234,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import { List, Calendar, Clock, OfficeBuilding, Grid, Collection, Money, User, Document, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, Grid, Collection, Money, User, Document, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -266,39 +267,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -313,7 +303,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -321,7 +314,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -224,6 +224,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import BelongDialog from './belong.vue'
|
import BelongDialog from './belong.vue'
|
||||||
import { List, Calendar, Clock, OfficeBuilding, Grid, Document, User, Collection, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, Grid, Document, User, Collection, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -269,39 +270,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -357,15 +347,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 配置 useTable
|
// 配置 useTable
|
||||||
|
|||||||
@@ -175,6 +175,7 @@ import { getDeptList } from '/@/api/basic/basicclass'
|
|||||||
import { getClassListByRole } from '/@/api/basic/basicclass'
|
import { getClassListByRole } from '/@/api/basic/basicclass'
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { List, OfficeBuilding, Grid, Calendar, Minus, Document, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, Grid, Calendar, Minus, Document, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 引入组件
|
// 引入组件
|
||||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||||
@@ -203,39 +204,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -250,7 +240,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -258,7 +251,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -225,6 +225,7 @@ import { getBuildingList } from '/@/api/stuwork/dormbuilding'
|
|||||||
import { getClassListByRole } from '/@/api/basic/basicclass'
|
import { getClassListByRole } from '/@/api/basic/basicclass'
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { List, DataAnalysis, Trophy, Grid, Calendar, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, DataAnalysis, Trophy, Grid, Calendar, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -258,39 +259,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -346,15 +336,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 加分/减分表单
|
// 加分/减分表单
|
||||||
|
|||||||
@@ -275,6 +275,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import DetailDialog from './detail.vue'
|
import DetailDialog from './detail.vue'
|
||||||
import { List, Calendar, Clock, OfficeBuilding, Grid, UserFilled, Collection, Document, House, Location, CircleCheck, Warning, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, Grid, UserFilled, Collection, Document, House, Location, CircleCheck, Warning, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import { defineAsyncComponent } from 'vue'
|
import { defineAsyncComponent } from 'vue'
|
||||||
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
||||||
|
|
||||||
@@ -320,39 +321,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -367,7 +357,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -375,7 +368,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -302,6 +302,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
// 引入组件
|
// 引入组件
|
||||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||||
import { List, Grid, UserFilled, Tickets, DataAnalysis, Collection, Calendar, User, Document, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Grid, UserFilled, Tickets, DataAnalysis, Collection, Calendar, User, Document, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -362,39 +363,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -450,15 +440,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
|
|||||||
@@ -220,6 +220,7 @@ import { getDeptList, getClassListByRole } from '/@/api/basic/basicclass'
|
|||||||
import { getTypeValue } from '/@/api/admin/dict'
|
import { getTypeValue } from '/@/api/admin/dict'
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { List, Grid, UserFilled, Calendar, Tickets, DataAnalysis, Document, Warning, User, CircleCheck, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Grid, UserFilled, Calendar, Tickets, DataAnalysis, Document, Warning, User, CircleCheck, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import { defineAsyncComponent } from 'vue'
|
import { defineAsyncComponent } from 'vue'
|
||||||
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
||||||
|
|
||||||
@@ -256,39 +257,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -303,7 +293,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -311,7 +304,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -12,11 +12,19 @@
|
|||||||
:cell-style="{ textAlign: 'center' }"
|
:cell-style="{ textAlign: 'center' }"
|
||||||
:header-cell-style="{ textAlign: 'center', background: 'var(--el-table-row-hover-bg-color)' }">
|
:header-cell-style="{ textAlign: 'center', background: 'var(--el-table-row-hover-bg-color)' }">
|
||||||
<el-table-column type="index" label="序号" width="60" align="center" />
|
<el-table-column type="index" label="序号" width="60" align="center" />
|
||||||
<el-table-column prop="teacherNoVal" label="教师工号" show-overflow-tooltip />
|
<el-table-column prop="teacherNoVal" label="教学姓名" show-overflow-tooltip />
|
||||||
<el-table-column prop="telPhone" label="联系方式" show-overflow-tooltip />
|
<el-table-column prop="telPhone" label="联系方式" show-overflow-tooltip />
|
||||||
<el-table-column prop="className" label="班级名称" show-overflow-tooltip />
|
<el-table-column prop="className" label="班级名称" show-overflow-tooltip />
|
||||||
<el-table-column prop="beginTime" label="开始时间" show-overflow-tooltip width="120" />
|
<el-table-column prop="beginTime" label="开始时间" show-overflow-tooltip width="120">
|
||||||
<el-table-column prop="endTime" label="结束时间" show-overflow-tooltip width="120" />
|
<template #default="scope">
|
||||||
|
{{ formatDate(scope.row.beginTime) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<el-table-column prop="endTime" label="结束时间" show-overflow-tooltip width="120">
|
||||||
|
<template #default="scope">
|
||||||
|
{{ formatDate(scope.row.endTime) }}
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
<el-table-column prop="resumeRemark" label="履历" show-overflow-tooltip />
|
<el-table-column prop="resumeRemark" label="履历" show-overflow-tooltip />
|
||||||
<el-table-column prop="remarks" label="备注" show-overflow-tooltip />
|
<el-table-column prop="remarks" label="备注" show-overflow-tooltip />
|
||||||
<el-table-column label="操作" width="150" align="center" fixed="right">
|
<el-table-column label="操作" width="150" align="center" fixed="right">
|
||||||
@@ -148,6 +156,17 @@ const handleRefresh = () => {
|
|||||||
getDetailList()
|
getDetailList()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 格式化日期,只显示日期部分,不显示时分秒
|
||||||
|
const formatDate = (dateStr: string) => {
|
||||||
|
if (!dateStr) return ''
|
||||||
|
// 如果包含时分秒,只取日期部分
|
||||||
|
if (dateStr.includes(' ')) {
|
||||||
|
return dateStr.split(' ')[0]
|
||||||
|
}
|
||||||
|
// 如果已经是日期格式,直接返回
|
||||||
|
return dateStr
|
||||||
|
}
|
||||||
|
|
||||||
// 暴露变量
|
// 暴露变量
|
||||||
defineExpose({
|
defineExpose({
|
||||||
openDialog
|
openDialog
|
||||||
|
|||||||
@@ -57,7 +57,8 @@
|
|||||||
placeholder="选择开始时间"
|
placeholder="选择开始时间"
|
||||||
format="YYYY-MM-DD"
|
format="YYYY-MM-DD"
|
||||||
value-format="YYYY-MM-DD HH:mm:ss"
|
value-format="YYYY-MM-DD HH:mm:ss"
|
||||||
style="width: 100%" />
|
style="width: 100%"
|
||||||
|
@change="handleBeginTimeChange" />
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-col>
|
</el-col>
|
||||||
|
|
||||||
@@ -148,7 +149,23 @@ const dataRules = ref({
|
|||||||
{ required: true, message: '开始时间不能为空', trigger: 'blur' }
|
{ required: true, message: '开始时间不能为空', trigger: 'blur' }
|
||||||
],
|
],
|
||||||
endTime: [
|
endTime: [
|
||||||
{ required: true, message: '结束时间不能为空', trigger: 'blur' }
|
{ required: true, message: '结束时间不能为空', trigger: 'blur' },
|
||||||
|
{
|
||||||
|
validator: (rule: any, value: any, callback: any) => {
|
||||||
|
if (!value || !form.beginTime) {
|
||||||
|
callback()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const beginTime = new Date(form.beginTime).getTime()
|
||||||
|
const endTime = new Date(value).getTime()
|
||||||
|
if (endTime < beginTime) {
|
||||||
|
callback(new Error('结束时间不能小于开始时间'))
|
||||||
|
} else {
|
||||||
|
callback()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
trigger: 'blur'
|
||||||
|
}
|
||||||
],
|
],
|
||||||
resumeRemark: [
|
resumeRemark: [
|
||||||
{ required: true, message: '履历备注不能为空', trigger: 'blur' }
|
{ required: true, message: '履历备注不能为空', trigger: 'blur' }
|
||||||
@@ -196,6 +213,15 @@ const handleClassChange = (classCode: string) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 开始时间变化时,重新验证结束时间
|
||||||
|
const handleBeginTimeChange = () => {
|
||||||
|
if (form.endTime) {
|
||||||
|
nextTick(() => {
|
||||||
|
dataFormRef.value?.validateField('endTime')
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 打开弹窗
|
// 打开弹窗
|
||||||
const openDialog = (idOrData?: string | any) => {
|
const openDialog = (idOrData?: string | any) => {
|
||||||
visible.value = true
|
visible.value = true
|
||||||
@@ -246,6 +272,16 @@ const onSubmit = async () => {
|
|||||||
const valid = await dataFormRef.value.validate().catch(() => {});
|
const valid = await dataFormRef.value.validate().catch(() => {});
|
||||||
if (!valid) return false;
|
if (!valid) return false;
|
||||||
|
|
||||||
|
// 前端验证:结束时间必须大于等于开始时间
|
||||||
|
if (form.beginTime && form.endTime) {
|
||||||
|
const beginTime = new Date(form.beginTime).getTime()
|
||||||
|
const endTime = new Date(form.endTime).getTime()
|
||||||
|
if (endTime < beginTime) {
|
||||||
|
useMessage().error('结束时间不能小于开始时间')
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
loading.value = true;
|
loading.value = true;
|
||||||
form.id ? await putObj(form) : await addObj(form);
|
form.id ? await putObj(form) : await addObj(form);
|
||||||
@@ -253,7 +289,11 @@ const onSubmit = async () => {
|
|||||||
visible.value = false;
|
visible.value = false;
|
||||||
emit('refresh');
|
emit('refresh');
|
||||||
} catch (err: any) {
|
} catch (err: any) {
|
||||||
useMessage().error(err.msg || '操作失败');
|
// 响应拦截器已经处理了错误提示,这里不再重复提示
|
||||||
|
// 但如果错误信息为空,则显示默认提示
|
||||||
|
if (!err.msg) {
|
||||||
|
useMessage().error('操作失败');
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
loading.value = false;
|
loading.value = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
|||||||
// 尝试直接导入看看是否能解决问题
|
// 尝试直接导入看看是否能解决问题
|
||||||
import DetailDialog from './detail.vue';
|
import DetailDialog from './detail.vue';
|
||||||
import { List, User, CreditCard, Phone, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, User, CreditCard, Phone, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -167,39 +168,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -214,7 +204,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -222,7 +215,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -247,6 +247,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import DetailDialog from './detail.vue'
|
import DetailDialog from './detail.vue'
|
||||||
import { List, Document, Calendar, Clock, OfficeBuilding, Grid, UserFilled, Collection, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Document, Calendar, Clock, OfficeBuilding, Grid, UserFilled, Collection, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -299,39 +300,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -387,15 +377,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 配置 useTable
|
// 配置 useTable
|
||||||
|
|||||||
@@ -1,9 +1,22 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="layout-padding">
|
<div class="classplan-container">
|
||||||
<div class="layout-padding-auto layout-padding-view">
|
<div class="page-wrapper">
|
||||||
<!-- 搜索表单 -->
|
<!-- 搜索表单卡片 -->
|
||||||
<el-row v-show="showSearch">
|
<el-card v-show="showSearch" class="search-card" shadow="never">
|
||||||
<el-form :model="state.queryForm" ref="searchFormRef" :inline="true" @keyup.enter="getDataList">
|
<template #header>
|
||||||
|
<div class="card-header">
|
||||||
|
<span class="card-title">
|
||||||
|
<el-icon class="title-icon"><Search /></el-icon>
|
||||||
|
筛选条件
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<el-form
|
||||||
|
:model="state.queryForm"
|
||||||
|
ref="searchFormRef"
|
||||||
|
:inline="true"
|
||||||
|
@keyup.enter="getDataList"
|
||||||
|
class="search-form">
|
||||||
<el-form-item label="学年" prop="schoolYear">
|
<el-form-item label="学年" prop="schoolYear">
|
||||||
<el-select
|
<el-select
|
||||||
v-model="state.queryForm.schoolYear"
|
v-model="state.queryForm.schoolYear"
|
||||||
@@ -78,120 +91,137 @@
|
|||||||
</el-select>
|
</el-select>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
<el-form-item>
|
<el-form-item>
|
||||||
<el-button type="primary" plain icon="Search" @click="getDataList">查询</el-button>
|
<el-button type="primary" icon="Search" @click="getDataList">查询</el-button>
|
||||||
<el-button icon="Refresh" @click="handleReset">重置</el-button>
|
<el-button icon="Refresh" @click="handleReset">重置</el-button>
|
||||||
</el-form-item>
|
</el-form-item>
|
||||||
</el-form>
|
</el-form>
|
||||||
</el-row>
|
</el-card>
|
||||||
|
|
||||||
<!-- 操作按钮 -->
|
<!-- 内容卡片 -->
|
||||||
<el-row>
|
<el-card class="content-card" shadow="never">
|
||||||
<div class="mb8" style="width: 100%">
|
<template #header>
|
||||||
<el-button
|
<div class="card-header">
|
||||||
icon="Plus"
|
<span class="card-title">
|
||||||
type="primary"
|
<el-icon class="title-icon"><Document /></el-icon>
|
||||||
class="ml10"
|
班级计划列表
|
||||||
@click="formDialogRef.openDialog()">
|
</span>
|
||||||
新增
|
<div class="header-actions">
|
||||||
</el-button>
|
<el-button
|
||||||
<right-toolbar
|
icon="FolderAdd"
|
||||||
v-model:showSearch="showSearch"
|
type="primary"
|
||||||
class="ml10"
|
@click="formDialogRef.openDialog()">
|
||||||
style="float: right;"
|
新增
|
||||||
@queryTable="getDataList">
|
</el-button>
|
||||||
<TableColumnControl
|
<right-toolbar
|
||||||
ref="columnControlRef"
|
v-model:showSearch="showSearch"
|
||||||
:columns="tableColumns"
|
class="ml10"
|
||||||
v-model="visibleColumns"
|
@queryTable="getDataList">
|
||||||
trigger-type="default"
|
<TableColumnControl
|
||||||
trigger-circle
|
ref="columnControlRef"
|
||||||
@change="handleColumnChange"
|
:columns="tableColumns"
|
||||||
@order-change="handleColumnOrderChange"
|
v-model="visibleColumns"
|
||||||
>
|
trigger-type="default"
|
||||||
<template #trigger>
|
trigger-circle
|
||||||
<el-tooltip class="item" effect="dark" content="列设置" placement="top">
|
@change="handleColumnChange"
|
||||||
<el-button circle style="margin-left: 0;">
|
@order-change="handleColumnOrderChange"
|
||||||
<el-icon><Menu /></el-icon>
|
>
|
||||||
</el-button>
|
<template #trigger>
|
||||||
</el-tooltip>
|
<el-tooltip class="item" effect="dark" content="列设置" placement="top">
|
||||||
</template>
|
<el-button circle style="margin-left: 0;">
|
||||||
</TableColumnControl>
|
<el-icon><Menu /></el-icon>
|
||||||
</right-toolbar>
|
</el-button>
|
||||||
</div>
|
</el-tooltip>
|
||||||
</el-row>
|
</template>
|
||||||
|
</TableColumnControl>
|
||||||
|
</right-toolbar>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
<!-- 表格 -->
|
<!-- 表格 -->
|
||||||
<el-table
|
<el-table
|
||||||
:data="state.dataList"
|
:data="state.dataList"
|
||||||
v-loading="state.loading"
|
v-loading="state.loading"
|
||||||
border
|
stripe
|
||||||
:cell-style="tableStyle.cellStyle"
|
:cell-style="tableStyle.cellStyle"
|
||||||
:header-cell-style="tableStyle.headerCellStyle">
|
:header-cell-style="tableStyle.headerCellStyle"
|
||||||
<el-table-column type="index" label="序号" width="60" align="center">
|
class="modern-table">
|
||||||
<template #header>
|
<el-table-column type="index" label="序号" width="70" align="center">
|
||||||
<el-icon><List /></el-icon>
|
|
||||||
</template>
|
|
||||||
</el-table-column>
|
|
||||||
<template v-for="col in sortedTableColumns" :key="col.prop || col.label">
|
|
||||||
<el-table-column
|
|
||||||
v-if="checkColumnVisible(col.prop || '') && col.prop !== '操作'"
|
|
||||||
:prop="col.prop"
|
|
||||||
:label="col.label"
|
|
||||||
show-overflow-tooltip
|
|
||||||
align="center"
|
|
||||||
:min-width="col.minWidth"
|
|
||||||
:width="col.width">
|
|
||||||
<template #header>
|
<template #header>
|
||||||
<el-icon><component :is="columnConfigMap[col.prop]?.icon || Calendar" /></el-icon>
|
<el-icon><List /></el-icon>
|
||||||
<span style="margin-left: 4px">{{ col.label }}</span>
|
|
||||||
</template>
|
</template>
|
||||||
<!-- 状态列特殊模板 -->
|
<template #default="{ $index }">
|
||||||
<template v-if="col.prop === 'status'" #default="scope">
|
<el-tag size="small" effect="plain" type="info">{{ $index + 1 + (state.pagination.current - 1) * state.pagination.size }}</el-tag>
|
||||||
<el-tag size="small" :type="scope.row.status === '1' ? 'success' : 'warning'" effect="plain">
|
|
||||||
{{ formatStatus(scope.row.status) }}
|
|
||||||
</el-tag>
|
|
||||||
</template>
|
|
||||||
<!-- 学期列特殊模板 -->
|
|
||||||
<template v-else-if="col.prop === 'schoolTerm'" #default="scope">
|
|
||||||
<el-tag size="small" type="primary" effect="plain">
|
|
||||||
{{ formatSchoolTerm(scope.row.schoolTerm) }}
|
|
||||||
</el-tag>
|
|
||||||
</template>
|
|
||||||
<!-- 更新时间列特殊模板 -->
|
|
||||||
<template v-else-if="col.prop === 'updateTime'" #default="scope">
|
|
||||||
<span>{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table-column>
|
||||||
</template>
|
<template v-for="col in sortedTableColumns" :key="col.prop || col.label">
|
||||||
<el-table-column label="操作" width="150" align="center" fixed="right">
|
<el-table-column
|
||||||
<template #header>
|
v-if="checkColumnVisible(col.prop || '') && col.prop !== '操作'"
|
||||||
<el-icon><Setting /></el-icon>
|
:prop="col.prop"
|
||||||
<span style="margin-left: 4px">操作</span>
|
:label="col.label"
|
||||||
|
show-overflow-tooltip
|
||||||
|
align="center"
|
||||||
|
:min-width="col.minWidth"
|
||||||
|
:width="col.width">
|
||||||
|
<template #header>
|
||||||
|
<el-icon><component :is="columnConfigMap[col.prop]?.icon || Calendar" /></el-icon>
|
||||||
|
<span style="margin-left: 4px">{{ col.label }}</span>
|
||||||
|
</template>
|
||||||
|
<!-- 状态列特殊模板 -->
|
||||||
|
<template v-if="col.prop === 'status'" #default="scope">
|
||||||
|
<el-tag size="small" :type="scope.row.status === '1' ? 'success' : 'warning'" effect="plain" round>
|
||||||
|
{{ formatStatus(scope.row.status) }}
|
||||||
|
</el-tag>
|
||||||
|
</template>
|
||||||
|
<!-- 学期列特殊模板 -->
|
||||||
|
<template v-else-if="col.prop === 'schoolTerm'" #default="scope">
|
||||||
|
<el-tag size="small" type="primary" effect="plain" round>
|
||||||
|
{{ formatSchoolTerm(scope.row.schoolTerm) }}
|
||||||
|
</el-tag>
|
||||||
|
</template>
|
||||||
|
<!-- 更新时间列特殊模板 -->
|
||||||
|
<template v-else-if="col.prop === 'updateTime'" #default="scope">
|
||||||
|
<span class="time-text">{{ parseTime(scope.row.updateTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
</template>
|
</template>
|
||||||
<template #default="scope">
|
<el-table-column label="操作" width="180" align="center" fixed="right">
|
||||||
<el-button
|
<template #header>
|
||||||
icon="Edit"
|
<el-icon><Setting /></el-icon>
|
||||||
text
|
<span style="margin-left: 4px">操作</span>
|
||||||
type="primary"
|
</template>
|
||||||
@click="handleEdit(scope.row)">
|
<template #default="scope">
|
||||||
编辑
|
<el-button
|
||||||
</el-button>
|
icon="EditPen"
|
||||||
<el-button
|
link
|
||||||
icon="Delete"
|
type="primary"
|
||||||
text
|
@click="handleEdit(scope.row)">
|
||||||
type="danger"
|
编辑
|
||||||
@click="handleDelete(scope.row)">
|
</el-button>
|
||||||
删除
|
<el-button
|
||||||
</el-button>
|
icon="Delete"
|
||||||
|
link
|
||||||
|
type="danger"
|
||||||
|
@click="handleDelete(scope.row)">
|
||||||
|
删除
|
||||||
|
</el-button>
|
||||||
|
</template>
|
||||||
|
</el-table-column>
|
||||||
|
<template #empty>
|
||||||
|
<el-empty description="暂无数据" :image-size="120">
|
||||||
|
<el-button type="primary" icon="FolderAdd" @click="formDialogRef.openDialog()">新增计划</el-button>
|
||||||
|
</el-empty>
|
||||||
</template>
|
</template>
|
||||||
</el-table-column>
|
</el-table>
|
||||||
</el-table>
|
|
||||||
|
|
||||||
<!-- 分页 -->
|
<!-- 分页 -->
|
||||||
<pagination
|
<div class="pagination-wrapper">
|
||||||
@size-change="sizeChangeHandle"
|
<pagination
|
||||||
@current-change="currentChangeHandle"
|
@size-change="sizeChangeHandle"
|
||||||
v-bind="state.pagination" />
|
@current-change="currentChangeHandle"
|
||||||
|
v-bind="state.pagination" />
|
||||||
|
</div>
|
||||||
|
</el-card>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- 新增/编辑表单弹窗 -->
|
<!-- 新增/编辑表单弹窗 -->
|
||||||
@@ -212,7 +242,8 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import { parseTime } from "/@/utils/formatTime";
|
import { parseTime } from "/@/utils/formatTime";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import { List, OfficeBuilding, Calendar, CircleCheck, Clock, Grid, Document, User, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, Calendar, CircleCheck, Clock, Grid, Document, User, Setting, Menu, Search, EditPen } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -255,39 +286,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -343,15 +363,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 配置 useTable
|
// 配置 useTable
|
||||||
@@ -518,4 +544,242 @@ onMounted(() => {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style scoped lang="scss">
|
<style scoped lang="scss">
|
||||||
|
.classplan-container {
|
||||||
|
padding: 20px;
|
||||||
|
background: #f5f7fa;
|
||||||
|
min-height: calc(100vh - 84px);
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-wrapper {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 搜索卡片
|
||||||
|
.search-card {
|
||||||
|
border-radius: 12px;
|
||||||
|
border: none;
|
||||||
|
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.04);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-card__header) {
|
||||||
|
padding: 16px 20px;
|
||||||
|
border-bottom: 1px solid #f0f2f5;
|
||||||
|
background: linear-gradient(135deg, #f8f9fa 0%, #ffffff 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-card__body) {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 内容卡片
|
||||||
|
.content-card {
|
||||||
|
border-radius: 12px;
|
||||||
|
border: none;
|
||||||
|
box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.04);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
box-shadow: 0 4px 20px 0 rgba(0, 0, 0, 0.08);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-card__header) {
|
||||||
|
padding: 16px 20px;
|
||||||
|
border-bottom: 1px solid #f0f2f5;
|
||||||
|
background: linear-gradient(135deg, #f8f9fa 0%, #ffffff 100%);
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-card__body) {
|
||||||
|
padding: 20px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 卡片头部
|
||||||
|
.card-header {
|
||||||
|
display: flex;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-title {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
font-size: 16px;
|
||||||
|
font-weight: 600;
|
||||||
|
color: #303133;
|
||||||
|
|
||||||
|
.title-icon {
|
||||||
|
margin-right: 8px;
|
||||||
|
color: var(--el-color-primary);
|
||||||
|
font-size: 18px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-actions {
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
gap: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 搜索表单 - 保持原有宽度
|
||||||
|
.search-form {
|
||||||
|
:deep(.el-form-item) {
|
||||||
|
margin-bottom: 18px;
|
||||||
|
margin-right: 20px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-form-item__label) {
|
||||||
|
font-weight: 500;
|
||||||
|
color: #606266;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 确保表单项宽度保持200px
|
||||||
|
:deep(.el-select) {
|
||||||
|
width: 200px !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 现代化表格
|
||||||
|
.modern-table {
|
||||||
|
border-radius: 8px;
|
||||||
|
overflow: hidden;
|
||||||
|
|
||||||
|
:deep(.el-table__header) {
|
||||||
|
th {
|
||||||
|
background: linear-gradient(135deg, #fafbfc 0%, #f5f7fa 100%);
|
||||||
|
color: #606266;
|
||||||
|
font-weight: 600;
|
||||||
|
border-bottom: 2px solid #e4e7ed;
|
||||||
|
padding: 14px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-table__body) {
|
||||||
|
tr {
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: #f5f7ff;
|
||||||
|
transform: translateY(-1px);
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
td {
|
||||||
|
border-bottom: 1px solid #f0f2f5;
|
||||||
|
padding: 16px 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-table__row) {
|
||||||
|
&:nth-child(even) {
|
||||||
|
background-color: #fafbfc;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 时间文本样式
|
||||||
|
.time-text {
|
||||||
|
color: #909399;
|
||||||
|
font-size: 13px;
|
||||||
|
font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 分页包装器
|
||||||
|
.pagination-wrapper {
|
||||||
|
margin-top: 20px;
|
||||||
|
display: flex;
|
||||||
|
justify-content: flex-end;
|
||||||
|
padding-top: 16px;
|
||||||
|
border-top: 1px solid #f0f2f5;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 响应式设计
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.classplan-container {
|
||||||
|
padding: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.page-wrapper {
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-card,
|
||||||
|
.content-card {
|
||||||
|
:deep(.el-card__header) {
|
||||||
|
padding: 12px 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-card__body) {
|
||||||
|
padding: 16px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.card-header {
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: flex-start;
|
||||||
|
gap: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.header-actions {
|
||||||
|
width: 100%;
|
||||||
|
justify-content: space-between;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 移动端保持表单宽度
|
||||||
|
.search-form {
|
||||||
|
:deep(.el-form-item) {
|
||||||
|
margin-right: 0;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
:deep(.el-select) {
|
||||||
|
width: 100% !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 动画效果
|
||||||
|
@keyframes fadeIn {
|
||||||
|
from {
|
||||||
|
opacity: 0;
|
||||||
|
transform: translateY(10px);
|
||||||
|
}
|
||||||
|
to {
|
||||||
|
opacity: 1;
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-card,
|
||||||
|
.content-card {
|
||||||
|
animation: fadeIn 0.3s ease-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 按钮样式优化
|
||||||
|
:deep(.el-button) {
|
||||||
|
border-radius: 6px;
|
||||||
|
transition: all 0.2s ease;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
transform: translateY(-1px);
|
||||||
|
box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:active {
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 表格空状态优化
|
||||||
|
:deep(.el-empty) {
|
||||||
|
padding: 40px 0;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
@@ -234,6 +234,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import BelongDialog from './belong.vue'
|
import BelongDialog from './belong.vue'
|
||||||
import { List, Calendar, Clock, OfficeBuilding, Grid, Document, User, Collection, Plus, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, Grid, Document, User, Collection, Plus, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import { defineAsyncComponent } from 'vue'
|
import { defineAsyncComponent } from 'vue'
|
||||||
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
||||||
|
|
||||||
@@ -281,39 +282,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -369,15 +359,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 配置 useTable
|
// 配置 useTable
|
||||||
|
|||||||
@@ -199,6 +199,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import ArrangeDialog from './arrange.vue'
|
import ArrangeDialog from './arrange.vue'
|
||||||
import { List, OfficeBuilding, CircleCheck, Location, UserFilled, Collection, Setting, Menu, Calendar } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, CircleCheck, Location, UserFilled, Collection, Setting, Menu, Calendar } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -250,39 +251,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -338,15 +328,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 班级状态列表
|
// 班级状态列表
|
||||||
|
|||||||
@@ -175,6 +175,7 @@ import { getDeptList } from '/@/api/basic/basicclass'
|
|||||||
import { getClassListByRole } from '/@/api/basic/basicclass'
|
import { getClassListByRole } from '/@/api/basic/basicclass'
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { List, OfficeBuilding, Grid, Calendar, Minus, Document, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, Grid, Calendar, Minus, Document, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 引入组件
|
// 引入组件
|
||||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||||
@@ -203,39 +204,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -250,7 +240,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -258,7 +251,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -225,6 +225,7 @@ import { getBuildingList } from '/@/api/stuwork/teachbuilding'
|
|||||||
import { getClassListByRole } from '/@/api/basic/basicclass'
|
import { getClassListByRole } from '/@/api/basic/basicclass'
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { List, DataAnalysis, Trophy, Grid, Calendar, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, DataAnalysis, Trophy, Grid, Calendar, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -258,39 +259,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -346,15 +336,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 加分/减分表单
|
// 加分/减分表单
|
||||||
|
|||||||
@@ -263,6 +263,7 @@ import type { TableInstance } from 'element-plus'
|
|||||||
// 引入组件
|
// 引入组件
|
||||||
const UploadExcel = defineAsyncComponent(() => import('/@/components/Upload/Excel.vue'));
|
const UploadExcel = defineAsyncComponent(() => import('/@/components/Upload/Excel.vue'));
|
||||||
import { List, Calendar, Clock, OfficeBuilding, Grid, UserFilled, Location, DataAnalysis, Document, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, Grid, UserFilled, Location, DataAnalysis, Document, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -301,64 +302,32 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置(在组件创建时)
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
// 根据路由生成 storageKey
|
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
|
||||||
const savedColumns = JSON.parse(saved)
|
|
||||||
const validColumns = tableColumns
|
|
||||||
.filter(col => !col.alwaysShow && !col.fixed)
|
|
||||||
.map(col => col.prop || col.label)
|
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
|
||||||
|
|
||||||
// 使用保存的列配置(即使数量少于所有列,也使用保存的配置)
|
const validColumns = tableColumns
|
||||||
if (filteredSaved.length > 0) {
|
.filter(col => !col.alwaysShow && !col.fixed)
|
||||||
visibleColumns.value = filteredSaved
|
.map(col => col.prop || col.label)
|
||||||
} else {
|
|
||||||
// 如果保存的配置为空或无效,使用所有列
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
visibleColumns.value = validColumns
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
}
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns
|
|
||||||
.filter(col => !col.alwaysShow && !col.fixed)
|
|
||||||
.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns
|
visibleColumns.value = validColumns
|
||||||
.filter(col => !col.alwaysShow && !col.fixed)
|
|
||||||
.map(col => col.prop || col.label)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 加载列排序配置
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const orderKey = `${storageKey}-order`
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
validColumns.forEach(key => {
|
||||||
if (savedOrder) {
|
if (!columnOrder.value.includes(key)) {
|
||||||
try {
|
columnOrder.value.push(key)
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
}
|
||||||
const validColumns = tableColumns
|
})
|
||||||
.filter(col => !col.alwaysShow && !col.fixed)
|
|
||||||
.map(col => col.prop || col.label)
|
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
|
||||||
|
|
||||||
// 添加新列到排序列表末尾
|
|
||||||
validColumns.forEach(key => {
|
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns
|
|
||||||
.filter(col => !col.alwaysShow && !col.fixed)
|
|
||||||
.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns
|
columnOrder.value = validColumns
|
||||||
.filter(col => !col.alwaysShow && !col.fixed)
|
|
||||||
.map(col => col.prop || col.label)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -386,26 +355,27 @@ const checkColumnVisible = (prop: string): boolean => {
|
|||||||
// 监听列变化
|
// 监听列变化
|
||||||
const handleColumnChange = (columns: string[]) => {
|
const handleColumnChange = (columns: string[]) => {
|
||||||
visibleColumns.value = columns
|
visibleColumns.value = columns
|
||||||
// 根据路由生成 storageKey
|
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
// 只保存可选择的列(排除固定列和 alwaysShow 列)
|
|
||||||
const selectableColumns = columns.filter(col => {
|
const selectableColumns = columns.filter(col => {
|
||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
// 保存到 localStorage
|
// 保存到本地统一存储
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
// 根据路由生成 storageKey
|
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
// 保存排序顺序到 localStorage
|
// 保存到本地统一存储
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 初始化列排序顺序(已废弃,使用 loadSavedConfig 代替)
|
// 初始化列排序顺序(已废弃,使用 loadSavedConfig 代替)
|
||||||
|
|||||||
@@ -227,6 +227,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import DetailDialog from './detail.vue'
|
import DetailDialog from './detail.vue'
|
||||||
import { List, Calendar, Clock, Grid, Trophy, User, Location, UserFilled, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, Grid, Trophy, User, Location, UserFilled, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -258,39 +259,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -305,7 +295,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -313,7 +306,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -282,6 +282,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import DetailDialog from './detail.vue'
|
import DetailDialog from './detail.vue'
|
||||||
import { List, Calendar, Clock, Grid, UserFilled, Male, Female, House, Warning, CircleCheck, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, Grid, UserFilled, Male, Female, House, Warning, CircleCheck, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -320,39 +321,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -367,7 +357,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -375,7 +368,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -213,6 +213,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
import InitDialog from './init.vue'
|
import InitDialog from './init.vue'
|
||||||
import RecordDialog from './record.vue'
|
import RecordDialog from './record.vue'
|
||||||
import { List, Calendar, Clock, OfficeBuilding, Grid, Upload, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, Grid, Upload, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -252,39 +253,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -340,15 +330,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 配置 useTable
|
// 配置 useTable
|
||||||
|
|||||||
@@ -210,6 +210,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||||
const EmptyRoomDialog = defineAsyncComponent(() => import('./emptyRoomDialog.vue'));
|
const EmptyRoomDialog = defineAsyncComponent(() => import('./emptyRoomDialog.vue'));
|
||||||
import { List, OfficeBuilding, Grid, UserFilled, Setting, Menu, Calendar } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, Grid, UserFilled, Setting, Menu, Calendar } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -254,39 +255,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -342,15 +332,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
|
|||||||
@@ -89,6 +89,7 @@ import { fetchList, delObjs } from "/@/api/stuwork/dormbuildingmanger";
|
|||||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { List, OfficeBuilding, CreditCard, UserFilled, Setting, Menu, Calendar } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, CreditCard, UserFilled, Setting, Menu, Calendar } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -113,39 +114,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -201,15 +191,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 配置 useTable
|
// 配置 useTable
|
||||||
|
|||||||
@@ -195,6 +195,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
// 引入组件
|
// 引入组件
|
||||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||||
import { List, Calendar, Clock, OfficeBuilding, House, Document, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, House, Document, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -232,39 +233,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -320,15 +310,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
|
|||||||
@@ -215,6 +215,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import { List, Calendar, Clock, OfficeBuilding, Grid, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, Grid, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -247,39 +248,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -294,7 +284,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -302,7 +295,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -205,6 +205,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
// 引入组件
|
// 引入组件
|
||||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||||
import { List, OfficeBuilding, Grid, House, Calendar, Document, CircleCheck, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, Grid, House, Calendar, Document, CircleCheck, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import { defineAsyncComponent as defineStatusTag } from 'vue'
|
import { defineAsyncComponent as defineStatusTag } from 'vue'
|
||||||
const StatusTag = defineStatusTag(() => import('/@/components/StatusTag/index.vue'))
|
const StatusTag = defineStatusTag(() => import('/@/components/StatusTag/index.vue'))
|
||||||
|
|
||||||
@@ -245,39 +246,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -333,15 +323,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
|
|||||||
@@ -242,6 +242,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
// 引入组件
|
// 引入组件
|
||||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||||
import { List, OfficeBuilding, House, UserFilled, EditPen, Setting, Menu, Calendar } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, House, UserFilled, EditPen, Setting, Menu, Calendar } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -273,39 +274,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -361,15 +351,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
const searchFormRef = ref()
|
const searchFormRef = ref()
|
||||||
const showSearch = ref(true)
|
const showSearch = ref(true)
|
||||||
|
|||||||
@@ -264,6 +264,7 @@ import FormDialog from './form.vue';
|
|||||||
import TransferDialog from './transfer.vue';
|
import TransferDialog from './transfer.vue';
|
||||||
import TreeSelect from '/@/components/TreeSelect/index.vue';
|
import TreeSelect from '/@/components/TreeSelect/index.vue';
|
||||||
import { List, OfficeBuilding, House, Grid, UserFilled, Phone, CreditCard, Avatar, User, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, House, Grid, UserFilled, Phone, CreditCard, Avatar, User, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import { defineAsyncComponent } from 'vue'
|
import { defineAsyncComponent } from 'vue'
|
||||||
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
||||||
|
|
||||||
@@ -313,39 +314,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -401,15 +391,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 树形选择器配置
|
// 树形选择器配置
|
||||||
|
|||||||
@@ -162,6 +162,7 @@ import { useMessage } from "/@/hooks/message";
|
|||||||
import { getDicts } from "/@/api/admin/dict";
|
import { getDicts } from "/@/api/admin/dict";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { List, Calendar, OfficeBuilding, Grid, CreditCard, Avatar, Collection, House, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, OfficeBuilding, Grid, CreditCard, Avatar, Collection, House, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -204,39 +205,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -292,15 +282,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
|
|||||||
@@ -155,6 +155,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
// 引入组件
|
// 引入组件
|
||||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||||
import { List, Document, Grid, CircleCheck, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Document, Grid, CircleCheck, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import { defineAsyncComponent as defineStatusTag } from 'vue'
|
import { defineAsyncComponent as defineStatusTag } from 'vue'
|
||||||
const StatusTag = defineStatusTag(() => import('/@/components/StatusTag/index.vue'))
|
const StatusTag = defineStatusTag(() => import('/@/components/StatusTag/index.vue'))
|
||||||
|
|
||||||
@@ -186,39 +187,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -274,15 +264,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 配置 useTable
|
// 配置 useTable
|
||||||
|
|||||||
@@ -148,6 +148,7 @@ import { useMessage } from "/@/hooks/message";
|
|||||||
import { parseTime } from "/@/utils/formatTime";
|
import { parseTime } from "/@/utils/formatTime";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { List, OfficeBuilding, Grid, Document, DataAnalysis, Calendar, Clock, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, Grid, Document, DataAnalysis, Calendar, Clock, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -182,39 +183,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -270,15 +260,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
|
|||||||
@@ -238,6 +238,7 @@ import { getDicts } from "/@/api/admin/dict";
|
|||||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { UploadFilled, List, Calendar, Clock, OfficeBuilding, Grid, UserFilled, Trophy, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
import { UploadFilled, List, Calendar, Clock, OfficeBuilding, Grid, UserFilled, Trophy, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
@@ -271,39 +272,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -318,7 +308,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -326,7 +319,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -219,6 +219,7 @@ import { getDicts } from "/@/api/admin/dict";
|
|||||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { UploadFilled, List, Calendar, Clock, House, Trophy, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
import { UploadFilled, List, Calendar, Clock, House, Trophy, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
@@ -248,39 +249,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -295,7 +285,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -303,7 +296,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import { List, Trophy, Collection, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Trophy, Collection, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -164,39 +165,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -211,7 +201,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -219,7 +212,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -175,6 +175,7 @@ import { useMessage } from "/@/hooks/message";
|
|||||||
import { parseTime } from "/@/utils/formatTime";
|
import { parseTime } from "/@/utils/formatTime";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { List, OfficeBuilding, Grid, CreditCard, Avatar, DataAnalysis, Warning, Trophy, Clock, Menu } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, Grid, CreditCard, Avatar, DataAnalysis, Warning, Trophy, Clock, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -219,39 +220,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -307,15 +297,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 查询表单
|
// 查询表单
|
||||||
|
|||||||
@@ -179,6 +179,7 @@ import {
|
|||||||
List, Document, Calendar, Clock, Timer, Collection,
|
List, Document, Calendar, Clock, Timer, Collection,
|
||||||
Money, EditPen, Setting, Menu
|
Money, EditPen, Setting, Menu
|
||||||
} from '@element-plus/icons-vue'
|
} from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -209,39 +210,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -256,7 +246,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -264,7 +257,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -309,16 +309,33 @@ const onSubmit = async () => {
|
|||||||
if (valid) {
|
if (valid) {
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
|
// 根据 deptCode 获取 deptName
|
||||||
|
const selectedDept = deptList.value.find(item => item.deptCode === form.deptCode)
|
||||||
|
const deptName = selectedDept ? selectedDept.deptName : ''
|
||||||
|
|
||||||
|
// 根据 teacherNo 获取 teacherRealName
|
||||||
|
const selectedTeacher = teacherList.value.find(item => item.teacherNo === form.teacherNo)
|
||||||
|
const teacherRealName = selectedTeacher ? selectedTeacher.realName : ''
|
||||||
|
|
||||||
|
// 格式化 openTime,确保格式为 YYYY-MM-DD HH:mm:ss
|
||||||
|
let formattedOpenTime = form.openTime
|
||||||
|
if (formattedOpenTime && !formattedOpenTime.includes(' ')) {
|
||||||
|
formattedOpenTime = formattedOpenTime + ' 00:00:00'
|
||||||
|
}
|
||||||
|
|
||||||
const submitData = {
|
const submitData = {
|
||||||
associationName: form.associationName,
|
associationName: form.associationName,
|
||||||
deptCode: form.deptCode,
|
deptCode: form.deptCode,
|
||||||
|
deptName: deptName,
|
||||||
teacherNo: form.teacherNo,
|
teacherNo: form.teacherNo,
|
||||||
|
teacherRealName: teacherRealName,
|
||||||
maintainer: form.maintainer,
|
maintainer: form.maintainer,
|
||||||
openTime: form.openTime,
|
openTime: formattedOpenTime,
|
||||||
tel: form.tel,
|
tel: form.tel,
|
||||||
type: form.type,
|
type: form.type,
|
||||||
applyNote: form.applyNote,
|
applyNote: form.applyNote,
|
||||||
ruleNote: form.ruleNote
|
ruleNote: form.ruleNote,
|
||||||
|
num: '' // 根据接口文档示例,num 字段为空字符串
|
||||||
}
|
}
|
||||||
|
|
||||||
if (operType.value === 'edit' && form.id) {
|
if (operType.value === 'edit' && form.id) {
|
||||||
|
|||||||
@@ -188,6 +188,7 @@ import {
|
|||||||
List, Trophy, OfficeBuilding, User, UserFilled, Calendar,
|
List, Trophy, OfficeBuilding, User, UserFilled, Calendar,
|
||||||
Phone, Collection, Document, Files, Setting, Menu
|
Phone, Collection, Document, Files, Setting, Menu
|
||||||
} from '@element-plus/icons-vue'
|
} from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -232,39 +233,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -320,15 +310,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 表格样式
|
// 表格样式
|
||||||
|
|||||||
@@ -227,6 +227,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import ResultDialog from './result.vue'
|
import ResultDialog from './result.vue'
|
||||||
import { List, Calendar, Clock, OfficeBuilding, Grid, Avatar, UserFilled, Phone, Heart, Warning, CircleCheck, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, Grid, Avatar, UserFilled, Phone, Heart, Warning, CircleCheck, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -276,39 +277,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -364,15 +354,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 配置 useTable
|
// 配置 useTable
|
||||||
|
|||||||
@@ -271,6 +271,7 @@ import { getDicts } from "/@/api/admin/dict";
|
|||||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { UploadFilled, List, CreditCard, Calendar, Clock, OfficeBuilding, Grid, Avatar, Collection, Document, Setting, Menu } from '@element-plus/icons-vue'
|
import { UploadFilled, List, CreditCard, Calendar, Clock, OfficeBuilding, Grid, Avatar, Collection, Document, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
@@ -322,39 +323,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -410,15 +400,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 配置 useTable
|
// 配置 useTable
|
||||||
|
|||||||
@@ -140,6 +140,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import { List, Calendar, Document, OfficeBuilding, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Document, OfficeBuilding, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -162,39 +163,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -209,7 +199,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -217,7 +210,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -329,6 +329,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import { List, Calendar, Clock, OfficeBuilding, Avatar, Collection, Document, House, Warning, CircleCheck, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, Avatar, Collection, Document, House, Warning, CircleCheck, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import { defineAsyncComponent } from 'vue'
|
import { defineAsyncComponent } from 'vue'
|
||||||
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
||||||
|
|
||||||
@@ -389,39 +390,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -477,15 +467,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
|
|||||||
@@ -269,6 +269,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import { List, Calendar, Clock, OfficeBuilding, Grid, Avatar, CreditCard, Warning, Document, CircleCheck, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, Grid, Avatar, CreditCard, Warning, Document, CircleCheck, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import { defineAsyncComponent } from 'vue'
|
import { defineAsyncComponent } from 'vue'
|
||||||
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
||||||
|
|
||||||
@@ -320,39 +321,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -408,15 +398,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
|
|||||||
@@ -162,6 +162,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import { List, Calendar, Clock, OfficeBuilding, Grid, CreditCard, Avatar, Document, UserFilled, Phone, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, Grid, CreditCard, Avatar, Document, UserFilled, Phone, EditPen, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -194,39 +195,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -241,7 +231,10 @@ const handleColumnChange = (value: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 列排序变化处理
|
// 列排序变化处理
|
||||||
@@ -249,7 +242,10 @@ const handleColumnOrderChange = (order: string[]) => {
|
|||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(`${storageKey}-order`, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 排序后的表格列
|
// 排序后的表格列
|
||||||
|
|||||||
@@ -239,6 +239,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import { List, Calendar, Clock, OfficeBuilding, Grid, CreditCard, Avatar, Collection, Document, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, Grid, CreditCard, Avatar, Collection, Document, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -288,39 +289,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -376,15 +366,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
|
|||||||
@@ -111,6 +111,7 @@ import FormDialog from './form.vue'
|
|||||||
import {
|
import {
|
||||||
List, OfficeBuilding, Collection, Location, UserFilled, Sort, Setting, Menu, Calendar
|
List, OfficeBuilding, Collection, Location, UserFilled, Sort, Setting, Menu, Calendar
|
||||||
} from '@element-plus/icons-vue'
|
} from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -142,39 +143,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -230,15 +220,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 表格样式
|
// 表格样式
|
||||||
|
|||||||
@@ -227,7 +227,8 @@ import { getGradeList } from "/@/api/basic/basicclass";
|
|||||||
import { useMessage, useMessageBox } from "/@/hooks/message";
|
import { useMessage, useMessageBox } from "/@/hooks/message";
|
||||||
import { parseTime } from "/@/utils/formatTime";
|
import { parseTime } from "/@/utils/formatTime";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { UploadFilled, List, OfficeBuilding, Grid, CreditCard, Avatar, Phone, Calendar, Postcard, Briefcase, Setting, Menu } from '@element-plus/icons-vue';
|
import { UploadFilled, List, OfficeBuilding, Grid, CreditCard, Avatar, Phone, Calendar, Postcard, Briefcase, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable';
|
||||||
import type { UploadFile, UploadFiles } from 'element-plus';
|
import type { UploadFile, UploadFiles } from 'element-plus';
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
|
|
||||||
@@ -273,39 +274,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -361,15 +351,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 表格样式
|
// 表格样式
|
||||||
|
|||||||
@@ -221,6 +221,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import TeacherDialog from './teacher.vue'
|
import TeacherDialog from './teacher.vue'
|
||||||
import { List, Calendar, Clock, OfficeBuilding, CreditCard, Avatar, Grid, UserFilled, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, CreditCard, Avatar, Grid, UserFilled, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -266,39 +267,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -354,15 +344,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
|
|||||||
@@ -108,6 +108,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import { List, OfficeBuilding, EditPen, Setting, Menu, Calendar } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, EditPen, Setting, Menu, Calendar } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -131,39 +132,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -219,15 +209,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 配置 useTable
|
// 配置 useTable
|
||||||
|
|||||||
@@ -104,11 +104,12 @@ const onSubmit = async () => {
|
|||||||
|
|
||||||
loading.value = true
|
loading.value = true
|
||||||
try {
|
try {
|
||||||
const ids = selectedRows.value.map((row: any) => row.id)
|
// 根据接口文档,请求体格式为数组,每个元素包含 id 和 deptCode
|
||||||
await batchSet({
|
const requestData = selectedRows.value.map((row: any) => ({
|
||||||
ids: ids,
|
id: row.id,
|
||||||
deptCode: form.deptCode
|
deptCode: form.deptCode
|
||||||
})
|
}))
|
||||||
|
await batchSet(requestData)
|
||||||
useMessage().success('批量设置成功')
|
useMessage().success('批量设置成功')
|
||||||
visible.value = false
|
visible.value = false
|
||||||
selectedRows.value = []
|
selectedRows.value = []
|
||||||
|
|||||||
@@ -151,6 +151,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import BatchDialog from './batch.vue'
|
import BatchDialog from './batch.vue'
|
||||||
import { List, OfficeBuilding, Location, Setting, Menu, Calendar } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, Location, Setting, Menu, Calendar } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -182,39 +183,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -270,15 +260,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
|
|||||||
@@ -259,6 +259,7 @@ import {
|
|||||||
OfficeBuilding, Reading, UserFilled, Calendar, Sort, Grid,
|
OfficeBuilding, Reading, UserFilled, Calendar, Sort, Grid,
|
||||||
CreditCard, Avatar, Setting, Menu
|
CreditCard, Avatar, Setting, Menu
|
||||||
} from '@element-plus/icons-vue'
|
} from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 引入组件
|
// 引入组件
|
||||||
const GenderTag = defineAsyncComponent(() => import('/@/components/GenderTag/index.vue'))
|
const GenderTag = defineAsyncComponent(() => import('/@/components/GenderTag/index.vue'))
|
||||||
@@ -324,39 +325,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -412,15 +402,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 表格样式
|
// 表格样式
|
||||||
|
|||||||
@@ -170,6 +170,7 @@ import { parseTime } from "/@/utils/formatTime";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue'
|
import FormDialog from './form.vue'
|
||||||
import { List, Document, Calendar, Clock, Collection, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Document, Calendar, Clock, Collection, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -206,39 +207,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -294,15 +284,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 表格样式
|
// 表格样式
|
||||||
|
|||||||
@@ -248,6 +248,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
import FormDialog from './form.vue';
|
import FormDialog from './form.vue';
|
||||||
import DetailDialog from './detail.vue';
|
import DetailDialog from './detail.vue';
|
||||||
import { List, OfficeBuilding, House, UserFilled, Money, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, OfficeBuilding, House, UserFilled, Money, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -290,39 +291,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -378,15 +368,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
|
|||||||
@@ -195,6 +195,7 @@ import { useMessage, useMessageBox } from "/@/hooks/message";
|
|||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import FormDialog from './form.vue';
|
import FormDialog from './form.vue';
|
||||||
import { List, House, Calendar, Clock, Document, Collection, CreditCard, Money, User, Avatar, CircleCheck, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, House, Calendar, Clock, Document, Collection, CreditCard, Money, User, Avatar, CircleCheck, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
import { defineAsyncComponent } from 'vue'
|
import { defineAsyncComponent } from 'vue'
|
||||||
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
const StatusTag = defineAsyncComponent(() => import('/@/components/StatusTag/index.vue'))
|
||||||
|
|
||||||
@@ -246,39 +247,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -334,15 +324,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
|
|||||||
@@ -165,6 +165,7 @@ import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
|||||||
import {
|
import {
|
||||||
List, Calendar, Clock, Document, Files, User, Setting, Menu
|
List, Calendar, Clock, Document, Files, User, Setting, Menu
|
||||||
} from '@element-plus/icons-vue'
|
} from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 引入组件
|
// 引入组件
|
||||||
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
const FormDialog = defineAsyncComponent(() => import('./form.vue'));
|
||||||
@@ -208,62 +209,34 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置(在组件创建时)
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
// 根据路由生成 storageKey
|
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
|
||||||
const savedColumns = JSON.parse(saved)
|
|
||||||
const validColumns = tableColumns
|
|
||||||
.filter(col => !col.alwaysShow && !col.fixed)
|
|
||||||
.map(col => col.prop || col.label)
|
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
|
||||||
|
|
||||||
if (filteredSaved.length > 0) {
|
const validColumns = tableColumns
|
||||||
visibleColumns.value = filteredSaved
|
.filter(col => !col.alwaysShow && !col.fixed)
|
||||||
} else {
|
.map(col => col.prop || col.label)
|
||||||
visibleColumns.value = validColumns
|
|
||||||
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
|
} else {
|
||||||
|
visibleColumns.value = validColumns
|
||||||
|
}
|
||||||
|
|
||||||
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
|
validColumns.forEach(key => {
|
||||||
|
if (!columnOrder.value.includes(key)) {
|
||||||
|
columnOrder.value.push(key)
|
||||||
}
|
}
|
||||||
} catch (e) {
|
})
|
||||||
visibleColumns.value = tableColumns
|
|
||||||
.filter(col => !col.alwaysShow && !col.fixed)
|
|
||||||
.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns
|
columnOrder.value = validColumns
|
||||||
.filter(col => !col.alwaysShow && !col.fixed)
|
|
||||||
.map(col => col.prop || col.label)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 加载列排序配置
|
|
||||||
const orderKey = `${storageKey}-order`
|
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
|
||||||
if (savedOrder) {
|
|
||||||
try {
|
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
|
||||||
const validColumns = tableColumns
|
|
||||||
.filter(col => !col.alwaysShow && !col.fixed)
|
|
||||||
.map(col => col.prop || col.label)
|
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
|
||||||
|
|
||||||
validColumns.forEach(key => {
|
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns
|
|
||||||
.filter(col => !col.alwaysShow && !col.fixed)
|
|
||||||
.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
columnOrder.value = tableColumns
|
|
||||||
.filter(col => !col.alwaysShow && !col.fixed)
|
|
||||||
.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 立即加载保存的配置
|
// 立即加载保存的配置
|
||||||
@@ -317,15 +290,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 配置 useTable
|
// 配置 useTable
|
||||||
|
|||||||
@@ -161,6 +161,7 @@ import { getClassListByRole } from "/@/api/basic/basicclass";
|
|||||||
import { useMessage } from "/@/hooks/message";
|
import { useMessage } from "/@/hooks/message";
|
||||||
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
import TableColumnControl from '/@/components/TableColumnControl/index.vue'
|
||||||
import { List, Calendar, Clock, OfficeBuilding, Grid, Document, CreditCard, Avatar, Collection, Setting, Menu } from '@element-plus/icons-vue'
|
import { List, Calendar, Clock, OfficeBuilding, Grid, Document, CreditCard, Avatar, Collection, Setting, Menu } from '@element-plus/icons-vue'
|
||||||
|
import { getTableConfigFromLocal, saveTableConfigToLocal, updateUserTableConfig } from '/@/api/admin/usertable'
|
||||||
|
|
||||||
// 定义变量内容
|
// 定义变量内容
|
||||||
const route = useRoute()
|
const route = useRoute()
|
||||||
@@ -204,39 +205,28 @@ const visibleColumns = ref<string[]>([])
|
|||||||
// 列排序顺序
|
// 列排序顺序
|
||||||
const columnOrder = ref<string[]>([])
|
const columnOrder = ref<string[]>([])
|
||||||
|
|
||||||
// 立即从 localStorage 加载配置
|
// 从本地统一存储加载配置
|
||||||
const loadSavedConfig = () => {
|
const loadSavedConfig = () => {
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}`
|
const storageKey = `table-columns-${routePath}`
|
||||||
const saved = localStorage.getItem(storageKey)
|
const savedConfig = getTableConfigFromLocal(storageKey)
|
||||||
if (saved) {
|
|
||||||
try {
|
if (savedConfig && savedConfig.visibleColumns) {
|
||||||
const savedColumns = JSON.parse(saved)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
const filteredSaved = savedConfig.visibleColumns.filter((col: string) => validColumns.includes(col))
|
||||||
const filteredSaved = savedColumns.filter((col: string) => validColumns.includes(col))
|
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
||||||
visibleColumns.value = filteredSaved.length > 0 ? filteredSaved : validColumns
|
|
||||||
} catch (e) {
|
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
visibleColumns.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
|
|
||||||
const orderKey = `${storageKey}-order`
|
if (savedConfig && savedConfig.columnOrder) {
|
||||||
const savedOrder = localStorage.getItem(orderKey)
|
const validColumns = tableColumns.map(col => col.prop || col.label)
|
||||||
if (savedOrder) {
|
columnOrder.value = savedConfig.columnOrder.filter((key: string) => validColumns.includes(key))
|
||||||
try {
|
validColumns.forEach(key => {
|
||||||
const parsedOrder = JSON.parse(savedOrder)
|
if (!columnOrder.value.includes(key)) {
|
||||||
const validColumns = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value.push(key)
|
||||||
columnOrder.value = parsedOrder.filter((key: string) => validColumns.includes(key))
|
}
|
||||||
validColumns.forEach(key => {
|
})
|
||||||
if (!columnOrder.value.includes(key)) {
|
|
||||||
columnOrder.value.push(key)
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} catch (e) {
|
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
columnOrder.value = tableColumns.map(col => col.prop || col.label)
|
||||||
}
|
}
|
||||||
@@ -292,15 +282,21 @@ const handleColumnChange = (columns: string[]) => {
|
|||||||
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
const column = tableColumns.find(c => (c.prop || c.label) === col)
|
||||||
return column && !column.alwaysShow && !column.fixed
|
return column && !column.alwaysShow && !column.fixed
|
||||||
})
|
})
|
||||||
localStorage.setItem(storageKey, JSON.stringify(selectableColumns))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { visibleColumns: selectableColumns })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { visibleColumns: selectableColumns }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 监听列排序变化
|
// 监听列排序变化
|
||||||
const handleColumnOrderChange = (order: string[]) => {
|
const handleColumnOrderChange = (order: string[]) => {
|
||||||
columnOrder.value = order
|
columnOrder.value = order
|
||||||
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
const routePath = route.path.replace(/^\//, '').replace(/\//g, '-')
|
||||||
const storageKey = `table-columns-${routePath}-order`
|
const storageKey = `table-columns-${routePath}`
|
||||||
localStorage.setItem(storageKey, JSON.stringify(order))
|
// 保存到本地统一存储
|
||||||
|
saveTableConfigToLocal(storageKey, { columnOrder: order })
|
||||||
|
// 异步保存到后端
|
||||||
|
updateUserTableConfig(storageKey, { columnOrder: order }).catch(() => {})
|
||||||
}
|
}
|
||||||
|
|
||||||
// 搜索表单
|
// 搜索表单
|
||||||
|
|||||||
Reference in New Issue
Block a user