import {defineStore} from 'pinia' /** * 表信息 */ export interface Schema { module: string name: string comment: string engine: string charset: string collaction: string created_at: boolean creator_id: boolean updated_at: boolean deleted_at: boolean } /** * 表结构信息 */ export interface Structure { id: number field: string length: number type: string nullable: boolean unique: boolean default: number | string comment: string } /** * generate */ interface CreateSchema { schema: Schema structures: Structure[] is_finished: boolean } /** * useSchemaStore */ export const useSchemaStore = defineStore('schemaStore', { state(): CreateSchema { return { // schema schema: Object.assign({ module: '', name: '', comment: '', engine: 'InnoDB', charset: 'utf8mb4', collection: 'utf8mb4_unicode_ci', created_at: true, creator_id: true, updated_at: true, deleted_at: true, }), // structures structures: [] as Structure[], // is finished is_finished: false, } }, // store getters getters: { getSchema(): Schema { return this.schema }, getStructures(): Structure[] { return this.structures }, getFinished(): boolean { return this.is_finished }, }, // store actions actions: { // set schema setSchema(schema: Schema): void { this.schema = schema }, setStructures(structures: Array): void { this.structures = structures }, // add structure addStructure(structure: Structure): void { if (structure.id) { this.structures = this.structures.filter((s: Structure) => { if (s.id === structure.id) { s = structure } return s }) } else { structure.id = this.structures.length + 1 this.structures.push(structure) } }, // filter structures filterStructures(id: number) { this.structures = this.structures.filter((s: Structure) => { return !(s.id === id) }) }, // init structure initStructure(): Structure { return Object.assign({ id: 0, field: '', label: '', type: '', length: 0, nullable: false, unique: false, default: '', comment: '', }) }, /** * finished */ finished(): void { this.$reset() this.is_finished = true }, /** * unfinished */ start(): void { this.is_finished = false }, }, })