This commit is contained in:
yumoqing 2025-08-12 12:08:28 +08:00
parent 037724c760
commit c11ca2d793
14 changed files with 208 additions and 19 deletions

64
json/folder.json Normal file
View File

@ -0,0 +1,64 @@
{
"tblname": "folder",
"uitype":"tree",
"title":"目录",
"params":{
"idField":"id",
"textField":"name",
"typeField":"filetype",
"sortby":"name",
"editable":true,
"browserfields":{
"alter":{}
},
"node_typeicons":{
"pdf": "{{entire_url('/bricks/imgs/pdf.svg')}}",
"txt":"{{entire_url('/bricks/imgs/txt.svg')}}",
"docx":"{{entire_url('/bricks/imgs/docx.svg')}}",
"doc":"{{entire_url('/bricks/imgs/docx.svg')}}",
"pptx":"{{entire_url('/bricks/imgs/pptx.svg')}}",
"ppt":"{{entire_url('/bricks/imgs/pptx.svg')}}",
"xlsx":"{{entire_url('/bricks/imgs/xlsx.svg')}}",
"xls":"{{entire_url('/bricks/imgs/xlsx.svg')}}",
"epub":"{{entire_url('/bricks/imgs/epub.svg')}}",
"csv":"{{entire_url('/bricks/imgs/csv.svg')}}"
},
"edit_exclouded_fields":["id", "fiid" ],
"get_data_url":"{{entire_url('/rag/get_folder_subs.dspy')}}",
"delete_data_url": "{{entire_url('/rag/delete_folder_or_file.dspy')}}",
"params":{
"id":"{{params_kw.id or '' }}"
},
"newdata_params":{
"fiid":"{{params_kw.id or ''}}"
},
"parentField":"parentid",
"toolbar":{
"tools":[
{
"name":"upload",
"label":"上传文件",
"selected_data": true,
"icon":"{{entire_url('/bricks/imgs/upload.svg')}}"
}
]
},
"binds":[
{
"wid":"self",
"event":"upload",
"actiontype":"urlwidget",
"target":"PopupWindow",
"popup_options":{
"width":"75%",
"height":"75%",
"icon":"{{entire_url('/bricks/imgs/app.png')}}",
"title":"上传文件"
},
"options":{
"url":"{{entire_url('/rag/upload_file.ui')}}"
}
}
]
}
}

View File

@ -32,7 +32,7 @@
"title":"文件管理" "title":"文件管理"
}, },
"options":{ "options":{
"url":"{{entire_url('/filemgr/folder')}}" "url":"{{entire_url('/rag/folder')}}"
} }
} }
] ]

12
json/ragquota.json Normal file
View File

@ -0,0 +1,12 @@
{
"tblname": "ragquota",
"title":"知识库限额",
"params":{
"logined_userorgid":"orgid",
"browserfields":{
"exclouded":["id", "orgid"],
"alters":{}
},
"edit_exclouded_fields":["id", "orgid" ]
}
}

View File

@ -1,16 +0,0 @@
{
"tblname": "ragservices",
"title":"知识库服务集",
"params":{
"logined_userorgid":"orgid",
"sortby":"name",
"browserfields":{
"alters":{}
},
"edit_exclouded_fields":[],
"toolbar":{
},
"binds":[
]
}
}

BIN
models/ragquota.xlsx Normal file

Binary file not shown.

38
rag/folderinfo.py Normal file
View File

@ -0,0 +1,38 @@
from appPublic.timeUtils import curDateString
form filemgr.filemgr import FileMgr
class RagFileMgr(FileMgr):
async def get_folder_ownerid(self, sor):
fiid = self.fiid
recs = await sor.R('kdb', {'id': self.fiid})
if len(recs) > 0:
return recs[0].orgid
return None
async def get_organization_quota(self, sor, orgid):
sql = """select a.* from ragquota a, kdb b
where a.orgid = b.orgid
and b.id = ${id}$
and ${today}$ >= a.enabled_date
and ${today}$ < a.expired_date
"""
recs = await sor.sqlExe(sql, {
'id': self.id,
'today': curDateTime()
})
if len(recs) > 0:
r = recs[0]
return r.quota, r.expired_date
async def file_uploaded(self, request, ns, userid):
pass
async def file_deleted(self, request, recs, userid):
pass
## usage
# mgr = RagFileMgr(fiid)
# await mgr.add_file(request, params_kw)
# await mgr.delete_file(request, file_id)
##

