mirror of
https://gitee.com/dromara/go-view.git
synced 2025-10-15 06:52:10 +08:00
156 lines
5.1 KiB
TypeScript
156 lines
5.1 KiB
TypeScript
import { MyResponse, IBackend } from '../ibackend'
|
||
import { createDB, DBSelect, onDBSelect } from '../indexdb/indexdb'
|
||
import { fileToUrl, fileToBlob } from "@/utils"
|
||
|
||
const PROJECT_TABLE = "project"
|
||
const IMAGE_TABLE = "image" // 保存图片,未实现,Todo
|
||
const DB_NAME = "goview"
|
||
const DB_VER = "1"
|
||
|
||
export class IndexDbBackend implements IBackend {
|
||
public async init(data: any) {
|
||
let rtn:MyResponse = new MyResponse;
|
||
const db:IDBDatabase = await createDB(DB_NAME, DB_VER, [
|
||
{
|
||
storeName: PROJECT_TABLE,
|
||
option: {
|
||
keyPath: "projectId", autoIncrement:true
|
||
},
|
||
index: [
|
||
{name: 'projectId', keyPath: "projectId", unique: true},
|
||
{name: 'projectName', keyPath: "projectName", unique: false},
|
||
{name: 'release', keyPath: "release", unique: false},
|
||
{name: 'remarks', keyPath: "remarks", unique: false},
|
||
{name: 'content', keyPath: "content", unique: false},
|
||
{name: 'indexImage', keyPath: "indexImage", unique: false}
|
||
]
|
||
}
|
||
])
|
||
return rtn;
|
||
}
|
||
|
||
public async login(data:any) {
|
||
let rtn:MyResponse = new MyResponse;
|
||
if(data.password == "123456" && data.username == "admin"){
|
||
rtn.data = {
|
||
token:{tokenValue:"mockToken", tokenName:"name"},
|
||
userinfo:{nickname:"nickname", username:data.username, id:1}
|
||
}
|
||
}else{
|
||
rtn.data = null
|
||
rtn.msg = "admin 和 123456"
|
||
}
|
||
return rtn;
|
||
}
|
||
|
||
public async logout() {
|
||
let rtn:MyResponse = new MyResponse;
|
||
return rtn;
|
||
}
|
||
|
||
public async checkToken(data: any) {
|
||
let rtn:MyResponse = new MyResponse;
|
||
console.log("CheckToken: " + data.token)
|
||
rtn.data = {
|
||
token:{tokenValue:"mockToken", tokenName:"name"},
|
||
userinfo:{nickname:"nickname", username:data.username, id:1}
|
||
}
|
||
return rtn;
|
||
}
|
||
|
||
public async projectList(data:any){
|
||
let rtn:MyResponse = new MyResponse;
|
||
const db:DBSelect = await onDBSelect(PROJECT_TABLE, DB_VER)
|
||
const r:any = await db.getAll()
|
||
rtn.data = []
|
||
r.map(function (item: any) {
|
||
let url = ""
|
||
if(item.indexImage){
|
||
const Url = URL || window.URL || window.webkitURL
|
||
url = Url.createObjectURL(item.indexImage)
|
||
}
|
||
rtn.data.push({
|
||
id: item.projectId,
|
||
title: item.projectName,
|
||
release: item.release == 1,
|
||
label:item.remarks,
|
||
image:url
|
||
})
|
||
})
|
||
return rtn;
|
||
}
|
||
|
||
public async createProject(data: any){
|
||
let rtn:MyResponse = new MyResponse;
|
||
const db:DBSelect = await onDBSelect(PROJECT_TABLE, DB_VER)
|
||
rtn.data.id = await db.add({ projectName:data.projectName })
|
||
return rtn;
|
||
}
|
||
|
||
public async fetchProject(data: any){
|
||
let rtn:MyResponse = new MyResponse;
|
||
const db:DBSelect = await onDBSelect(PROJECT_TABLE, DB_VER)
|
||
const r:any = await db.get(parseInt(data.projectId))
|
||
rtn.data = {
|
||
id:r.projectId,
|
||
projectName: r.projectName,
|
||
state: r.release,
|
||
remarks: r.remarks,
|
||
content: r.content
|
||
}
|
||
return rtn;
|
||
}
|
||
|
||
public async updateProject(data: any){
|
||
let rtn:MyResponse = new MyResponse;
|
||
const db:DBSelect = await onDBSelect(PROJECT_TABLE, DB_VER)
|
||
const row:any = await db.get(parseInt(data.projectId))
|
||
if("content" in data) row.content = data.content
|
||
if("projectName" in data) row.projectName = data.projectName
|
||
if("release" in data) row.release = data.release
|
||
if("remarks" in data) row.remarks = data.remarks
|
||
if("object" in data) {
|
||
row.indexImage = await fileToBlob(data.object)
|
||
}
|
||
await db.put(row)
|
||
return rtn;
|
||
}
|
||
|
||
public async copyProject(data: any){
|
||
let rtn:MyResponse = new MyResponse;
|
||
const db:DBSelect = await onDBSelect(PROJECT_TABLE, DB_VER)
|
||
const row:any = await db.get(parseInt(data.copyId))
|
||
rtn.data.id =await db.add({
|
||
projectName:data.projectName,
|
||
content:row.content,
|
||
indexImage:row.indexImage,
|
||
remarks:row.remarks
|
||
})
|
||
return rtn;
|
||
}
|
||
|
||
public async deleteProject(data: any){
|
||
let rtn:MyResponse = new MyResponse;
|
||
const db:DBSelect = await onDBSelect(PROJECT_TABLE, DB_VER)
|
||
await db.del(parseInt(data.projectId))
|
||
return rtn;
|
||
}
|
||
|
||
public async changeProjectRelease(data: any){
|
||
let rtn:MyResponse = new MyResponse;
|
||
return rtn;
|
||
}
|
||
|
||
public async uploadFile(data: File, params:any){
|
||
// Todo: 图片可以保存在表中
|
||
let rtn:MyResponse = new MyResponse;
|
||
rtn.data.uri = fileToUrl(data)
|
||
return rtn;
|
||
}
|
||
|
||
public getFileUrl(uploadUri:string){
|
||
return uploadUri;
|
||
}
|
||
}
|
||
|