diff --git a/ui/autoMate/src/main/db/config.ts b/ui/autoMate/src/main/db/config.ts new file mode 100644 index 0000000..c4e56f6 --- /dev/null +++ b/ui/autoMate/src/main/db/config.ts @@ -0,0 +1,3 @@ +export default { + databaseDirectory: "" +} \ No newline at end of file diff --git a/ui/autoMate/src/main/db/connect.ts b/ui/autoMate/src/main/db/connect.ts index 7759809..311c06f 100644 --- a/ui/autoMate/src/main/db/connect.ts +++ b/ui/autoMate/src/main/db/connect.ts @@ -1,7 +1,17 @@ import Database, * as BetterSqlite3 from 'better-sqlite3'; import { app } from 'electron'; -import {resolve} from 'node:path' -const file = resolve(app.getPath('home'), 'autoMate.db') -const db: BetterSqlite3.Database = new Database(file, {}); -db.pragma('journal_mode = WAL'); -export {db}; \ No newline at end of file +import { resolve } from 'node:path' +import config from './config'; +import { existsSync } from 'node:fs'; + +const db = (): BetterSqlite3.Database => { + let dir = resolve(app.getPath('home')) + if (config.databaseDirectory && existsSync(config.databaseDirectory)) { + dir = config.databaseDirectory + } + + const db: BetterSqlite3.Database = new Database(dir + '/autoMate.db', {}); + db.pragma('journal_mode = WAL'); + return db +} +export { db }; \ No newline at end of file diff --git a/ui/autoMate/src/main/db/index.ts b/ui/autoMate/src/main/db/index.ts index 58d118b..676e44a 100644 --- a/ui/autoMate/src/main/db/index.ts +++ b/ui/autoMate/src/main/db/index.ts @@ -1,2 +1,2 @@ -import './tables' +// import './tables' import './ipc' \ No newline at end of file diff --git a/ui/autoMate/src/main/db/ipc.ts b/ui/autoMate/src/main/db/ipc.ts index bf61185..367c1f0 100644 --- a/ui/autoMate/src/main/db/ipc.ts +++ b/ui/autoMate/src/main/db/ipc.ts @@ -1,5 +1,7 @@ import { IpcMainInvokeEvent, dialog, ipcMain } from "electron"; import * as query from './query' +import config from "./config"; +import { initTable } from "./tables"; ipcMain.handle('sql', (_event: IpcMainInvokeEvent, sql: string, type: SqlActionType, params={}) => { return query[type](sql, params) }) @@ -11,4 +13,12 @@ ipcMain.handle('selectDatabaseDirectory', async () => { properties: ['openDirectory', 'createDirectory'] }) return ret.canceled?'' : ret.filePaths[0] +}) + +ipcMain.on('setDatabaseDirectory', (_event: IpcMainInvokeEvent, path: string) => { + config.databaseDirectory = path +}) + +ipcMain.on('initTable', () => { + initTable() }) \ No newline at end of file diff --git a/ui/autoMate/src/main/db/query.ts b/ui/autoMate/src/main/db/query.ts index 2000f0c..819a9a9 100644 --- a/ui/autoMate/src/main/db/query.ts +++ b/ui/autoMate/src/main/db/query.ts @@ -1,25 +1,25 @@ import {db} from './connect' export const findAll = (sql: string, params={}) => { - return db.prepare(sql).all(params); + return db().prepare(sql).all(params); } export const findOne = (sql: string) => { - return db.prepare(sql).get(); + return db().prepare(sql).get(); } export const create = (sql: string) => { - return db.prepare(sql).run().lastInsertRowid; + return db().prepare(sql).run().lastInsertRowid; } //使用 params 是为了防止 sql 注入 export const update = (sql: string, params: Record) => { - return db.prepare(sql).run(params).changes; + return db().prepare(sql).run(params).changes; } export const del = (sql: string, params={}) => { - return db.prepare(sql).run(params).changes; + return db().prepare(sql).run(params).changes; } export const config = () => { diff --git a/ui/autoMate/src/main/db/tables.ts b/ui/autoMate/src/main/db/tables.ts index 214462e..3052bd6 100644 --- a/ui/autoMate/src/main/db/tables.ts +++ b/ui/autoMate/src/main/db/tables.ts @@ -1,8 +1,11 @@ -import { Random } from "mockjs"; +// import { Random } from "mockjs"; import { db } from "./connect"; import { findOne } from "./query"; -db.exec(` +export function initTable() { + + +db().exec(` CREATE TABLE IF NOT EXISTS categories ( id INTEGER PRIMARY KEY AUTOINCREMENT not null, name TEXT not null, @@ -11,7 +14,7 @@ CREATE TABLE IF NOT EXISTS categories ( `) -db.exec(` +db().exec(` CREATE TABLE IF NOT EXISTS contents ( id INTEGER PRIMARY KEY AUTOINCREMENT not null, title TEXT not null, @@ -22,34 +25,36 @@ CREATE TABLE IF NOT EXISTS contents ( `) -db.exec(` +db().exec(` CREATE TABLE IF NOT EXISTS config ( id INTEGER PRIMARY KEY AUTOINCREMENT not null, content TEXT not null ); `) +initData() +} function initData() { const initData = findOne('select * from config') if (initData) return - db.exec(`insert into config (id, content) values(1,'{"shortCut":"Alt+Space","databaseDirectory":""}')`) + db().exec(`insert into config (id, content) values(1,'{"shortCut":"Alt+Space","databaseDirectory":""}')`) } -initData() + // for (let i = 0; i < 20; i++) { // const name = Random.title(5, 10) -// db.exec(`insert into config (content) values('${name}')`) +// db().exec(`insert into config (content) values('${name}')`) // } // for (let i = 0; i < 20; i++) { // const name = Random.title(5, 10) -// db.exec(`insert into categories (name, created_at) values('${name}', datetime())`) +// db().exec(`insert into categories (name, created_at) values('${name}', datetime())`) // } // for (let i = 1; i < 20; i++) { // const title = Random.title(5, 10) // const content = Random.paragraph(5, 10) -// db.exec(`insert into contents (title, content, category_id, created_at) values('${title}', '${content}', ${i}, datetime())`) +// db().exec(`insert into contents (title, content, category_id, created_at) values('${title}', '${content}', ${i}, datetime())`) // } \ No newline at end of file diff --git a/ui/autoMate/src/main/windows.ts b/ui/autoMate/src/main/windows.ts index 736b108..639fda4 100644 --- a/ui/autoMate/src/main/windows.ts +++ b/ui/autoMate/src/main/windows.ts @@ -25,7 +25,7 @@ export const config = { config: { id: 0, options: { - initShow: false, + initShow: true, width: 600, height: 400, openDevTools: true, diff --git a/ui/autoMate/src/preload/index.d.ts b/ui/autoMate/src/preload/index.d.ts index f3d8a1d..904df67 100644 --- a/ui/autoMate/src/preload/index.d.ts +++ b/ui/autoMate/src/preload/index.d.ts @@ -10,7 +10,9 @@ declare global { sql: (sql: string, type: SqlActionType, params?: Record) => Promise openWindow: (name: WindowNameType) => void, closeWindow: (name: WindowNameType) => void, - selectDatabaseDirectory: () => Promise + selectDatabaseDirectory: () => Promise, + setDatabaseDirectory: (path: string) => void, + initTable: () => void, } } } diff --git a/ui/autoMate/src/preload/index.ts b/ui/autoMate/src/preload/index.ts index 7ab110a..83e0a04 100644 --- a/ui/autoMate/src/preload/index.ts +++ b/ui/autoMate/src/preload/index.ts @@ -23,8 +23,13 @@ const api = { }, selectDatabaseDirectory: () => { return ipcRenderer.invoke("selectDatabaseDirectory") + }, + setDatabaseDirectory: (path: string) => { + ipcRenderer.send("setDatabaseDirectory", path) + }, + initTable: () => { + ipcRenderer.send("initTable") } - } // Use `contextBridge` APIs to expose Electron APIs to diff --git a/ui/autoMate/src/renderer/src/components/Result/index.tsx b/ui/autoMate/src/renderer/src/components/Result/index.tsx index f03bebb..93590ad 100644 --- a/ui/autoMate/src/renderer/src/components/Result/index.tsx +++ b/ui/autoMate/src/renderer/src/components/Result/index.tsx @@ -10,7 +10,7 @@ export default function Result() { className={item.id == selectId? styles.active : ''} onClick={()=>select(item.id)} > -

