张涛 1 år sedan
förälder
incheckning
952d088d7c

+ 1 - 1
dist/assets/Agent-db5fdbd1.js → dist/assets/Agent-43fa5e55.js

@@ -1 +1 @@
-import{a4 as t}from"./index-aa43aec4.js";function s(a){return t.get("/api/v1/canvas/list",{params:a})}function e(){return t.get("/api/v1/llm/distinct",{})}function n(a){return t.get("/api/v1/conversation/app_usage")}function o(a){return t.post("/api/v1/conversation/app_usage/rm",a)}export{n as a,e as b,o as d,s as q};
+import{a4 as t}from"./index-f4e2fe7e.js";function s(a){return t.get("/api/v1/canvas/list",{params:a})}function e(){return t.get("/api/v1/llm/distinct",{})}function n(a){return t.get("/api/v1/conversation/app_usage")}function o(a){return t.post("/api/v1/conversation/app_usage/rm",a)}export{n as a,e as b,o as d,s as q};

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/assets/Knowledge-713b557d.js


+ 1 - 1
dist/assets/Login-8db32fc8.js → dist/assets/Login-c5f3fa0b.js

@@ -1 +1 @@
-import{_ as g}from"./login-bd96354f.js";import{_ as f,m as v,x as i,C as w,D as k,E as n,v as p,B as V,r as a}from"./index-aa43aec4.js";const _=v({components:{},props:[],setup(){const{ajax:o,helper:e}=V("$global"),t=a(""),r=a("");return{login:async()=>{const l=await o.user.login(t.value,r.value);l&&(e.write("userName",l.nickname||l.username),e.write("token",l.access_token),e.goLink("/"))},username:t,password:r,goRegister:()=>{e.goLink("register")}}}});function y(o,e,t,r,u,d){const l=i("a-input"),m=i("a-input-password");return w(),k("main",null,[n("section",null,[e[6]||(e[6]=n("header",null,[n("img",{src:g}),n("p",null,"欢迎使用")],-1)),e[7]||(e[7]=n("p",null,"账号登录",-1)),n("section",null,[e[4]||(e[4]=n("p",null,"账号",-1)),n("div",null,[p(l,{placeholder:"请输入手机号",style:{width:"250px",height:"40px"},modelValue:o.username,"onUpdate:modelValue":e[0]||(e[0]=s=>o.username=s)},null,8,["modelValue"])])]),n("section",null,[e[5]||(e[5]=n("p",null,"密码",-1)),n("div",null,[p(m,{placeholder:"请输入手机号",style:{width:"250px",height:"40px"},modelValue:o.password,"onUpdate:modelValue":e[1]||(e[1]=s=>o.password=s)},null,8,["modelValue"])])]),n("section",null,[n("p",{style:{cursor:"pointer"},onClick:e[2]||(e[2]=(...s)=>o.goRegister&&o.goRegister(...s))},"去注册")]),n("div",{onClick:e[3]||(e[3]=(...s)=>o.login&&o.login(...s))},"登录")])])}const $=f(_,[["render",y],["__scopeId","data-v-c8b3e868"]]);export{$ as default};
+import{_ as g}from"./login-bd96354f.js";import{_ as f,m as v,x as i,C as w,D as k,E as n,v as p,B as V,r as a}from"./index-f4e2fe7e.js";const _=v({components:{},props:[],setup(){const{ajax:o,helper:e}=V("$global"),t=a(""),r=a("");return{login:async()=>{const l=await o.user.login(t.value,r.value);l&&(e.write("userName",l.nickname||l.username),e.write("token",l.access_token),e.goLink("/"))},username:t,password:r,goRegister:()=>{e.goLink("register")}}}});function y(o,e,t,r,u,d){const l=i("a-input"),m=i("a-input-password");return w(),k("main",null,[n("section",null,[e[6]||(e[6]=n("header",null,[n("img",{src:g}),n("p",null,"欢迎使用")],-1)),e[7]||(e[7]=n("p",null,"账号登录",-1)),n("section",null,[e[4]||(e[4]=n("p",null,"账号",-1)),n("div",null,[p(l,{placeholder:"请输入手机号",style:{width:"250px",height:"40px"},modelValue:o.username,"onUpdate:modelValue":e[0]||(e[0]=s=>o.username=s)},null,8,["modelValue"])])]),n("section",null,[e[5]||(e[5]=n("p",null,"密码",-1)),n("div",null,[p(m,{placeholder:"请输入手机号",style:{width:"250px",height:"40px"},modelValue:o.password,"onUpdate:modelValue":e[1]||(e[1]=s=>o.password=s)},null,8,["modelValue"])])]),n("section",null,[n("p",{style:{cursor:"pointer"},onClick:e[2]||(e[2]=(...s)=>o.goRegister&&o.goRegister(...s))},"去注册")]),n("div",{onClick:e[3]||(e[3]=(...s)=>o.login&&o.login(...s))},"登录")])])}const $=f(_,[["render",y],["__scopeId","data-v-c8b3e868"]]);export{$ as default};

