办学质量监测教学评价系统
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
98
99
100
101
102
103
104
import { gptServerStore, homeStore, useAuthStore } from "@/store";
import { mlog } from "./mjapi";
import { LumaMedia, lumaStore } from "./lumaStore";
import { sleep } from "./suno";
import { getToken } from "@/store/modules/auth/helper";
 
 
 
function getHeaderAuthorization(){
    let headers={}
    if( homeStore.myData.vtoken ){
        const  vtokenh={ 'x-vtoken':  homeStore.myData.vtoken ,'x-ctoken':  homeStore.myData.ctoken};
        headers= {...headers, ...vtokenh}
    }
    if(!gptServerStore.myData.LUMA_KEY){
        const authStore = useAuthStore()
        if( authStore.token ) {
            const bmi= { 'x-ptoken':  authStore.token };
            headers= {...headers, ...bmi }
            return headers;
        }
        return headers
    }
    const bmi={
        'Authorization': 'Bearer ' +gptServerStore.myData.LUMA_KEY
    }
    headers= {...headers, ...bmi }
    return headers
}
 
const getUrl=(url:string)=>{
    if(url.indexOf('http')==0) return url;
    // if(gptServerStore.myData.LUMA_SERVER){
    //     return `${ gptServerStore.myData.LUMA_SERVER}/luma${url}`;
    // }
    return `/api/luma${url}`;
}
 
export const lumaFetch=(url:string,data?:any,opt2?:any )=>{
    mlog('sunoFetch', url  );
    let headers= {'Content-Type':'application/json','Authorization': 'Bearer ' + getToken() }
    if(opt2 && opt2.headers ) headers= opt2.headers;
 
    headers={...headers,...getHeaderAuthorization()}
 
    return new Promise<any>((resolve, reject) => {
        let opt:RequestInit ={method:'GET'};
 
        opt.headers= headers ;
        if(opt2?.upFile ){
             opt.method='POST';
             opt.body=data as FormData ;
        }
        else if(data) {
            opt.body= JSON.stringify(data) ;
            opt.method='POST';
        }
        fetch(getUrl(url),  opt )
        .then( async (d) =>{
            if (!d.ok) {
                let msg = '发生错误: '+ d.status
                try{
                  let bjson:any  = await d.json();
                  msg = '('+ d.status+')发生错误: '+(bjson?.error?.message??'' )
                }catch( e ){
                }
                homeStore.myData.ms &&  homeStore.myData.ms.error(msg )
                throw new Error( msg );
            }
 
            d.json().then(d=> resolve(d)).catch(e=>{
 
                homeStore.myData.ms &&  homeStore.myData.ms.error('发生错误'+ e )
                reject(e)
            }
        )})
        .catch(e=>{
            if (e.name === 'TypeError' && e.message === 'Failed to fetch') {
                homeStore.myData.ms &&  homeStore.myData.ms.error('跨域|CORS error'  )
            }
            else homeStore.myData.ms &&  homeStore.myData.ms.error('发生错误:'+e )
            mlog('e', e.stat )
            reject(e)
        })
    })
 
}
 
export const FeedLumaTask= async(id:string)=>{
    if(id=='')return '';
    const lumaS = new lumaStore();
    for(let i=0; i<120;i++){
        let d:LumaMedia = await lumaFetch('/generations/'+id );
        if(d.id){
            d.last_feed = new Date().getTime()
            lumaS.save(d);
            homeStore.setMyData({act:'FeedLumaTask'});
            if( d.state=='completed' && d.video && d.video?.download_url  ){ //有的时候  completed 但是 没链接
                break;
            }
        }
        await sleep(5*1000);
    }
}