{item.content}

+

{item.title}

))} diff --git a/ui/autoMate/src/renderer/src/hooks/useSearch.ts b/ui/autoMate/src/renderer/src/hooks/useSearch.ts index be9ff70..7e25e3e 100644 --- a/ui/autoMate/src/renderer/src/hooks/useSearch.ts +++ b/ui/autoMate/src/renderer/src/hooks/useSearch.ts @@ -1,20 +1,17 @@ // import useCode from "@renderer/hooks/useCode" import { ChangeEvent } from "react" -import { codes } from "@renderer/data" import { useStore } from "@renderer/store/useStore" export default()=>{ // const {setData} = useCode() const setData = useStore((state)=>state.setData) // const [search, setSearch] = useState('') const search = useStore((state)=>state.search) - const setSearch = useStore((state)=>state.setSearch) - const handleSearch = (e: ChangeEvent) => { - setSearch(e.target.value) - setData( - codes.filter((code) => - code.content.toLowerCase().includes(e.target.value.toLowerCase() || '@@@@@@') - ).slice(0, 8) - ) + const handleSearch = async (e: ChangeEvent) => { + const data = await window.api.sql( + `select * from contents where title like @content`, + 'findAll', + {content: `%${e.target.value}%`}) + setData(data as ContentType[]) } return {search, handleSearch} } diff --git a/ui/autoMate/src/renderer/src/layouts/Home/index.tsx b/ui/autoMate/src/renderer/src/layouts/Home/index.tsx index bb6095a..36b32c5 100644 --- a/ui/autoMate/src/renderer/src/layouts/Home/index.tsx +++ b/ui/autoMate/src/renderer/src/layouts/Home/index.tsx @@ -12,6 +12,8 @@ function Home(): JSX.Element { const {setIgnoreMouseEvents} = useIgnoreMouseEvents() const config = useStore(state => state.config) window.api.shortCut(config.shortCut) + window.api.setDatabaseDirectory(config.databaseDirectory) + window.api.initTable() useEffect(()=>{ setIgnoreMouseEvents(mainRef as MutableRefObject) // //为开发方便,临时代码 diff --git a/ui/autoMate/src/renderer/src/store/useStore.ts b/ui/autoMate/src/renderer/src/store/useStore.ts index f6254ce..5ed5c06 100644 --- a/ui/autoMate/src/renderer/src/store/useStore.ts +++ b/ui/autoMate/src/renderer/src/store/useStore.ts @@ -4,7 +4,7 @@ interface StateProps{ config: ConfigDataType, setConfig: (config: ConfigDataType) => void, data: DataType[], - setData: (data: DataType[]) => void, + setData: (data: ContentType[]) => void, search: string, setSearch: (search: string) => void, error: string, @@ -15,7 +15,7 @@ interface StateProps{ setEditCategoryId: (id: number) => void } export const useStore = create((set) => ({ - config: {shortCut: "", databaseDirectory: ""}, + config: {shortCut: "alt+d", databaseDirectory: ""}, setConfig: (config) => set({config}), data: [], setData: (data) => set({data}), @@ -29,3 +29,4 @@ export const useStore = create((set) => ({ setEditCategoryId: (editCategoryId) => set({editCategoryId}) })) +