+ 1 - 1
dist/assets/Register-f93ea9e6.js → dist/assets/Register-3bb050c6.js

@@ -1 +1 @@
-import{_ as g}from"./login-bd96354f.js";import{_ as f,m as v,x as p,C as w,D as _,E as s,v as a,B as V,r as u}from"./index-aa43aec4.js";const y=v({components:{},props:[],setup(){const{ajax:n,helper:e}=V("$global"),l=u(""),t=u("");return{register:async()=>{const r=await n.user.register(l.value,t.value);r&&(e.write("userName",String(r.username)),e.goLink("/login"))},username:l,password:t}}});function b(n,e,l,t,i,r){const d=p("a-input"),m=p("a-input-password");return w(),_("main",null,[s("section",null,[e[5]||(e[5]=s("header",null,[s("img",{src:g}),s("p",null,"欢迎使用")],-1)),e[6]||(e[6]=s("p",null,"账号注册",-1)),s("section",null,[e[3]||(e[3]=s("p",null,"账号",-1)),s("div",null,[a(d,{placeholder:"请输入账号",style:{width:"250px",height:"40px"},modelValue:n.username,"onUpdate:modelValue":e[0]||(e[0]=o=>n.username=o)},null,8,["modelValue"])])]),s("section",null,[e[4]||(e[4]=s("p",null,"密码",-1)),s("div",null,[a(m,{type:"password",placeholder:"请输入密码",style:{width:"250px",height:"40px"},modelValue:n.password,"onUpdate:modelValue":e[1]||(e[1]=o=>n.password=o)},null,8,["modelValue"])])]),s("div",{onClick:e[2]||(e[2]=(...o)=>n.register&&n.register(...o))},"注册")])])}const k=f(y,[["render",b],["__scopeId","data-v-b8d3c93b"]]);export{k as default};
+import{_ as g}from"./login-bd96354f.js";import{_ as f,m as v,x as p,C as w,D as _,E as s,v as a,B as V,r as u}from"./index-f4e2fe7e.js";const y=v({components:{},props:[],setup(){const{ajax:n,helper:e}=V("$global"),l=u(""),t=u("");return{register:async()=>{const r=await n.user.register(l.value,t.value);r&&(e.write("userName",String(r.username)),e.goLink("/login"))},username:l,password:t}}});function b(n,e,l,t,i,r){const d=p("a-input"),m=p("a-input-password");return w(),_("main",null,[s("section",null,[e[5]||(e[5]=s("header",null,[s("img",{src:g}),s("p",null,"欢迎使用")],-1)),e[6]||(e[6]=s("p",null,"账号注册",-1)),s("section",null,[e[3]||(e[3]=s("p",null,"账号",-1)),s("div",null,[a(d,{placeholder:"请输入账号",style:{width:"250px",height:"40px"},modelValue:n.username,"onUpdate:modelValue":e[0]||(e[0]=o=>n.username=o)},null,8,["modelValue"])])]),s("section",null,[e[4]||(e[4]=s("p",null,"密码",-1)),s("div",null,[a(m,{type:"password",placeholder:"请输入密码",style:{width:"250px",height:"40px"},modelValue:n.password,"onUpdate:modelValue":e[1]||(e[1]=o=>n.password=o)},null,8,["modelValue"])])]),s("div",{onClick:e[2]||(e[2]=(...o)=>n.register&&n.register(...o))},"注册")])])}const k=f(y,[["render",b],["__scopeId","data-v-b8d3c93b"]]);export{k as default};

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/assets/authheader.vue_vue_type_script_setup_true_lang-7185ee1a.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/assets/default-layout-c8ce8ebe.js


