办学质量监测教学评价系统
shenrongliang
2025-06-13 11d86cc6c26bb4f709e407acadf4805c2024e79f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import { gptServerStore, homeStore } from "@/store";
import localforage from "localforage"
import { mlog } from "./mjapi";
 
localforage.config({
    driver      : localforage.INDEXEDDB, // Force WebSQL; same as using setDriver()
    name        : 'mj',
    version     : 1.0,
    size        : 4980736, // Size of database, in bytes. WebSQL-only for now.
    storeName   : 'mjkv', // Should be alphanumeric, with underscores.
    description : 'some description'
});
 
export async function saveImg( key:string, value:string ){
   await localforage.setItem( key, value )
}
export async function getImg( key:string ): Promise<any>
{
   return await localforage.getItem( key )
}
 
//本地存储使用了 
export const localSave= async (  key:string, value:any)=>{
    await localforage.setItem( key, value )
}
//本地存储获取
export const localGet= async( key:string )=>{
    return await localforage.getItem( key )
}
 
export const localSaveAny = async( value:any,key?:string )=>{ 
    if(!key) key=`MJ:r:${Date.now()}:${Math.floor(Math.random() * 100)}`  ;
    await localSave(key,value);
    return key;
}
 
 
export function img2base64(img:any) {
    let canvas = document.createElement('canvas');
    canvas.width = img.width;
    canvas.height = img.height;
    let ctx = canvas.getContext('2d');
    if( ! ctx) return "";
    ctx.drawImage(img, 0, 0);
    return canvas.toDataURL('image/jpeg');
}
 
export function url2base64More(url:string,key?:string){
    return new Promise<{key:string,base64:string}>((resolve, reject) => {
 
        const img = new Image();
        img.crossOrigin = "anonymous";
        img.onload=()=>{ 
            const base64 = img2base64(img) ; 
            localSaveAny(base64,key).then(d=>resolve({key:d, base64})).catch(e=>reject(e));
        }
        img.onerror=(e)=>reject(e);
        img.src =  url;
    });
    
}
 
export const url2base64= async (url:string,key?:string)=>{
    try{
        return await url2base64More (url,key);
    }catch(e){
        return await url2base64More( wsrvUrl(url) ,key);
    }
}
 
export const wsrvUrl=(url:string)=>{
    const arr = url.split(/([a-z\-]+)ttachments/ig, 3 );
    if( arr.length==3){
        url= `https://cdn.discordapp.com/${arr[1]}ttachments`+ arr[2];
    }
    return `https://wsrv.nl/?url=`+ encodeURIComponent(url);
}
 
export const mjImgUrl= (url:string)=>{
    if (gptServerStore.myData.MJ_CDN_WSRV || homeStore.myData.session.isWsrv ) return wsrvUrl(url);
    return url;
}
 
export const getMjAll= async ( ChatState:Chat.ChatState)=>{
    let rz:Chat.Chat[]=[]
    ChatState.chat.forEach(v=>{
       // mlog('uid>>', v.uuid );
        v.data.forEach(chat=>{
            if( chat.mjID ){
               // mlog('MJID>> ',chat.mjID);
                rz.push(chat );
            }
        })
    });
    return rz ;
 
}