2 lines
7.3 KiB
JavaScript
2 lines
7.3 KiB
JavaScript
var e=Object.defineProperty,t=(t,r,n)=>(((t,r,n)=>{r in t?e(t,r,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[r]=n})(t,"symbol"!=typeof r?r+"":r,n),n);import{C as r,q as n,ag as s,T as o,ah as a,ai as i,aj as c,ak as l,af as u,al as d}from"./index-BoIbtAZO.js";class h{constructor(e,t=1){this.dbName=e,this.version=t,this.db=null}openDB(e=[]){return new Promise(((t,r)=>{const n=indexedDB.open(this.dbName,this.version);n.onupgradeneeded=t=>{this.db=t.target.result,e.forEach((e=>{if(!this.db.objectStoreNames.contains(e.name)){const t=this.db.createObjectStore(e.name,{keyPath:e.keyPath,autoIncrement:e.autoIncrement||!1});e.indexes&&e.indexes.forEach((e=>{t.createIndex(e.name,e.key,{unique:e.unique})}))}}))},n.onsuccess=e=>{this.db=e.target.result,console.log("✅ IndexedDB 连接成功"),t(this.db)},n.onerror=e=>{r(`IndexedDB Error: ${e.target.error}`)}}))}async queryByField(e,t,r){return new Promise((async(n,s)=>{try{this.db||await this.openDB();const o=this.db.transaction(e,"readonly").objectStore(e);if(!o.indexNames.contains(t))return s(`索引 ${t} 不存在`);const a=o.index(t).getAll(r);a.onsuccess=e=>{n(e.target.result)},a.onerror=e=>{s("查询失败: "+e.target.error)}}catch(o){s("查询错误: "+o)}}))}add(e,t){return new Promise(((r,n)=>{const s=this.db.transaction([e],"readwrite"),o=s.objectStore(e),a=Array.isArray(t)?t:[t],i=[];a.forEach(((e,t)=>{const r=o.add(e);r.onsuccess=e=>{i[t]=e.target.result},r.onerror=e=>{s.abort(),n(`第 ${t+1} 条数据添加失败: ${e.target.error}`)}})),s.oncomplete=()=>{r(1===a.length?i[0]:i)},s.onerror=e=>{n(`添加失败: ${e.target.error}`)}}))}get(e,t){return new Promise(((r,n)=>{const s=this.db.transaction([e],"readonly").objectStore(e).get(t);s.onsuccess=()=>r(s.result),s.onerror=e=>n(`Get Error: ${e.target.error}`)}))}getAll(e){return new Promise(((t,r)=>{const n=this.db.transaction([e],"readonly").objectStore(e);if("function"==typeof n.getAll){const e=n.getAll();e.onsuccess=()=>t(e.result),e.onerror=e=>r(`GetAll Error: ${e.target.error}`)}else{const e=[],s=n.openCursor();s.onsuccess=r=>{const n=r.target.result;n?(e.push(n.value),n.continue()):t(e)},s.onerror=e=>r(`Cursor Error: ${e.target.error}`)}}))}async getRecordCount(e){return new Promise(((t,r)=>{const n=this.db.transaction([e],"readonly").objectStore(e).count();n.onsuccess=()=>t(n.result),n.onerror=e=>r(`❌ Count Error: ${e.target.error}`)}))}update(e,t){return new Promise(((r,n)=>{const s=this.db.transaction([e],"readwrite").objectStore(e).put(t);s.onsuccess=()=>r("Data updated successfully"),s.onerror=e=>n(`Update Error: ${e.target.error}`)}))}delete(e,t){return new Promise(((r,n)=>{const s=this.db.transaction([e],"readwrite").objectStore(e).delete(t);s.onsuccess=()=>r("Data deleted successfully"),s.onerror=e=>n(`Delete Error: ${e.target.error}`)}))}getByIndex(e,t,r){return new Promise(((n,s)=>{const o=this.db.transaction([e],"readonly").objectStore(e).index(t).get(r);o.onsuccess=()=>n(o.result),o.onerror=e=>s(`Get By Index Error: ${e.target.error}`)}))}clearStore(e){return new Promise(((t,r)=>{const n=this.db.transaction([e],"readwrite").objectStore(e).clear();n.onsuccess=()=>t("Store cleared successfully"),n.onerror=e=>r(`Clear Store Error: ${e.target.error}`)}))}deleteDB(e=null){return new Promise(((t,r)=>{const n=indexedDB.deleteDatabase(e||this.dbName);n.onsuccess=()=>t("Database deleted successfully"),n.onerror=e=>r(`Delete DB Error: ${e.target.error}`)}))}async deleteOldestRecord(e){return new Promise(((t,r)=>{const n=this.db.transaction([e],"readwrite").objectStore(e),s=n.openCursor();s.onsuccess=function(e){const r=e.target.result;r?(console.log(`🗑️ 删除最早的记录 ID: ${r.key}`),n.delete(r.key),t()):t()},s.onerror=e=>r(`❌ Cursor Error: ${e.target.error}`)}))}}const g=r("messageGroup",(()=>{const e=n("messageGroup"),t=n("messages"),r=n([]),l=n(!1),u=n(""),d=n([]),h=n(""),g=n("");async function b(e){y.isDBReady||await y.initDB(),h.value=e;const n=await y.db.queryByField(t.value,"parentGroupId",e);n.length?(console.log("本地数据库存在该对话数据",n),r.value=n):(console.log("本地数据库不存在该对话数据"),p("refresh"))}function m(e){l.value=e}function f(){c.chatRequest("/getHistory").then((t=>{if(!t.data.list.length)return;let r=t.data.list.map((e=>({title:e.title,createTime:e.updateTime,sessionId:e.chatId})));if(r&&r.length){const t=r[0],[n,o]=s(r);h.value=t.sessionId,d.value=n,p(!1),y.db.add(e.value,r),g.value=o}}))}function p(e=!0){const n={sessionId:h.value};c.chatRequest("/detail",n,"GET",e).then((e=>{console.log("detail:",e.data);let n=function(e,t){const r=[];for(let n=0;n<e.length;n++){const s=e[n],o="AI"!==s.obj;let a="",i=[];for(let e=0;e<s.value.length;e++){const t=s.value[e];"text"===t.type&&(a+=t.text.content),"file"===t.type&&i.push(t.file)}r.push({parentGroupId:t,displayText:a,self:o,text:a,dataId:s.dataId,files:i})}return r}(e.data.list,h.value);n.length&&(r.value=n,y.db.add(t.value,n)),console.log("解析后:",n)})).catch((()=>{o("请求出现异常,请联系工作人员")}))}return{messages:r,isTyping:l,textInput:u,chatSessionID:h,addMessage:async function(e){if(!h.value)return o("请创建对话");const n={...e,parentGroupId:h.value,files:e.files||[]};r.value.push(n),async function(e){console.log(e),await y.db.add(t.value,e)}(n)},tabeList:d,init:async function(){setTimeout((async()=>{y.isDBReady||await y.initDB();const t=await y.db.getAll(e.value);if(t.length){console.warn("本地数据库存在数据");const e=t.reverse(),[r,n]=s(e);d.value=r;const o=e[0];h.value=o.sessionId,b(o.sessionId)}else console.warn("本地数据库存在数据"),f()}),1e3)},initMessage:b,toggleTyping:m,addTabel:async function(t){y.isDBReady||await y.initDB();const r=a.generate();let n={title:t,createTime:i(Date.now()),sessionId:r};const o=await y.db.add(e.value,n),c=await y.db.getAll(e.value);h.value=r;const[l,u]=s(c);return d.value=l,o},addNewDialogue:function(){h.value="",r.value=[]},changeDialogue:function(e){h.value=e.sessionId,b(e.sessionId)},getStearm:async function(e,n=[],s){return new Promise(((a,i)=>{try{let l=function(){f.text=v,f.parentGroupId=h.value,y.db.add(t.value,f)},u=function(e){v+=e,f.displayText+=e,r.value[p]={...f},s&&s()},d=function(e){console.error("请求异常:",e),o("服务响应异常"),i(e)},g=function(){f.text=v,r.value[p]={...f},m(!1),window.removeEventListener("unload",l),l(),a&&a()};m(!0);const b={data:e,sessionId:h.value};n&&n.length&&(b.fileUrl=n.map((e=>e.url)));const f={text:"",self:!1,displayText:""},p=r.value.length;r.value.push(f);let v="";window.addEventListener("unload",l),c.streamRequest("/chat",b,u,d,g)}catch(l){console.log(l),i(l)}}))},getHistory:f}}));const y=new class{constructor(){t(this,"db",null),t(this,"isDBReady",!1),t(this,"dbName","BrowsingHistory"),this.checkAndInitDB()}checkAndInitDB(){const e=l("indexedDBVersion")||1;console.log("DBVersion: ",e,u.DBversion),e===u.DBversion?this.initDB():(console.log("清空本地数据库"),this.clearDB().then((()=>{d("indexedDBVersion",u.DBversion),this.initDB()})))}initDB(){this.db=new h(this.dbName,u.DBversion),this.db.openDB([{name:"record",keyPath:"id",autoIncrement:!0},{name:"messageGroup",keyPath:"id",autoIncrement:!0},{name:"messages",keyPath:"id",autoIncrement:!0,indexes:[{name:"parentGroupId",key:"parentGroupId",unique:!1}]}]).then((async()=>{g().init(),this.isDBReady=!0}))}async clearDB(){return new Promise(((e,t)=>{(new h).deleteDB(this.dbName).then((()=>{e()}))}))}};export{y as b,g as u};
|