+ 1 - 1
dist/assets/index-fb5c3953.js → dist/assets/index-3fb07e5e.js

@@ -1 +1 @@
-import{m as s,r as n,U as r,ae as o,x as _,C as c,D as i,v as l,E as t,_ as d}from"./index-aa43aec4.js";const u={class:"container"},m={class:"iframe-box"},f=["src"],p={name:"Agent"},v=s({...p,setup(h){const e=n("");return r(()=>{e.value=`${o.RAGFlowUrl?o.RAGFlowUrl:window.location.origin}/flow?${localStorage.Authorization}`}),(x,g)=>{const a=_("Breadcrumb");return c(),i("div",u,[l(a,{items:["Agent","配置"]}),t("div",m,[t("iframe",{src:e.value,height:"100%",width:"100%",frameborder:"0"},null,8,f)])])}}});const B=d(v,[["__scopeId","data-v-82ea0634"]]);export{B as default};
+import{m as s,r as n,U as r,ae as o,x as _,C as c,D as i,v as l,E as t,_ as d}from"./index-f4e2fe7e.js";const u={class:"container"},m={class:"iframe-box"},f=["src"],p={name:"Agent"},v=s({...p,setup(h){const e=n("");return r(()=>{e.value=`${o.RAGFlowUrl?o.RAGFlowUrl:window.location.origin}/flow?${localStorage.Authorization}`}),(x,g)=>{const a=_("Breadcrumb");return c(),i("div",u,[l(a,{items:["Agent","配置"]}),t("div",m,[t("iframe",{src:e.value,height:"100%",width:"100%",frameborder:"0"},null,8,f)])])}}});const B=d(v,[["__scopeId","data-v-82ea0634"]]);export{B as default};

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/assets/index-3fb68e5d.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/assets/index-43d7b121.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/assets/index-4abc970d.js


+ 1 - 1
dist/assets/index-01c2dc17.js → dist/assets/index-509c7ccc.js