View File

@ -4,7 +4,9 @@ import aiohttp
from aiohttp import ClientSession, ClientTimeout from aiohttp import ClientSession, ClientTimeout
import json import json
from .file import file_uploaded, file_deleted from .file import file_uploaded, file_deleted
from .folderinfo import RagFileMgr
from appPublic.registerfunction import RegisterFunction from appPublic.registerfunction import RegisterFunction
from filemgr.filemgr import use_module_patches
async def _make_connection_request(action: str, params: dict = None) -> dict: async def _make_connection_request(action: str, params: dict = None) -> dict:
""" """
@ -153,3 +155,5 @@ def load_rag():
env.list_user_files = list_user_files env.list_user_files = list_user_files
env.list_all_knowledge_bases = list_all_knowledge_bases env.list_all_knowledge_bases = list_all_knowledge_bases
env.docs = docs env.docs = docs
env.RagFileMgr = RagFileMgr

View File

@ -1 +0,0 @@
/d/ymq/js/bricks/dist

View File

@ -0,0 +1,6 @@
try:
filemgr = RagFilemgr()
await filemgr.del_folder(request, params_kw.id)
return UiMessage(title='delete folder', message='delete success')
except Exception as e:
return Error(title='delete folder', message='delete failed({e})')

View File

@ -0,0 +1,29 @@
orgid = await get_userorgid()
dbname = get_module_dbname('filemgr')
db = DBPools()
async with db.sqlorContext(dbname) as sor:
filemgr = RagFileMgr()
if params_kw.filetype == 'folder':
has_sub = await filemgr.has_sub(sor, params_kw.id)
if has_sub:
return UiComform(title='Delete Conform',
message='This folder has subitem, are you sure to delete it?', binds=[
{
"wid":"self",
"event":"conformed",
"actiontype":"urlwidget",
"target":"self",
"options":{
"params":{
"id":params_kw.id,
"filetype": params_kw.filetype
},
url: entire_url('conformed_delete.dspy')
}
}
])
await filemgr._del_folder(sor, params_kw.id, ownerid)
else:
await filemgr._del_file(sor, params_kw.id, ownerid)
return UiMessage(title='delete file', message='delete success')
return Error(title='delete file', message='delete failed')

View File

@ -0,0 +1,5 @@
#
debug(f'{params_kw=}')
filemgr = RagFileMgr()
f = await filemgr.get_subs( params_kw.id)
return f

9
wwwroot/getallfiles.dspy Normal file
View File

@ -0,0 +1,9 @@
kdbid=params_kw.id
filemgr = FileMgr
ret = []
async for f in filemgr.get_subfiles(request, params_kw):
ret.append({
"id":f.id,
"filename":f.realpath
})
return ret

6
wwwroot/upload_file.dspy Normal file
View File

@ -0,0 +1,6 @@
fmgr = RagFileMgr()
try:
stat = await fmgr.add_file(request, params_kw)
return UiMessage(title='Add file', message='file add success')
except Exception as e:
return UiError(title='Add file', message=f'file add failed({e})')

33
wwwroot/upload_file.ui Normal file
View File

@ -0,0 +1,33 @@
{
"widgettype":"Form",
"options":{
"fields":[
{
"name":"folderid",
"uitype":"hide",
"value":"{{params_kw.id}}"
},
{
"name":"fiid",
"uitype":"hide",
"value":"{{params_kw.fiid}}"
},
{
"name":"upfile",
"uitype":"file",
"label":"上传文件"
}
]
},
"binds":[
{
"wid":"self",
"event":"submit",
"actiontype":"urlwidget",
"target":"self",
"options":{
"url":"{{entire_url('./upload_file.dspy')}}"
}
}
]
}