This commit is contained in:
yumoqing 2025-06-30 15:05:55 +08:00
commit 29f9466b22
7 changed files with 168 additions and 100 deletions

0
filemgr/__init__.py Normal file
View File

View File

@ -1,10 +1,10 @@
from traceback import format_exc
from ahserver.serverenv import get_serverenv
from ahserver.auth_api import get_userinfo
from ahserver.auth_api import get_session_userinfo
from sqlor.dbpools import DBPools
from appPublic.uniqueID import getID
from appPublic.log import debug, error, exception
from appbase.params import get_parmas
# from appbase.params import get_parmas
def get_dbname():
f = get_serverenv('get_module_dbname')
@ -17,48 +17,60 @@ class FileMgr:
async def get_bizinfo_nodes(self, request):
db = DBPools()
userinfo = await get_session_userinfo(request)
dbname = get_dbname()
async with db.sqlorContext(dbname) as sor:
return await self.sor_get_bizinfo_nodes(sor, request)
return []
async def sor_get_bizinfo_nodes(self, sor, request):
userinfo = await get_session_userinfo(request)
ns = {
'orgid':usrinfo.userorgid,
'biztype':self.biztype
}
recs = await sor.R('folderinfo', ns)
return recs
return []
async def add_bizinfo_node(self, request, ns):
userinfo = await get_session_userinfo(request)
dbname = get_dbname()
db = DBPools()
async with db.sqlorContext(dbname) as sor:
return await self.sor_add_bizinfo_node(sor,request, ns)
return False
async def sor_add_bizinfo_node(self, sor, request, ns):
userinfo = await get_session_userinfo(request)
ns['orgid'] = userinfo.userorgid,
ns['biztype'] = self.biztype
ns['id'] = getID()
ns['cur_size'] = 0
ns['max_size'] = await get_params(sor, userinfo.userid, 'folder_max_size);
# ns['max_size'] = await get_params(sor, userinfo.userid, 'folder_max_size');
await sor.C('folderinfo', ns)
return True
return False
async def delete_bizinfo_node(self, request, ns):
userinfo = await get_session_userinfo(request)
dbname = get_dbname()
db = DBPools()
async with db.sqlorContext(dbname) as sor:
return await self.sor_delete_bizinfo_node(self, sor, request, ns)
return False
async def sor_delete_bizinfo_node(self, sor, request, ns):
userinfo = await get_session_userinfo(request)
ns1['orgid'] = userinfo.userorgid,
ns1['biztype'] = self.biztype
ns1['id'] = ns['id']
await sor.D('folderinfo', ns1)
return True
return False
async def update_bizinfo_node(self, request, ns):
userinfo = await get_session_userinfo(request)
dbname = get_dbname()
db = DBPools()
async with db.sqlorContext(dbname) as sor:
return self.sor_update_bizinfo_node(sor, request, ns)
return False
async def sor_update_bizinfo_node(self, sor, request, ns):
userinfo = await get_session_userinfo(request)
ns1['orgid'] = userinfo.userorgid,
ns1['biztype'] = self.biztype
ns1['id'] = ns['id']
@ -66,33 +78,47 @@ class FileMgr:
if len(recs) > 0:
await sor.U('folderinfo', ns1)
return True
return return
return False
async def add_folder(self, request, ns):
userinfo = await get_session_userinfo(request)
dbname = get_dbname()
db = DBPools()
async with db.sqlorContext(dbname) as sor:
return await self.sor_add_folder(sor, request, ns)
return False
async def sor_add_folder(self, sor, request, ns):
userinfo = await get_session_userinfo(request)
ns1['orgid'] = userinfo.userorgid,
ns1['biztype'] = self.biztype
ns1['id'] = ns['id']
await sor.D('folderinfo', ns1)
await sor.C('folderinfo', ns1)
return True
return False
async def get_subfolder(self, request, fid, fiid):
userinfo = await get_session_userinfo(request)
dbname = get_dbname()
db = DBPools()
async with db.sqlorContext(dbname) as sor:
sql = """select a.id as fiid, b.*
return await self.sor_get_subfolder(sor, request, fid, fiid)
return []
async def sor_get_subfolder(self, sor, request, fid, fiid):
sql = """select x.*, 'folder' as rtype,
case when y.id is null then 1
else 0 end as is_left
from (select a.id as fiid, b.*
from folderinfo a, folder b
where a.id = ${fiid}$
and b.fiid = a.id
and b.parentid = ${fid}$
and a.orgid = ${orgid}$
and a.biztype = ${biztype}$
order by name"""
order by name) as x left join (
select unique a.* from folder a left join folder b on a.id = b.par
entid where b.id is not NULL
) as y
on x.id = y.id
"""
ns = {
'fid':fid,
'fiid':fiid,
@ -101,14 +127,16 @@ order by name"""
}
recs = await sor.sqlExe(sql, ns)
return recs
await sor.D('folderinfo', ns1)
return []
async def get_files(self, request, fid, fiid):
userinfo = await get_session_userinfo(request)
dbname = get_dbname()
db = DBPools()
async with db.sqlorContext(dbname) as sor:
return await self.sor_get_files(sor, request, fid, fiid)
return []
async def sor_get_files(self, sor, request, fid, fiid):
userinfo = await get_session_userinfo(request)
sql = """select a.id as fiid, b.*
from folderinfo a, file b
where a.id = ${fiid}$
@ -126,9 +154,16 @@ order by name"""
}
recs = await sor.sqlExe(sql, ns)
return recs
async def get_folderinfo(self, sor, fiid):
dbname = get_dbname()
db = DBPools()
async with db.sqlorContext(dbname) as sor:
return await self.sor_get_folderinfo(sor, request, fid, fiid)
return []
async def get_folderinfo(self, sor, userinfo, fiid):
async def sor_get_folderinfo(self, sor, fiid):
userinfo = await get_session_userinfo(request)
sql = """select * from folderinfo
where id = ${fiid}$
and orgid = ${orgid}$
@ -143,24 +178,15 @@ where id = ${fiid}$
return recs
return None
async def add_folder(self, request, ns):
userinfo = await get_session_userinfo(request)
async def delete_file(self, request, fid, fiid):
dbname = get_dbname()
db = DBPools()
async with db.sqlorContext(dbname) as sor:
sql = """select * from folder
ns1['orgid'] = userinfo.userorgid,
ns1['biztype'] = self.biztype
ns1['id'] = ns['id']
await sor.D('folderinfo', ns1)
return True
return await self.sor_delete_file(self, sor, request, fid, fiid)
return False
async def delete_file(self, request, fid, fiid):
async def sor_delete_file(self, sor, request, fid, fiid):
userinfo = await get_session_userinfo(request)
dbname = get_dbname()
db = DBPools()
async with db.sqlorContext(dbname) as sor:
sql = """select a.id as fiid, b.*
from folderinfo a, file b
where a.id = ${fiid}$

3
json/build.sh Executable file
View File

@ -0,0 +1,3 @@
#!/usr/bin/bash
xls2ui -m ../models -o ../wwwroot filemgr *.json

View File

@ -1,11 +1,11 @@
{
"tblname": "permission",
"tblname": "folder",
"uitype":"tree",
"title":"权限",
"title":"目录",
"params":{
"idField":"id",
"textField":"path",
"sortby":"path",
"textField":"name",
"sortby":"name",
"editable":true,
"browserfields":{
"alters":{}
@ -13,9 +13,28 @@
"edit_exclouded_fields":[],
"parentField":"parentid",
"toolbar":{
"tools":[
{
"name":"upload",
"label":"上传文件",
"icon":"{{entire_url('/bricks/imgs/upload.svg')}}"
}
]
},
"binds":[
{
"wid":"upload",
"event":"upload",
"actiontype":"urlwidget",
"target":"PopupWindow",
"popupwindow_options":{
"icon":"{{entire_url('/bricks/imgs/app.png')}}",
"title":"上传文件"
},
"options":{
"url":"{{entire_url('/filemgr/upload_file.ui')}}"
}
}
]
}
}

View File

@ -1,20 +1,21 @@
{
"tblname": "users",
"tblname": "folderinfo",
"title":"目录信息",
"params": {
"sortby":"name",
"logined_userorgid":"orgid",
"browserfields": {
"exclouded": ["id"],
"alters": {}
"exclouded": ["id", "biztype", "orgid" ],
"cwidth": {}
},
"editexclouded": [
"id"
"id", "orgid"
],
"subtables": [
{
"field":"userid",
"title":"用户角色",
"subtable":"userrole"
"field":"fiid",
"title":"目录",
"subtable":"folder"
}
]
}

4
pyproject.toml Normal file
View File

@ -0,0 +1,4 @@
[build-system]
requires = ["setuptools>=61", "wheel"]
build-backend = "setuptools.build_meta"

15
setup.cfg Normal file
View File

@ -0,0 +1,15 @@
[metadata]
name=filemgr
version = 0.0.1
description = A folder management package
author = "yu moqing"
author_email = "yumoqing@gmail.com"
readme = "README.md"
license = "MIT"
[options]
packages = find:
requires-python = ">=3.8"
install_requires =
apppublic
sqlor
ahserver