@@ -1,4 +1,4 @@
-import{a3 as qk,a4 as Ks,m as Of,r as Zt,a5 as Ta,U as t1,b as _h,V as bg,C as zr,D as Fn,E as or,u as Ti,J as _s,K as lc,L as xa,R as r1,_ as zu,l as Iu,a6 as n1,f as wA,w as i1,x as vn,v as Qr,F as Fr,G as Ya,a7 as Ig,Q as qs,Z as mu,M as ys,n as XI,H as Ma,I as Ca,a8 as X5,N as wh,O as Bh,a9 as Wk,aa as Kk,ab as $5,ac as zk,ad as Vk}from"./index-aa43aec4.js";import{a as U5,d as Zk,q as Xk}from"./Agent-db5fdbd1.js";import{p as $k}from"./icon-chart-38e5438e.js";import{a as JI}from"./auth-54229761.js";import{a as xB,u as e9}from"./index-82cef97e.js";const SB="/assets/icon-user-007bea0f.jpg",Vp="/assets/icon-picture-144a065f.png";var t9=Object.defineProperty,r9=(D,U,K)=>U in D?t9(D,U,{enumerable:!0,configurable:!0,writable:!0,value:K}):D[U]=K,PI=(D,U,K)=>r9(D,typeof U!="symbol"?U+"":U,K);class j5 extends Error{constructor(U,K){super(U),PI(this,"type"),PI(this,"field"),PI(this,"value"),PI(this,"line"),this.name="ParseError",this.type=K.type,this.field=K.field,this.value=K.value,this.line=K.line}}function dB(D){}function n9(D){const{onEvent:U=dB,onError:K=dB,onRetry:ee=dB,onComment:ge}=D;let Ue="",ht=!0,ut,_t="",Jt="";function ar(sr){const Ir=ht?sr.replace(/^\xEF\xBB\xBF/,""):sr,[hn,Oe]=i9(`${Ue}${Ir}`);for(const Et of hn)Tt(Et);Ue=Oe,ht=!1}function Tt(sr){if(sr===""){yr();return}if(sr.startsWith(":")){ge&&ge(sr.slice(sr.startsWith(": ")?2:1));return}const Ir=sr.indexOf(":");if(Ir!==-1){const hn=sr.slice(0,Ir),Oe=sr[Ir+1]===" "?2:1,Et=sr.slice(Ir+Oe);Fe(hn,Et,sr);return}Fe(sr,"",sr)}function Fe(sr,Ir,hn){switch(sr){case"event":Jt=Ir;break;case"data":_t=`${_t}${Ir}
+import{a3 as qk,a4 as Ks,m as Of,r as Zt,a5 as Ta,U as t1,b as _h,V as bg,C as zr,D as Fn,E as or,u as Ti,J as _s,K as lc,L as xa,R as r1,_ as zu,l as Iu,a6 as n1,f as wA,w as i1,x as vn,v as Qr,F as Fr,G as Ya,a7 as Ig,Q as qs,Z as mu,M as ys,n as XI,H as Ma,I as Ca,a8 as X5,N as wh,O as Bh,a9 as Wk,aa as Kk,ab as $5,ac as zk,ad as Vk}from"./index-f4e2fe7e.js";import{a as U5,d as Zk,q as Xk}from"./Agent-43fa5e55.js";import{p as $k}from"./icon-chart-38e5438e.js";import{a as JI}from"./auth-54229761.js";import{a as xB,u as e9}from"./index-b72674bc.js";const SB="/assets/icon-user-007bea0f.jpg",Vp="/assets/icon-picture-144a065f.png";var t9=Object.defineProperty,r9=(D,U,K)=>U in D?t9(D,U,{enumerable:!0,configurable:!0,writable:!0,value:K}):D[U]=K,PI=(D,U,K)=>r9(D,typeof U!="symbol"?U+"":U,K);class j5 extends Error{constructor(U,K){super(U),PI(this,"type"),PI(this,"field"),PI(this,"value"),PI(this,"line"),this.name="ParseError",this.type=K.type,this.field=K.field,this.value=K.value,this.line=K.line}}function dB(D){}function n9(D){const{onEvent:U=dB,onError:K=dB,onRetry:ee=dB,onComment:ge}=D;let Ue="",ht=!0,ut,_t="",Jt="";function ar(sr){const Ir=ht?sr.replace(/^\xEF\xBB\xBF/,""):sr,[hn,Oe]=i9(`${Ue}${Ir}`);for(const Et of hn)Tt(Et);Ue=Oe,ht=!1}function Tt(sr){if(sr===""){yr();return}if(sr.startsWith(":")){ge&&ge(sr.slice(sr.startsWith(": ")?2:1));return}const Ir=sr.indexOf(":");if(Ir!==-1){const hn=sr.slice(0,Ir),Oe=sr[Ir+1]===" "?2:1,Et=sr.slice(Ir+Oe);Fe(hn,Et,sr);return}Fe(sr,"",sr)}function Fe(sr,Ir,hn){switch(sr){case"event":Jt=Ir;break;case"data":_t=`${_t}${Ir}
 `;break;case"id":ut=Ir.includes("\0")?void 0:Ir;break;case"retry":/^\d+$/.test(Ir)?ee(parseInt(Ir,10)):K(new j5(`Invalid \`retry\` value: "${Ir}"`,{type:"invalid-retry",value:Ir,line:hn}));break;default:K(new j5(`Unknown field "${sr.length>20?`${sr.slice(0,20)}…`:sr}"`,{type:"unknown-field",field:sr,value:Ir,line:hn}));break}}function yr(){_t.length>0&&U({id:ut,event:Jt||void 0,data:_t.endsWith(`
 `)?_t.slice(0,-1):_t}),ut=void 0,_t="",Jt=""}function Le(sr={}){Ue&&sr.consume&&Tt(Ue),ut=void 0,_t="",Jt="",Ue=""}return{feed:ar,reset:Le}}function i9(D){const U=[];let K="";const ee=D.length;for(let ge=0;ge<ee;ge++){const Ue=D[ge];Ue==="\r"&&D[ge+1]===`
 `?(U.push(K),K="",ge++):Ue==="\r"||Ue===`

Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/assets/index-7c00fe20.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/assets/index-98d10a1a.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/assets/index-b72674bc.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/assets/index-c79d905f.css


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/assets/index-df0cb572.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 0 - 0
dist/assets/index-eb33d6b6.js


Filskillnaden har hållts tillbaka eftersom den är för stor
+ 1 - 1
dist/assets/index-f4e2fe7e.js


+ 1 - 1
dist/assets/loading-1073cc4e.js → dist/assets/loading-f02cb106.js

@@ -1 +1 @@
-import{r as a}from"./index-aa43aec4.js";function l(e=!1){const o=a(e);return{loading:o,setLoading:t=>{o.value=t},toggle:()=>{o.value=!o.value}}}export{l as u};
+import{r as a}from"./index-f4e2fe7e.js";function l(e=!1){const o=a(e);return{loading:o,setLoading:t=>{o.value=t},toggle:()=>{o.value=!o.value}}}export{l as u};

+ 2 - 2
dist/index.html

@@ -5,8 +5,8 @@
         <link rel="icon" href="/logo.svg" />
         <meta name="viewport" content="width=device-width, initial-scale=1.0" />
         <title>大模型系统</title>
-      <script type="module" crossorigin src="/assets/index-aa43aec4.js"></script>
-      <link rel="stylesheet" href="/assets/index-2c9c61f6.css">
+      <script type="module" crossorigin src="/assets/index-f4e2fe7e.js"></script>
+      <link rel="stylesheet" href="/assets/index-c79d905f.css">
     </head>
     <body>
         <div id="app"></div>

+ 51 - 5
src/components/DialogWrap.vue

@@ -139,9 +139,14 @@
             </section>
           </div>
 
+          <div v-if="item?.image_url">
+            <!-- 如果有图片 -->
+            <a-image width="500" :src="item?.image_url" />
+          </div>
+
           <div v-if="item.file" class="paper-wrap" @click="downloadFile(item.file.file_url)">
-            <img src="@/assets/question/excel.svg" v-if="type === 'excel'" />
-            <img src="@/assets/question/word.svg" v-else />
+            <img src="@/assets/question/excel.svg" />
+            <!-- <img src="@/assets/question/word.svg" v-else /> -->
             <span>
               <b>{{ item.file.file_name }}</b>
             </span>
@@ -334,6 +339,9 @@ export default defineComponent({
     const isLoaded = ref(false);
     const answerData = ref("");
     const answerReference = ref([]);
+    const imageUrl = ref(undefined);
+    const answerFile = ref(undefined);
+    const answerSql = ref({});
     const addQuestion = (question, file = null) => {
       let result = { question, capacity: null, answer: "", other: null, file: null, };
       addData(result);
@@ -342,6 +350,10 @@ export default defineComponent({
     const addAnswer = (data) => {
       data.answer = answerData.value;
       data.reference = answerReference.value;
+      data.image_url = imageUrl.value;
+      data.file = answerFile.value;
+      // TODO渲染sql,修改渲染代码的样式
+      data.sql = answerSql.value;
       addData(data);
     };
     const answerLoaded = () => {
@@ -368,10 +380,17 @@ export default defineComponent({
        * 答案中 引用图标(感叹号)点击时,浮层显示引用内容
        */
       applyRefferencePopover(props.list);
+      // 如果是智能数据,则拿缓存里的数据开启对话
+      if (helper.read("sendData") && helper.read("sendData").agent_id == 'basic_excel_talk') {
+        const data = helper.read("sendData");
+        helper.webSocket = ajax.message.create(helper.read("token"), data.agent_id, data.chat_id, props.type);
+        // 创建对话之后清空缓存
+        helper.write('sendData', {});
+      } else {
+        helper.webSocket = ajax.message.create(helper.read("token"), props.agentId, props.dialogId, props.type);
+      }
 
-      helper.webSocket = ajax.message.create(helper.read("token"), props.agentId, props.dialogId, props.type);
       helper.webSocket.onmessage = (event) => {
-
         const { type, reference, step_message, files } = JSON.parse(event.data);
         let { message } = JSON.parse(event.data);
         if (!loadingData.value) return;
@@ -396,7 +415,33 @@ export default defineComponent({
           }
         }
 
-        if (type === "message") {
+        // 如果是智能数据
+        if (props.type == 'smartData') {
+
+          // 以下是智能数据对话的变量
+          const { image_url, excel_url, excel_name, code, sql } = JSON.parse(event.data);
+          answerData.value = getHTML(code);
+          // 如果有图片或excel,则更新图片或excel地址
+          if (image_url) {
+            imageUrl.value = `http://${window.location.hostname}${image_url}`
+          }
+          if (excel_url) {
+            const file = {
+              file_url: `http://${window.location.hostname}${excel_url}`,
+              file_name: excel_name || 'excel.xlsx',
+            }
+            console.log('file', file)
+            answerFile.value = file
+          }
+
+          if (sql) {
+            answerSql.value = sql;
+          }
+          if (answerData.value && !isLoaded.value) {
+            answerLoaded();
+          }
+          addAnswer(loadingData.value);
+        } else if (type === "message") {
           message = replaceCode(message);
           answerData.value = getHTML(message);
           answerReference.value = [];
@@ -417,6 +462,7 @@ export default defineComponent({
           }
           addAnswer(loadingData.value);
         }
+
         if (type === "close") {
           if (!answerData.value) {
             answerLoaded();

+ 2 - 0
src/components/DocumentCards.vue

@@ -161,6 +161,8 @@ export default defineComponent({
 
           const sendData = {
             chatHistory: [],
+            chat_id: data.chat_id,
+            agent_id: props.agentId,
             name: "文档智能",
             description: "文档智能",
             inputs: {

+ 3 - 14
src/views/Home.vue

@@ -50,6 +50,7 @@
             <footer v-if="navId !== -2 && navId !== 0 && navId !== 3 && !historyMode">
               <message-input :readonly="readonly" eventName="open-dialog" />
             </footer>
+
             <footer v-if="navId === 0 && !showDialog" class="upload-footer">
               <section v-for="(item, key) in variables" :key="key">
                 <div>
@@ -101,21 +102,9 @@
                     " :show-upload-button="{ showOnExceedLimit: true }" accept=".pdf,.doc,.docx,.txt,.md,.ppt.pptx" />
                 </div>
               </section>
-              <!-- <a-textarea  :max-length="maxLength" v-model="textValue"
-                                :show-word-limit="textValue.length > maxLength / 2" :auto-size="{ maxRows: 6 }"
-                                placeholder="输入您想了解的内容,Shift+Enter换行" :style="{
-                                    flex: 1,
-                                    borderRadius: '12px',
-                                    marginTop: '20px',
-                                    padding: '0px 30px 0 16px',
-                                    background: 'transparent',
-                                    border: '1px solid #e3e3e3',
-                                    minHeight: '120px',
-                                    paddingBottom: `${textValue.length > maxLength / 2 ? '20px' : ''}`
-                                }">
-                            </a-textarea> -->
               <a-button :style="{ width: '500px' }" type="primary" @click="beginCombine">开始</a-button>
             </footer>
+
             <footer v-if="navId === 3 && showDialog && !historyMode" class="upload-footer">
               <a-textarea :max-length="maxLength" v-model="textValue" :disabled="parseStatus"
                 :show-word-limit="textValue.length > maxLength / 2" :auto-size="{ maxRows: 6 }"
@@ -187,7 +176,7 @@ export default defineComponent({
   },
   setup() {
     // NOTE: 先把4文库问答的类型改成report类型,后续再改回来
-    const dialogType = ["report", "excel", "knowledgeQuiz", "report", "normal", "normal", "normal", "normal"];
+    const dialogType = ["report", "excel", "knowledgeQuiz", "report", "normal", "smartData", "normal", "normal"];
     const { config, helper, ajax } = inject("$global");
 
     const SYSTEM_NAME = config.defaultTitle

Vissa filer visades inte eftersom för många filer har ändrats