Compare commits

...

4 Commits

Author SHA1 Message Date
Ironsp
7a4477966d feat 添加数据库模块 2026-09-09 17:18:25 +08:00
Ironsp
edb640a64b feat 添加模块 2026-09-09 10:30:08 +08:00
Ironsp
d67b18b60a feat 优化代码 2026-09-08 18:00:19 +08:00
Ironsp
2493bbcb2f feat 优化代码 2026-09-08 17:59:29 +08:00
6 changed files with 127 additions and 23 deletions

View File

@@ -21,7 +21,8 @@ export default defineManifestConfig({
screenOrientation: ['landscape-primary'],
/* 模块配置 */
modules: {
SQLite: {},
Bluetooth: {}, // 蓝牙
SQLite: {}, // 数据库
},
/* 应用发布信息 */
distribute: {

View File

@@ -1,5 +1,15 @@
<script setup lang="ts">
onLaunch(() => {})
import { initTables } from '@/service'
onLaunch(async () => {
try {
await initTables()
console.log('数据库初始化完成')
}
catch (err) {
console.error('数据库初始化失败:', err)
}
})
</script>
<style>

View File

@@ -385,7 +385,6 @@ declare module 'vue' {
readonly getSystemInfo: UnwrapRef<typeof import('./utils/device')['getSystemInfo']>
readonly h: UnwrapRef<typeof import('vue')['h']>
readonly ignorableWatch: UnwrapRef<typeof import('@vueuse/core')['ignorableWatch']>
readonly initTables: UnwrapRef<typeof import('./utils/sqlite')['initTables']>
readonly inject: UnwrapRef<typeof import('vue')['inject']>
readonly injectLocal: UnwrapRef<typeof import('@vueuse/core')['injectLocal']>
readonly isDefined: UnwrapRef<typeof import('@vueuse/core')['isDefined']>

View File

@@ -1,5 +1,4 @@
import DB from '@/utils/sqlite'
import { projectTableSql } from './project'
import { rtkTrackTableSql } from './rtkTrack'
import { warningRecordTableSql } from './warningRecord'
@@ -10,19 +9,20 @@ export { rtkTrackTableSql } from './rtkTrack'
export { warningRecordTableSql } from './warningRecord'
export { workRecordTableSql } from './workRecord'
/**
* 初始化数据库表个数:4个
*/
export async function initTables() {
const sqls = [
const tableSqls = [
projectTableSql,
workRecordTableSql,
rtkTrackTableSql,
warningRecordTableSql,
]
]
/**
* 初始化数据库
*/
export async function initTables() {
try {
await DB.transaction(sqls)
console.log('开始初始化数据库表...')
await DB.transaction(tableSqls)
console.log('数据库表初始化成功')
}
catch (err) {

View File

@@ -72,8 +72,16 @@ class DB {
resolve()
},
fail(err: any) {
// -1402: Same Name Already Open,数据库已打开则视为成功
if (err?.code === -1402) {
console.log('数据库已打开,跳过')
isOpen = true
resolve()
}
else {
console.error('数据库打开失败:', err)
reject(err)
}
},
})
})
@@ -147,25 +155,65 @@ class DB {
}
/**
* 执行事务
* 执行事务(BEGIN → SQLs → COMMIT,失败自动 ROLLBACK)
*/
static transaction(sqls: string[]): Promise<void> {
return DB.open().then(() => {
return new Promise((resolve, reject) => {
static async transaction(sqls: string[]): Promise<void> {
await DB.open()
// 开启事务
await new Promise<void>((resolve, reject) => {
plus.sqlite.transaction({
name: DB_NAME,
sql: sqls,
operation: 'begin',
success() {
console.log('事务执行成功')
resolve()
},
fail(err: any) {
console.error('事务执行失败:', err)
console.error('开启事务失败:', err)
reject(err)
},
})
})
try {
// 逐条执行 SQL
for (const sql of sqls) {
await DB.executeSql(sql)
}
// 提交事务
await new Promise<void>((resolve, reject) => {
plus.sqlite.transaction({
name: DB_NAME,
operation: 'commit',
success() {
console.log('事务提交成功')
resolve()
},
fail(err: any) {
console.error('提交事务失败:', err)
reject(err)
},
})
})
}
catch (err) {
// 回滚事务
await new Promise<void>((resolve) => {
plus.sqlite.transaction({
name: DB_NAME,
operation: 'rollback',
success() {
console.log('事务回滚成功')
resolve()
},
fail() {
resolve()
},
})
})
throw err
}
}
// ======================== CRUD 封装方法 ========================

View File

@@ -0,0 +1,46 @@
// vite.config.ts
import Uni from "file:///C:/Users/Administrator/Desktop/work/Road_roller/node_modules/.pnpm/@uni-helper+plugin-uni@0.1.0_@dcloudio+vite-plugin-uni@3.0.0-4080720251210001_@vueuse+core@13_le5bumlafdzre2on4j245qmxce/node_modules/@uni-helper/plugin-uni/src/index.js";
import UniHelperComponents from "file:///C:/Users/Administrator/Desktop/work/Road_roller/node_modules/.pnpm/@uni-helper+vite-plugin-uni-components@0.2.3_rollup@4.59.0/node_modules/@uni-helper/vite-plugin-uni-components/dist/index.mjs";
import UniHelperLayouts from "file:///C:/Users/Administrator/Desktop/work/Road_roller/node_modules/.pnpm/@uni-helper+vite-plugin-uni-layouts@0.1.11_rollup@4.59.0/node_modules/@uni-helper/vite-plugin-uni-layouts/dist/index.mjs";
import UniHelperManifest from "file:///C:/Users/Administrator/Desktop/work/Road_roller/node_modules/.pnpm/@uni-helper+vite-plugin-uni-manifest@0.2.9_vite@5.2.8_@types+node@24.1.0_sass@1.103.1_terser@5.37.0_/node_modules/@uni-helper/vite-plugin-uni-manifest/dist/index.mjs";
import UniHelperPages from "file:///C:/Users/Administrator/Desktop/work/Road_roller/node_modules/.pnpm/@uni-helper+vite-plugin-uni-pages@0.3.19_vite@5.2.8_@types+node@24.1.0_sass@1.103.1_terser@5.37.0_/node_modules/@uni-helper/vite-plugin-uni-pages/dist/index.mjs";
import { UniEchartsResolver } from "file:///C:/Users/Administrator/Desktop/work/Road_roller/node_modules/.pnpm/uni-echarts@2.5.2_echarts@6.1.0_vue@3.4.21_typescript@5.8.3_/node_modules/uni-echarts/dist-resolver/index.mjs";
import UnoCSS from "file:///C:/Users/Administrator/Desktop/work/Road_roller/node_modules/.pnpm/unocss@66.0.0_postcss@8.5.6_vite@5.2.8_@types+node@24.1.0_sass@1.103.1_terser@5.37.0__vue@3.4.21_typescript@5.8.3_/node_modules/unocss/dist/vite.mjs";
import AutoImport from "file:///C:/Users/Administrator/Desktop/work/Road_roller/node_modules/.pnpm/unplugin-auto-import@19.3.0_@vueuse+core@13.5.0_vue@3.4.21_typescript@5.8.3__/node_modules/unplugin-auto-import/dist/vite.js";
import { defineConfig } from "file:///C:/Users/Administrator/Desktop/work/Road_roller/node_modules/.pnpm/vite@5.2.8_@types+node@24.1.0_sass@1.103.1_terser@5.37.0/node_modules/vite/dist/node/index.js";
import UniPolyfill from "file:///C:/Users/Administrator/Desktop/work/Road_roller/node_modules/.pnpm/vite-plugin-uni-polyfill@0.1.0/node_modules/vite-plugin-uni-polyfill/dist/index.mjs";
var vite_config_default = defineConfig({
plugins: [
// https://uni-helper.js.org/vite-plugin-uni-manifest
UniHelperManifest(),
// https://uni-helper.js.org/vite-plugin-uni-pages
UniHelperPages({
dts: "src/uni-pages.d.ts"
}),
// https://uni-helper.js.org/vite-plugin-uni-layouts
UniHelperLayouts(),
// https://uni-helper.js.org/vite-plugin-uni-components
UniHelperComponents({
dts: "src/components.d.ts",
directoryAsNamespace: true,
resolvers: [UniEchartsResolver()]
}),
// https://uni-helper.js.org/plugin-uni
Uni(),
UniPolyfill(),
// https://github.com/antfu/unplugin-auto-import
AutoImport({
imports: ["vue", "@vueuse/core", "uni-app"],
dts: "src/auto-imports.d.ts",
dirs: ["src/composables", "src/stores", "src/utils"],
vueTemplate: true
}),
// https://github.com/antfu/unocss
// see unocss.config.ts for config
UnoCSS()
]
});
export {
vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJDOlxcXFxVc2Vyc1xcXFxBZG1pbmlzdHJhdG9yXFxcXERlc2t0b3BcXFxcd29ya1xcXFxSb2FkX3JvbGxlclwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiQzpcXFxcVXNlcnNcXFxcQWRtaW5pc3RyYXRvclxcXFxEZXNrdG9wXFxcXHdvcmtcXFxcUm9hZF9yb2xsZXJcXFxcdml0ZS5jb25maWcudHNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0M6L1VzZXJzL0FkbWluaXN0cmF0b3IvRGVza3RvcC93b3JrL1JvYWRfcm9sbGVyL3ZpdGUuY29uZmlnLnRzXCI7aW1wb3J0IFVuaSBmcm9tICdAdW5pLWhlbHBlci9wbHVnaW4tdW5pJ1xuaW1wb3J0IFVuaUhlbHBlckNvbXBvbmVudHMgZnJvbSAnQHVuaS1oZWxwZXIvdml0ZS1wbHVnaW4tdW5pLWNvbXBvbmVudHMnXG5pbXBvcnQgVW5pSGVscGVyTGF5b3V0cyBmcm9tICdAdW5pLWhlbHBlci92aXRlLXBsdWdpbi11bmktbGF5b3V0cydcbmltcG9ydCBVbmlIZWxwZXJNYW5pZmVzdCBmcm9tICdAdW5pLWhlbHBlci92aXRlLXBsdWdpbi11bmktbWFuaWZlc3QnXG5pbXBvcnQgVW5pSGVscGVyUGFnZXMgZnJvbSAnQHVuaS1oZWxwZXIvdml0ZS1wbHVnaW4tdW5pLXBhZ2VzJ1xuaW1wb3J0IHsgVW5pRWNoYXJ0c1Jlc29sdmVyIH0gZnJvbSAndW5pLWVjaGFydHMvcmVzb2x2ZXInXG5pbXBvcnQgVW5vQ1NTIGZyb20gJ3Vub2Nzcy92aXRlJ1xuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSAndW5wbHVnaW4tYXV0by1pbXBvcnQvdml0ZSdcbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gJ3ZpdGUnXG5pbXBvcnQgVW5pUG9seWZpbGwgZnJvbSAndml0ZS1wbHVnaW4tdW5pLXBvbHlmaWxsJ1xuXG4vLyBodHRwczovL3ZpdGVqcy5kZXYvY29uZmlnL1xuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKHtcbiAgcGx1Z2luczogW1xuICAgIC8vIGh0dHBzOi8vdW5pLWhlbHBlci5qcy5vcmcvdml0ZS1wbHVnaW4tdW5pLW1hbmlmZXN0XG4gICAgVW5pSGVscGVyTWFuaWZlc3QoKSxcbiAgICAvLyBodHRwczovL3VuaS1oZWxwZXIuanMub3JnL3ZpdGUtcGx1Z2luLXVuaS1wYWdlc1xuICAgIFVuaUhlbHBlclBhZ2VzKHtcbiAgICAgIGR0czogJ3NyYy91bmktcGFnZXMuZC50cycsXG4gICAgfSksXG4gICAgLy8gaHR0cHM6Ly91bmktaGVscGVyLmpzLm9yZy92aXRlLXBsdWdpbi11bmktbGF5b3V0c1xuICAgIFVuaUhlbHBlckxheW91dHMoKSxcbiAgICAvLyBodHRwczovL3VuaS1oZWxwZXIuanMub3JnL3ZpdGUtcGx1Z2luLXVuaS1jb21wb25lbnRzXG4gICAgVW5pSGVscGVyQ29tcG9uZW50cyh7XG4gICAgICBkdHM6ICdzcmMvY29tcG9uZW50cy5kLnRzJyxcbiAgICAgIGRpcmVjdG9yeUFzTmFtZXNwYWNlOiB0cnVlLFxuICAgICAgcmVzb2x2ZXJzOiBbVW5pRWNoYXJ0c1Jlc29sdmVyKCldLFxuICAgIH0pLFxuICAgIC8vIGh0dHBzOi8vdW5pLWhlbHBlci5qcy5vcmcvcGx1Z2luLXVuaVxuICAgIFVuaSgpLFxuICAgIFVuaVBvbHlmaWxsKCksXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2FudGZ1L3VucGx1Z2luLWF1dG8taW1wb3J0XG4gICAgQXV0b0ltcG9ydCh7XG4gICAgICBpbXBvcnRzOiBbJ3Z1ZScsICdAdnVldXNlL2NvcmUnLCAndW5pLWFwcCddLFxuICAgICAgZHRzOiAnc3JjL2F1dG8taW1wb3J0cy5kLnRzJyxcbiAgICAgIGRpcnM6IFsnc3JjL2NvbXBvc2FibGVzJywgJ3NyYy9zdG9yZXMnLCAnc3JjL3V0aWxzJ10sXG4gICAgICB2dWVUZW1wbGF0ZTogdHJ1ZSxcbiAgICB9KSxcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW50ZnUvdW5vY3NzXG4gICAgLy8gc2VlIHVub2Nzcy5jb25maWcudHMgZm9yIGNvbmZpZ1xuICAgIFVub0NTUygpLFxuICBdLFxufSlcbiJdLAogICJtYXBwaW5ncyI6ICI7QUFBMlUsT0FBTyxTQUFTO0FBQzNWLE9BQU8seUJBQXlCO0FBQ2hDLE9BQU8sc0JBQXNCO0FBQzdCLE9BQU8sdUJBQXVCO0FBQzlCLE9BQU8sb0JBQW9CO0FBQzNCLFNBQVMsMEJBQTBCO0FBQ25DLE9BQU8sWUFBWTtBQUNuQixPQUFPLGdCQUFnQjtBQUN2QixTQUFTLG9CQUFvQjtBQUM3QixPQUFPLGlCQUFpQjtBQUd4QixJQUFPLHNCQUFRLGFBQWE7QUFBQSxFQUMxQixTQUFTO0FBQUE7QUFBQSxJQUVQLGtCQUFrQjtBQUFBO0FBQUEsSUFFbEIsZUFBZTtBQUFBLE1BQ2IsS0FBSztBQUFBLElBQ1AsQ0FBQztBQUFBO0FBQUEsSUFFRCxpQkFBaUI7QUFBQTtBQUFBLElBRWpCLG9CQUFvQjtBQUFBLE1BQ2xCLEtBQUs7QUFBQSxNQUNMLHNCQUFzQjtBQUFBLE1BQ3RCLFdBQVcsQ0FBQyxtQkFBbUIsQ0FBQztBQUFBLElBQ2xDLENBQUM7QUFBQTtBQUFBLElBRUQsSUFBSTtBQUFBLElBQ0osWUFBWTtBQUFBO0FBQUEsSUFFWixXQUFXO0FBQUEsTUFDVCxTQUFTLENBQUMsT0FBTyxnQkFBZ0IsU0FBUztBQUFBLE1BQzFDLEtBQUs7QUFBQSxNQUNMLE1BQU0sQ0FBQyxtQkFBbUIsY0FBYyxXQUFXO0FBQUEsTUFDbkQsYUFBYTtBQUFBLElBQ2YsQ0FBQztBQUFBO0FBQUE7QUFBQSxJQUdELE9BQU87QUFBQSxFQUNUO0FBQ0YsQ0FBQzsiLAogICJuYW1lcyI6IFtdCn0K