diff --git a/src/store/modules/orgMember.ts b/src/store/modules/orgMember.ts index 5cc4dc1..0d1bdce 100644 --- a/src/store/modules/orgMember.ts +++ b/src/store/modules/orgMember.ts @@ -1,33 +1,35 @@ import { defineStore } from 'pinia' import { ref} from 'vue'; import request from "@/utils/request"; +import { id } from 'element-plus/es/locale'; export const useOrgMemberStore = defineStore('orgMember', () => { interface OrgMemberItem { id: string; - label: string; - children?:OrgMemberItem[]; + name: string; + child?:OrgMemberItem[]; } const listMap = ref>({}) - const dataTree = ref({ id: '', label: '', children: [] }) + const dataTree = ref({ id: '', name: '', child: [] }) async function init() { await request({ - url: "/javasys/lowCode/transfer/getOrgAndManTree", + url: "/systemapi/app/get_org_everyone_people",//"172.20.2.87:39168", method: "post", + data:{id:"313",all: 1} }).then((response) => { // assuming response.data is an array of OrgMemberItem - dataTree.value=response.data - handleChildren(response.data.children) + dataTree.value={id:"313",name:"集团公司",child:response.data} + handleChildren(response.data) }); } function handleChildren(childs:any[]){ childs.forEach(item => { - listMap.value[item.id] = item.label; - if(item.children){ - handleChildren(item.children) + listMap.value[item.id] = item.name; + if(item.child){ + handleChildren(item.child) } }); } diff --git a/src/views/doc/agent.vue b/src/views/doc/agent.vue index 6952b09..ccc83aa 100644 --- a/src/views/doc/agent.vue +++ b/src/views/doc/agent.vue @@ -26,7 +26,7 @@ const inputState=ref(true) const conversations=ref([]) const centHoverItem=ref("") -const interact_msg=ref<{ask:boolean,think:string,content:string}[]>([]) +const interact_msg=ref<{ask:boolean,think:string,content:string,docinfo?:any[]}[]>([]) const props = withDefaults(defineProps<{ userid:string, closefunc:()=>void, @@ -75,7 +75,7 @@ async function onSendTextToAI(){ }else{ interact_msg.value.push({ask:true,think:"", content:myquestion.value}) } - + let docinfo:any=[] controller.value = new AbortController(); try{ const res= await doAiChat(`${baseURL}/aibot/agents/${props.agent.uuid}/chat`,{ @@ -86,7 +86,7 @@ async function onSendTextToAI(){ user:atob(props.userid),//这里已经base64解析了 },controller.value.signal ) - + if (!res.ok) { throw new Error(`HTTP ${res.status} ${res.statusText}`); } @@ -94,11 +94,10 @@ async function onSendTextToAI(){ myquestion.value="" const reader = res.body!.getReader(); const decoder = new TextDecoder('utf-8'); - + let chunk = ''; // 行缓存 while (true) { const {done, value} = await reader.read() - if (done) break; // 服务器可能一次返回多行,需要手动按行拆分 chunk += decoder.decode(value, {stream: true}); @@ -112,9 +111,13 @@ async function onSendTextToAI(){ if(json.event==="message"){ conversation.value=json.conversation_id respMsg.value+=json.answer + }else if(json.event==="message_end"){ + docinfo=json.metadata.retriever_resources } } } + + if (done) break;//能否放到结尾??? } }catch (e: any) { if (e.name === 'AbortError') { @@ -126,14 +129,13 @@ async function onSendTextToAI(){ const arr=respMsg.value.split("") if(arr.length===1){ - interact_msg.value.push({ask:false,think:"",content:arr[0]}) + interact_msg.value.push({ask:false,think:"",content:arr[0],docinfo:docinfo}) }else{ //思考模式 - interact_msg.value.push({ask:false,think:arr[0],content:arr[1]}) + interact_msg.value.push({ask:false,think:arr[0],content:arr[1],docinfo:docinfo}) } respMsg.value="" - setAiChat({ "userid":atob(props.userid), "uuid":conversation.value, @@ -180,6 +182,16 @@ function handleMouseLeave(){ } function newContext(){ + const c =conversations.value.find(c=>c.uuid==conversation.value) + if(!c){ + conversations.value.push({ + "agentuuid":props.agent.uuid, + "uuid":conversation.value, + "brief":interact_msg.value[0].content, + "messages":interact_msg.value + }) + } + inputState.value=true interact_msg.value=[] conversation.value="" @@ -192,6 +204,13 @@ function resetContext(){ props.closefunc() } +//处理ai返回的引用信息 +function formatRefContent(content:string){ + let result=content.replaceAll(/"/g,'') + result=result.replaceAll(/Unnamed: /g,' ') + return result +} + //渲染完页面再执行 onMounted(() => { loadKnownLibList() @@ -212,7 +231,8 @@ onMounted(() => {
  • 【新建会话】
  • -
  • {{ item.brief }} +
  • + {{ item.brief }}
  • @@ -224,6 +244,13 @@ onMounted(() => {
    +
    + 引用
    + + {{doc.document_name}} + +
    @@ -306,14 +333,38 @@ onMounted(() => { background-color: #dddddd; padding: 10px 8px; margin: 3px 14px 3px 0; - overflow: hidden; - text-overflow: ellipsis; border-radius: 8px; - text-wrap-mode: nowrap; + span{ + width: 90%; + overflow: hidden; + text-overflow: ellipsis; + text-wrap-mode: nowrap; + } button{ margin-left: auto; } } +.doc_ref{ + margin: 16px; + display: flex; + flex-wrap: wrap; + hr{ + width: 90%; + margin: inherit; + border: none; + border-top: .5px solid rgb(26 25 25 / 23%); + } + span{ + width: 300px; + overflow: hidden; + text-overflow: ellipsis; + text-wrap-mode: nowrap; + margin: 2px 10px; + padding: 0 10px; + background-color: #d7d5d5; + border-radius: 6px; + } +} \ No newline at end of file diff --git a/src/views/doc/manage.vue b/src/views/doc/manage.vue index 1392f46..96b622e 100644 --- a/src/views/doc/manage.vue +++ b/src/views/doc/manage.vue @@ -22,7 +22,7 @@ import preview from './preview.vue'; import space from './space.vue'; import spacePermission from './spacePermission.vue'; import SvgIcon from "@/components/SvgIcon/index.vue"; -import {doDelSpace} from "@/api/doc/space" +import {doDelSpace,doAccessManage} from "@/api/doc/space" import Space from "./space.vue"; //TODO: add file icons done! @@ -658,6 +658,31 @@ function flushSpaceTree(uuid:string,data:matterTree[]){ spaceTreeRef.value.updateKeyChildren(uuid,data) } +//空间成员管理 +function onAccessManage(){ + dynamicVNode.value = h(sharePermission, { + uid: uid, + uuid: "", + spaceid:SpaceID.value.uuid, // + confirmFunc: (_list: string[],_infos:string[]) => { + // 组织权限数据 + //_len=_list.length + let permited = btoa(_list.join("|")) + doAccessManage(uid,{ + "space":SpaceID.value.uuid, + "roles":permited, + "owner":SpaceID.value.userUuid, + "len":_list.length + }).then(()=>{ + + }) + }, + closeFunc: () => { + dynamicVNode.value=null + } + }) +} + //删除空间 function onDeleteSpace(row:matterInfo){ ElMessageBox.confirm(`确认删除空间 ( ${row.name}) ? 空间内所有文件将不可恢复!取消则放弃删除操作。`, "警告", { @@ -763,6 +788,7 @@ const handleSelectionChange = (val:matterInfo[]) => {