import { acceptHMRUpdate, defineStore } from 'pinia' import { DynamicFormTableVo } from '../entity/dynamic/dynamic-form-table' interface DynamicTableStore { tableColumnsMap: { [key: string]: Required<{ value: string label: string }>[] } tableRecordMap: { [key: string]: Required<{ value: string label: string }>[] } } const STORE_KEY = 'dynamic-table-store' export const useDynamicTableStore = defineStore(STORE_KEY, { state: () => { tableColumnsMap: {}, tableRecordMap: {} }, getters: { /** * 是否存在列表 * @param state */ hasColumns: state => (tableId: string) => state.tableColumnsMap && state.tableColumnsMap[tableId], /** * 获取列表信息 * @param state */ listColumns: state => (tableId: string) => state.tableColumnsMap && state.tableColumnsMap[tableId] ? state.tableColumnsMap[tableId] : [], /** * 是否存在记录列表 * @param state */ hasRecord: state => (tableId: string) => state.tableRecordMap && state.tableRecordMap[tableId], /** * 获取记录列表信息 * @param state */ listRecord: state => (tableId: string) => state.tableRecordMap && state.tableRecordMap[tableId] ? state.tableRecordMap[tableId] : [] }, actions: { /** * 设置table * @param tableVo */ setColumns(tableVo: DynamicFormTableVo) { this.$patch({ tableColumnsMap: { ...(this.tableColumnsMap || {}), [tableVo.id]: tableVo.columnList.map(item => ({ value: item.columnName, label: item.columnComment })) } }) }, /** * 设置table * @param tableId * @param showField * @param list */ setRecord(tableId: string, showField: string, list: unknown[]) { this.$patch({ tableRecordMap: { ...(this.tableRecordMap || {}), [tableId]: list.map(item => { const item2 = item as { [key: string]: string } return { value: item2.id, label: item2[showField] } }) } }) } }, // 开启数据缓存 persist: { enabled: true, strategies: [ { key: STORE_KEY, storage: sessionStorage } ] } }) if (import.meta.hot) { import.meta.hot.accept(acceptHMRUpdate(useDynamicTableStore, import.meta.hot)) }