/
vdele
/
app
Обзор
Документация
Войти
/
vdele
/
app
Код
Вики
Пакеты
0
Релизы
1
Аналитика
dev
src/stores/db.ts
232 строки
8 KB
Vasilii Polshakov
Initial commit
25 мар 2025, 01:21
25 мар 2025, 01:21
6a154a4
Код
Авторство
О чём код?
import { ref } from 'vue'; export function useLocalDB() { const users = ref<Array<{uid: string, name: string}>>(); const connect = (name: string = 'MyDatabase', version: number = 1) => { const openRequest: IDBOpenDBRequest = indexedDB.open(name, version); return openRequest; }; const build = (connect: IDBOpenDBRequest) => { const openRequest = connect; // onupgradeneeded openRequest.onupgradeneeded = (event: IDBVersionChangeEvent) => { const db: IDBDatabase = (event.target as IDBOpenDBRequest).result; if (!db.objectStoreNames.contains('users')) { //const store: IDBObjectStore = // создание таблицы пользователей db.createObjectStore('users', { keyPath: 'uid', autoIncrement: false, }); //fake start data addUser({ uid: 'a06e5d38', name: 'Сослан' }); addUser({uid: 'e3b58774', name: 'Аслан' }); }; if (!db.objectStoreNames.contains('groups')) { //const store: IDBObjectStore = // создание таблицы сущностей db.createObjectStore('groups', { keyPath: 'uid', autoIncrement: false, }); // Хирургия: кастрация #1 => 89deed82 addGroup({uid: '89deed82', name: 'Хирургия: кастрация #1'}); // Лаборатория: Анал. => f93763b0 addGroup({uid: 'f93763b0', name: 'Лаборатория: Анал.'}); }; if (!db.objectStoreNames.contains('services')) { //const store: IDBObjectStore = // создание таблицы сущностей db.createObjectStore('services', { keyPath: 'uid', autoIncrement: false, }); // Кастрация кота => 0c9a9aa1 addService({ group: '89deed82', uid: '0c9a9aa1', caption: 'Кастрация кота', description: 'Кастрация кота', prices: [4000, 7000], }); // Повторная кастрация кота Вадима => b6ab216e addService({ group: '89deed82', uid: 'b6ab216e', caption: 'Повторная кастрация кота Вадима', description: 'Тестовые данные', prices: [3000], }); // Кастрация кота крипторха => 751794e4 addService({ group: '89deed82', uid: '751794e4', caption: 'Кастрация кота крипторха', description: '', prices: [6000, 7000, 9000], }); // Стерилизация кошки => 2b3a5ed7 addService({ group: '89deed82', uid: '2b3a5ed7', caption: 'Стерилизация кошки', description: 'Стерилизация кошки', prices: [8000], }); // Стерилизация суки => 947b82e2 addService({ group: '89deed82', uid: '947b82e2', caption: 'Стерилизация суки', description: 'разная цена', prices: [11000, 13000, 15000, 20000], }); // Взятие крови, включая пробирку и иглу => c7d115b1 addService({ group: 'f93763b0', uid: 'c7d115b1', caption: 'Взятие крови, включая пробирку и иглу', description: '', prices: [500], }); // Анализ крови Профиль Здоровье Плюс (16 показателей) => 811b19f7 addService({ group: 'f93763b0', uid: '811b19f7', caption: 'Анализ крови Профиль Здоровье Плюс (16 показателей)', description: 'тут можно перечислить показатели', prices: [1500], }); // Анализ крови на Т4 общий, тироксин => 097e236c addService({ group: 'f93763b0', uid: '097e236c', caption: 'Анализ крови на Т4 общий, тироксин', description: 'Описание или заметка', prices: [2700], }); }; }; //todo: error handler }; const migrate = () => { const openRequest = connect(); build(openRequest); }; const addService = (service: {uid: string, group: string, caption: string, description: string, prices: Array<number> }) => { const openRequest = connect(); openRequest.onsuccess = (event: Event) => { const db: IDBDatabase = (event.target as IDBOpenDBRequest).result; const transaction: IDBTransaction = db.transaction('services', 'readwrite'); const store: IDBObjectStore = transaction.objectStore('services'); const addRequest: IDBRequest = store.add(service); addRequest.onsuccess = () => { //alert("User added"); }; addRequest.onerror = () => { //alert("User add Error!!!"); }; }; //todo: error handler }; /** @var Добавить пользователя в базу данных */ const addUser = (user: {uid: string, name: string}) => { const openRequest = connect(); openRequest.onsuccess = (event: Event) => { const db: IDBDatabase = (event.target as IDBOpenDBRequest).result; const transaction: IDBTransaction = db.transaction('users', 'readwrite'); const store: IDBObjectStore = transaction.objectStore('users'); const addRequest: IDBRequest = store.add(user); addRequest.onsuccess = () => { //alert("User added"); }; addRequest.onerror = () => { //alert("User add Error!!!"); }; }; //todo: error handler }; // добавить группу const addGroup = (group: {uid: string, name: string}) => { const openRequest = connect(); openRequest.onsuccess = (event: Event) => { const db: IDBDatabase = (event.target as IDBOpenDBRequest).result; const transaction: IDBTransaction = db.transaction('groups', 'readwrite'); const store: IDBObjectStore = transaction.objectStore('groups'); const addRequest: IDBRequest = store.add(group); addRequest.onsuccess = () => { //alert("User added"); }; addRequest.onerror = () => { //alert("User add Error!!!"); }; }; //todo: error handler }; const fetchUsers = () => { const openRequest = connect(); openRequest.onsuccess = (event: Event) => { const db: IDBDatabase = (event.target as IDBOpenDBRequest).result; const transaction: IDBTransaction = db.transaction('users', 'readonly'); const store: IDBObjectStore = transaction.objectStore('users'); const getRequest: IDBRequest = store.getAll(); getRequest.onsuccess = () => { const resutlt = getRequest.result; console.log(resutlt); users.value = resutlt; }; }; return users.value; }; return { //states users, //methods migrate, addUser, fetchUsers, }; }