mirror of
https://gitee.com/dromara/electron-egg.git
synced 2026-05-20 18:28:10 +08:00
feat: rewrite sqlite demo
This commit is contained in:
@@ -9,7 +9,7 @@ const { getExtraResourcesDir } = require('ee-core/ps');
|
||||
const { logger } = require('ee-core/log');
|
||||
const { getConfig } = require('ee-core/config');
|
||||
const { frameworkService } = require('../service/framework');
|
||||
const { frameworkService } = require('../service/database/sqlitedb');
|
||||
const { sqlitedbService } = require('../service/database/sqlitedb');
|
||||
|
||||
/**
|
||||
* framework - demo
|
||||
@@ -38,7 +38,7 @@ class FrameworkController {
|
||||
|
||||
try {
|
||||
// test
|
||||
Services.get('database.sqlitedb').getDataDir();
|
||||
sqlitedbService.getDataDir();
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
data.code = -1;
|
||||
@@ -47,26 +47,26 @@ class FrameworkController {
|
||||
|
||||
switch (action) {
|
||||
case 'add' :
|
||||
data.result = await Services.get('database.sqlitedb').addTestDataSqlite(info);;
|
||||
data.result = await sqlitedbService.addTestDataSqlite(info);;
|
||||
break;
|
||||
case 'del' :
|
||||
data.result = await Services.get('database.sqlitedb').delTestDataSqlite(delete_name);;
|
||||
data.result = await sqlitedbService.delTestDataSqlite(delete_name);;
|
||||
break;
|
||||
case 'update' :
|
||||
data.result = await Services.get('database.sqlitedb').updateTestDataSqlite(update_name, update_age);
|
||||
data.result = await sqlitedbService.updateTestDataSqlite(update_name, update_age);
|
||||
break;
|
||||
case 'get' :
|
||||
data.result = await Services.get('database.sqlitedb').getTestDataSqlite(search_age);
|
||||
data.result = await sqlitedbService.getTestDataSqlite(search_age);
|
||||
break;
|
||||
case 'getDataDir' :
|
||||
data.result = await Services.get('database.sqlitedb').getDataDir();
|
||||
data.result = await sqlitedbService.getDataDir();
|
||||
break;
|
||||
case 'setDataDir' :
|
||||
data.result = await Services.get('database.sqlitedb').setCustomDataDir(data_dir);
|
||||
data.result = await sqlitedbService.setCustomDataDir(data_dir);
|
||||
break;
|
||||
}
|
||||
|
||||
data.all_list = await Services.get('database.sqlitedb').getAllTestDataSqlite();
|
||||
data.all_list = await sqlitedbService.getAllTestDataSqlite();
|
||||
|
||||
return data;
|
||||
}
|
||||
@@ -168,7 +168,7 @@ class FrameworkController {
|
||||
/**
|
||||
* 异步消息类型
|
||||
*/
|
||||
async ipcInvokeMsg(args, event) {
|
||||
async ipcInvokeMsg(args) {
|
||||
let timeNow = dayjs().format('YYYY-MM-DD HH:mm:ss');
|
||||
const data = args + ' - ' + timeNow;
|
||||
|
||||
|
||||
@@ -11,8 +11,6 @@ const path = require('path');
|
||||
class BasedbService {
|
||||
|
||||
constructor(options) {
|
||||
super();
|
||||
|
||||
const { dbname } = options;
|
||||
this.dbname = dbname;
|
||||
this.db = undefined;
|
||||
@@ -26,14 +24,25 @@ class BasedbService {
|
||||
// 定义数据文件
|
||||
const dbFile = path.join(getStorageDir(), "db", this.dbname);
|
||||
const sqliteOptions = {
|
||||
driver: 'sqlite',
|
||||
default: {
|
||||
timeout: 6000,
|
||||
verbose: null // 打印sql语法 console.log
|
||||
}
|
||||
timeout: 6000,
|
||||
verbose: console.log
|
||||
}
|
||||
const storage = new SqliteStorage(dbFile, sqliteOptions);
|
||||
this.db = storage.db;
|
||||
this.storage = new SqliteStorage(dbFile, sqliteOptions);
|
||||
this.db = this.storage.db;
|
||||
}
|
||||
|
||||
/*
|
||||
* change data dir (sqlite)
|
||||
*/
|
||||
changeDataDir(dir) {
|
||||
// the absolute path of the db file
|
||||
const dbFile = path.join(dir, this.dbname);
|
||||
const sqliteOptions = {
|
||||
timeout: 6000,
|
||||
verbose: console.log
|
||||
}
|
||||
this.storage = new SqliteStorage(dbFile, sqliteOptions);
|
||||
this.db = this.storage.db;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
const { BasedbService } = require('./basedb');
|
||||
const Storage = require('ee-core/storage');
|
||||
const _ = require('lodash');
|
||||
const path = require('path');
|
||||
|
||||
/**
|
||||
* sqlite数据存储
|
||||
@@ -13,9 +11,10 @@ class SqlitedbService extends BasedbService {
|
||||
|
||||
constructor () {
|
||||
const options = {
|
||||
dbname:'sqlite-demo.db',
|
||||
dbname: 'sqlite-demo.db',
|
||||
}
|
||||
super(options);
|
||||
this.userTableName = 'user';
|
||||
this._initTable();
|
||||
}
|
||||
|
||||
@@ -24,13 +23,12 @@ class SqlitedbService extends BasedbService {
|
||||
*/
|
||||
_initTable() {
|
||||
// 检查表是否存在
|
||||
const userTableName = 'user';
|
||||
const masterStmt = this.db.prepare('SELECT * FROM sqlite_master WHERE type=? AND name = ?');
|
||||
let tableExists = masterStmt.get('table', userTableName);
|
||||
let tableExists = masterStmt.get('table', this.userTableName);
|
||||
if (!tableExists) {
|
||||
// 创建表
|
||||
const create_user_table_sql =
|
||||
`CREATE TABLE ${userTableName}
|
||||
`CREATE TABLE ${this.userTableName}
|
||||
(
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name CHAR(50) NOT NULL,
|
||||
@@ -44,14 +42,8 @@ class SqlitedbService extends BasedbService {
|
||||
* 增 Test data (sqlite)
|
||||
*/
|
||||
async addTestDataSqlite(data) {
|
||||
//console.log("add data:", data);
|
||||
|
||||
let table = 'user';
|
||||
await this.checkAndCreateTableSqlite(table);
|
||||
|
||||
const insert = this.demoSqliteDB.db.prepare(`INSERT INTO ${table} (name, age) VALUES (@name, @age)`);
|
||||
const insert = this.db.prepare(`INSERT INTO ${this.userTableName} (name, age) VALUES (@name, @age)`);
|
||||
insert.run(data);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -59,14 +51,8 @@ class SqlitedbService extends BasedbService {
|
||||
* 删 Test data (sqlite)
|
||||
*/
|
||||
async delTestDataSqlite(name = '') {
|
||||
//console.log("delete name:", name);
|
||||
|
||||
let table = 'user';
|
||||
await this.checkAndCreateTableSqlite(table);
|
||||
|
||||
const delUser = this.demoSqliteDB.db.prepare(`DELETE FROM ${table} WHERE name = ?`);
|
||||
const delUser = this.db.prepare(`DELETE FROM ${this.userTableName} WHERE name = ?`);
|
||||
delUser.run(name);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -74,14 +60,8 @@ class SqlitedbService extends BasedbService {
|
||||
* 改 Test data (sqlite)
|
||||
*/
|
||||
async updateTestDataSqlite(name= '', age = 0) {
|
||||
//console.log("update :", {name, age});
|
||||
|
||||
let table = 'user';
|
||||
await this.checkAndCreateTableSqlite(table);
|
||||
|
||||
const updateUser = this.demoSqliteDB.db.prepare(`UPDATE ${table} SET age = ? WHERE name = ?`);
|
||||
const updateUser = this.db.prepare(`UPDATE ${this.userTableName} SET age = ? WHERE name = ?`);
|
||||
updateUser.run(age, name);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -89,14 +69,8 @@ class SqlitedbService extends BasedbService {
|
||||
* 查 Test data (sqlite)
|
||||
*/
|
||||
async getTestDataSqlite(age = 0) {
|
||||
//console.log("select :", {age});
|
||||
|
||||
let table = 'user';
|
||||
await this.checkAndCreateTableSqlite(table);
|
||||
|
||||
const selectUser = this.demoSqliteDB.db.prepare(`SELECT * FROM ${table} WHERE age = @age`);
|
||||
const selectUser = this.db.prepare(`SELECT * FROM ${this.userTableName} WHERE age = @age`);
|
||||
const users = selectUser.all({age: age});
|
||||
//console.log("select users:", users);
|
||||
return users;
|
||||
}
|
||||
|
||||
@@ -104,14 +78,8 @@ class SqlitedbService extends BasedbService {
|
||||
* all Test data (sqlite)
|
||||
*/
|
||||
async getAllTestDataSqlite() {
|
||||
//console.log("select all user");
|
||||
|
||||
let table = 'user';
|
||||
await this.checkAndCreateTableSqlite(table);
|
||||
|
||||
const selectAllUser = this.demoSqliteDB.db.prepare(`SELECT * FROM ${table} `);
|
||||
const selectAllUser = this.db.prepare(`SELECT * FROM ${this.userTableName} `);
|
||||
const allUser = selectAllUser.all();
|
||||
//console.log("select allUser:", allUser);
|
||||
return allUser;
|
||||
}
|
||||
|
||||
@@ -119,8 +87,7 @@ class SqlitedbService extends BasedbService {
|
||||
* get data dir (sqlite)
|
||||
*/
|
||||
async getDataDir() {
|
||||
const dir = this.demoSqliteDB.getStorageDir();
|
||||
|
||||
const dir = this.storage.getStorageDir();
|
||||
return dir;
|
||||
}
|
||||
|
||||
@@ -132,17 +99,8 @@ class SqlitedbService extends BasedbService {
|
||||
return;
|
||||
}
|
||||
|
||||
// the absolute path of the db file
|
||||
const dbFile = path.join(dir, this.sqliteFile);
|
||||
const sqliteOptions = {
|
||||
driver: 'sqlite',
|
||||
default: {
|
||||
timeout: 6000,
|
||||
verbose: console.log
|
||||
}
|
||||
}
|
||||
this.demoSqliteDB = Storage.connection(dbFile, sqliteOptions);
|
||||
|
||||
this.changeDataDir(dir);
|
||||
this._initTable();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,11 +51,6 @@ const constantRouterMap = [
|
||||
name: 'FrameworkSoftwareIndex',
|
||||
component: () => import('@/views/framework/software/Index.vue')
|
||||
},
|
||||
{
|
||||
path: '/framework/java/index',
|
||||
name: 'FrameworkJavaIndex',
|
||||
component: () => import('@/views/framework/java/Index.vue')
|
||||
},
|
||||
{
|
||||
path: '/framework/testapi/index',
|
||||
name: 'FrameworkTestApiIndex',
|
||||
|
||||
@@ -31,12 +31,12 @@
|
||||
<a-col :span="2">
|
||||
</a-col>
|
||||
<a-col :span="5">
|
||||
<a-button @click="selectDir">
|
||||
<a-button @click="selectDir()">
|
||||
修改目录
|
||||
</a-button>
|
||||
</a-col>
|
||||
<a-col :span="5">
|
||||
<a-button @click="openDir">
|
||||
<a-button @click="openDir()">
|
||||
打开目录
|
||||
</a-button>
|
||||
</a-col>
|
||||
@@ -86,7 +86,8 @@
|
||||
<div class="one-block-2">
|
||||
<a-row>
|
||||
<a-col :span="6">
|
||||
<a-input v-model="search_age" :value="search_age" addon-before="年龄" />
|
||||
<!-- eslint-disable-next-line vue/no-v-model-argument -->
|
||||
<a-input v-model:value="search_age" addon-before="年龄" />
|
||||
</a-col>
|
||||
<a-col :span="3">
|
||||
</a-col>
|
||||
@@ -114,12 +115,14 @@
|
||||
<div class="one-block-2">
|
||||
<a-row>
|
||||
<a-col :span="6">
|
||||
<a-input v-model="update_name" :value="update_name" addon-before="姓名(条件)" />
|
||||
<!-- eslint-disable-next-line vue/no-v-model-argument -->
|
||||
<a-input v-model:value="update_name" addon-before="姓名(条件)" />
|
||||
</a-col>
|
||||
<a-col :span="3">
|
||||
</a-col>
|
||||
<a-col :span="6">
|
||||
<a-input v-model="update_age" :value="update_age" addon-before="年龄" />
|
||||
<!-- eslint-disable-next-line vue/no-v-model-argument -->
|
||||
<a-input v-model:value="update_age" addon-before="年龄" />
|
||||
</a-col>
|
||||
<a-col :span="3">
|
||||
</a-col>
|
||||
@@ -138,7 +141,8 @@
|
||||
<div class="one-block-2">
|
||||
<a-row>
|
||||
<a-col :span="6">
|
||||
<a-input v-model="delete_name" :value="delete_name" addon-before="姓名" />
|
||||
<!-- eslint-disable-next-line vue/no-v-model-argument -->
|
||||
<a-input v-model:value="delete_name" addon-before="姓名" />
|
||||
</a-col>
|
||||
<a-col :span="3">
|
||||
</a-col>
|
||||
@@ -155,109 +159,108 @@
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
<script setup>
|
||||
import { ipcApiRoute } from '@/api';
|
||||
import { ipc } from '@/utils/ipcRenderer';
|
||||
import { ref, onMounted } from 'vue';
|
||||
import { message } from 'ant-design-vue';
|
||||
|
||||
export default {
|
||||
data() {
|
||||
return {
|
||||
name: '李四',
|
||||
age: 20,
|
||||
userList: ['空'],
|
||||
search_age: 20,
|
||||
update_name: '李四',
|
||||
update_age: 31,
|
||||
delete_name: '李四',
|
||||
all_list: ['空'],
|
||||
data_dir: ''
|
||||
};
|
||||
},
|
||||
mounted () {
|
||||
this.init();
|
||||
},
|
||||
methods: {
|
||||
init() {
|
||||
const params = {
|
||||
action: 'getDataDir',
|
||||
}
|
||||
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
|
||||
if (res.code == -1) {
|
||||
this.$message.error('请检查sqlite是否正确安装', 5);
|
||||
return
|
||||
}
|
||||
const name = ref('李四');
|
||||
const age = ref(20);
|
||||
const userList = ref(['空']);
|
||||
const search_age = ref(20);
|
||||
const update_name = ref('李四');
|
||||
const update_age = ref(31);
|
||||
const delete_name = ref('李四');
|
||||
const all_list = ref(['空']);
|
||||
const data_dir = ref('');
|
||||
|
||||
this.data_dir = res.result;
|
||||
this.getAllTestData();
|
||||
})
|
||||
},
|
||||
getAllTestData () {
|
||||
const params = {
|
||||
action: 'all',
|
||||
}
|
||||
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
|
||||
if (res.all_list.length == 0) {
|
||||
return false;
|
||||
}
|
||||
this.all_list = res.all_list;
|
||||
})
|
||||
},
|
||||
selectDir() {
|
||||
ipc.invoke(ipcApiRoute.os.selectFolder, '').then(r => {
|
||||
this.data_dir = r;
|
||||
// 修改数据目录
|
||||
this.modifyDataDir(r);
|
||||
})
|
||||
},
|
||||
openDir() {
|
||||
console.log('dd:', this.data_dir);
|
||||
ipc.invoke(ipcApiRoute.os.openDirectory, {id: this.data_dir}).then(res => {
|
||||
//
|
||||
})
|
||||
},
|
||||
modifyDataDir(dir) {
|
||||
const params = {
|
||||
action: 'setDataDir',
|
||||
data_dir: dir
|
||||
}
|
||||
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
|
||||
this.all_list = res.all_list;
|
||||
})
|
||||
},
|
||||
sqlitedbOperation (ac) {
|
||||
const params = {
|
||||
action: ac,
|
||||
info: {
|
||||
name: this.name,
|
||||
age: parseInt(this.age)
|
||||
},
|
||||
search_age: parseInt(this.search_age),
|
||||
update_name: this.update_name,
|
||||
update_age: parseInt(this.update_age),
|
||||
delete_name: this.delete_name,
|
||||
}
|
||||
if (ac == 'add' && this.name.length == 0) {
|
||||
this.$message.error(`请填写数据`);
|
||||
}
|
||||
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
|
||||
console.log('res:', res);
|
||||
if (ac == 'get') {
|
||||
if (res.result.length == 0) {
|
||||
this.$message.error(`没有数据`);
|
||||
return;
|
||||
}
|
||||
this.userList = res.result;
|
||||
}
|
||||
if (res.all_list.length == 0) {
|
||||
this.all_list = ['空'];
|
||||
return;
|
||||
}
|
||||
this.all_list = res.all_list;
|
||||
this.$message.success(`success`);
|
||||
})
|
||||
},
|
||||
onMounted(() => {
|
||||
init()
|
||||
})
|
||||
|
||||
function init() {
|
||||
const params = {
|
||||
action: 'getDataDir',
|
||||
}
|
||||
};
|
||||
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
|
||||
if (res.code == -1) {
|
||||
message.error('请检查sqlite是否正确安装', 5);
|
||||
return
|
||||
}
|
||||
|
||||
data_dir.value = res.result;
|
||||
getAllTestData();
|
||||
})
|
||||
}
|
||||
|
||||
function getAllTestData () {
|
||||
const params = {
|
||||
action: 'all',
|
||||
}
|
||||
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
|
||||
if (res.all_list.length == 0) {
|
||||
return false;
|
||||
}
|
||||
all_list.value = res.all_list;
|
||||
})
|
||||
}
|
||||
|
||||
function selectDir() {
|
||||
ipc.invoke(ipcApiRoute.os.selectFolder, '').then(r => {
|
||||
data_dir.value = r;
|
||||
// 修改数据目录
|
||||
modifyDataDir(r);
|
||||
})
|
||||
}
|
||||
|
||||
function openDir() {
|
||||
console.log('data_dir:', data_dir.value);
|
||||
ipc.invoke(ipcApiRoute.os.openDirectory, {id: data_dir.value})
|
||||
}
|
||||
|
||||
function modifyDataDir(dir) {
|
||||
const params = {
|
||||
action: 'setDataDir',
|
||||
data_dir: dir
|
||||
}
|
||||
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
|
||||
all_list.value = res.all_list;
|
||||
})
|
||||
}
|
||||
|
||||
function sqlitedbOperation (ac) {
|
||||
const params = {
|
||||
action: ac,
|
||||
info: {
|
||||
name: name.value,
|
||||
age: parseInt(age.value)
|
||||
},
|
||||
search_age: parseInt(search_age.value),
|
||||
update_name: update_name.value,
|
||||
update_age: parseInt(update_age.value),
|
||||
delete_name: delete_name.value,
|
||||
}
|
||||
if (ac == 'add' && name.value.length == 0) {
|
||||
message.error(`请填写数据`);
|
||||
}
|
||||
ipc.invoke(ipcApiRoute.framework.sqlitedbOperation, params).then(res => {
|
||||
console.log('res:', res);
|
||||
if (ac == 'get') {
|
||||
if (res.result.length == 0) {
|
||||
message.error(`没有数据`);
|
||||
return;
|
||||
}
|
||||
userList.value = res.result;
|
||||
}
|
||||
if (res.all_list.length == 0) {
|
||||
all_list.value = ['空'];
|
||||
return;
|
||||
}
|
||||
all_list.value = res.all_list;
|
||||
message.success(`success`);
|
||||
})
|
||||
}
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
#app-sqlite-db {
|
||||
|
||||
Reference in New Issue
Block a user