📄 treelist2.asp
字号:
<%
'===================================================================================
' 树状列表函数 treelist(rs,mode,filename)
' 作者:曾涛
'
'
' 单 位:润万年
'
' 开发日期:2000/8/21
' 用 途:
'
' 1、根据所属关系列出树状列表。
'
' 参数:
' rs: 要操作的记录集
' mode: 操作模式,如果是用户是管理员值为"admin"
' filename: 文件名,如果为管理级用户,代表编辑页面文件。如果为普通用户,代表显示详细信息页面。
'
' 说明:
' 表里的固定字段:
' 1.字段名:number 类型:varchar 长度:300 描述:编号
' 2.字段名:name 类型:varchar 长度:100 描述:名称
' 3.字段名:leaf 类型:char 长度:2 描述:是否为叶子
' 4.字段名:line 类型:text 描述:标记上级所有节点是否为同级别中最后一个
' 5.字段名:after类型: char 长度:2 描述:是否为同级别中最后一个节点
'
'
' 该函数作为调用文件的程序体,所以必须放在rs记录集定义之后。并且调用文件中的变量不能命名为
' 以下名字:actstr,number,tradename,filename,tempnumber,substr,afternumber,aftervalue,
' flag,afterflag,strline,strtempline,delflag,leafflag,lineflag,strlinevalue,numbervalue。因为上述变量名已被使用
'
'
'
'
'
'===================================================================================
%>
<%
actstr=request("act")
number=trim(request("number"))
tradename=trim(request("name"))
filename=trim(request("filename"))
if actstr="add" then '新增操作
dim tradename
dim tempnumber
dim substr,afternumber,aftervalue
dim flag,afterflag
dim strline,strtempline
strline=""
afterflag=false
if number="root" then
if rs.recordcount>=1 then
rs.movefirst
end if
for i=1 to 99
flag=true
if i<10 then
substr="0"&cstr(i)
else
substr=cstr(i)
end if
do while not rs.eof
tempnumber=trim(rs("number"))
if len(tempnumber)=2 then
if tempnumber=substr then
flag=false
exit do
end if
end if
rs.movenext
loop
if flag=true then
exit for
end if
next
rs.movelast
aftervalue="1"
do while not rs.bof
tempnumber=trim(rs("number"))
if len(tempnumber)=2 then
if cint(tempnumber)<cint(substr) then
aftervalue="1"
rs("after")="0"
rs.update
afterflag=true
else
aftervalue="0"
end if
exit do
end if
rs.moveprevious
loop
if afterflag=true then
rs.movefirst
do while not rs.eof
if left(trim(rs("number")),2)=tempnumber and len(trim(rs("number")))>2 then
strline="0"&right(trim(rs("line")),len(trim(rs("line")))-1)
rs("line")=strline
rs.update
end if
rs.movenext
loop
end if
rs.requery
rs.addnew
rs("number")=substr
rs("name")=tradename
rs("leaf")="1"
rs("after")=aftervalue
rs.update
rs.requery
rs.movefirst
response.redirect Request.ServerVariables("PATH_INFO")
else
if tradename="" then
else
for i=1 to 99
flag=true
if i<10 then
substr="0"&cstr(i)
else
substr=cstr(i)
end if
if rs.recordcount>=1 then
rs.movefirst
end if
do while not rs.eof
tempnumber=trim(rs("number"))
if (left(tempnumber,len(number))=number) and (len(tempnumber)=len(number)+2) then
if right(tempnumber,2)=substr then
flag=flase
exit do
end if
end if
rs.movenext
loop
if flag=true then
if rs.recordcount>=1 then
rs.movelast
end if
do while not rs.bof
tempnumber=trim(rs("number"))
if (left(tempnumber,len(number))=number) and (len(tempnumber)=len(number)+2) and (Cint(right(tempnumber,2)) > Cint(substr)) then
afterflag=true
exit do
end if
rs.moveprevious
loop
if afterflag=true then
aftervalue="0"
else
aftervalue="1"
if rs.recordcount>=1 then
rs.movefirst
end if
do while not rs.eof
tempnumber=trim(rs("number"))
if (left(tempnumber,len(number))=number) and (len(tempnumber)=len(number)+2) and (trim(rs("after"))="1") then
rs("after")="0"
rs.update
exit do
end if
rs.movenext
loop
end if
'一级级得到个上级节点是否为同级别中最后一个标记
for j=1 to len(number)/2
rs.movefirst
do while not rs.eof
tempnumber=left(number,j*2)
if tempnumber=trim(rs("number")) then
if trim(rs("after"))="0" then
strline=strline&"0"
else
strline=strline&"1"
end if
end if
rs.movenext
loop
next
if rs.recordcount>=1 then
rs.movefirst
end if
'改变同级节点的下级节点在该级别中是否为最后一个
if afterflag=false then
do while not rs.eof
tempnumber=trim(rs("number"))
if (len(tempnumber) >= len(number)+4) and (left(tempnumber,len(number))=number) then
strtempline=trim(rs("line"))
strtempline=left(strtempline,(len(number)/2))&"0"&right(strtempline,(len(tempnumber)/2)-(len(number)/2)-1)
rs("line")=strtempline
rs.update
end if
rs.movenext
loop
end if
rs.addnew
rs("number")=number&substr
rs("name")=tradename
rs("leaf")="1"
rs("after")=aftervalue
rs("line")=strline
rs.update
exit for
end if
next
rs.movefirst
do while not rs.eof
if rs("number")=number then
rs("leaf")="0"
rs.update
end if
rs.movenext
loop
rs.requery
rs.movefirst
response.redirect Request.ServerVariables("PATH_INFO")
end if
end if
elseif actstr="del" then '删除操作
dim delflag,leafflag,lineflag,strlinevalue,numbervalue
delflag=flase
leafflag=true
lineflag=false '删除是否是同级别最后一个节点标记
strlinevalue=""
if rs.recordcount>=1 then
rs.movefirst
end if
do while not rs.eof
if trim(rs("number"))=number then
'判断是否要删除的栏目是根栏目,是的话,不允许删除
if len(rs("number"))=2 then
response.write "<script language=javascript>"
response.write "alert('根栏目不允许删除!');"
response.write "history.back(-1);"
response.write "</script>"
end if
if trim(rs("leaf"))="1" then
if trim(rs("after"))="1" then
delflag=true '判断是否删除的是同级别的最后一个节点
end if
rs.delete
rs.update
if delflag=true then
rs.requery
rs.movelast
if rs.recordcount>=1 then
do while not rs.bof
tempnumber=trim(rs("number"))
if (len(tempnumber)=len(number)) and (left(tempnumber,len(number)-2)=left(number,len(number)-2)) then
lineflag=true '更改为同级别最后一个节点
rs("after")="1"
rs.update
exit do
end if
rs.moveprevious
loop
end if
if lineflag=true then
rs.movefirst
do while not rs.eof
numbervalue=trim(rs("number"))
strline=trim(rs("line"))
if (len(numbervalue)>len(tempnumber)) and (left(numbervalue,len(tempnumber))=tempnumber) then
strlinevalue=left(strline,(len(tempnumber)/2)-1)&"1"&right(strline,len(strline)-len(tempnumber)/2)
rs("line")=strlinevalue
rs.update
end if
rs.movenext
loop
end if
end if
exit do
else
response.write "<script language=javascript>"
response.write "alert('该节点有子节点,请先删除子节点!');"
response.write "history.back(-1);"
response.write "</script>"
end if
end if
rs.movenext
loop
rs.requery
if rs.recordcount>=1 then
rs.movefirst
end if
'判断删除后上一级节点是否为叶子
do while not rs.eof
tempnumber=trim(rs("number"))
if (len(tempnumber)=len(number)) and (left(number,len(number)-2)=left(tempnumber,len(number)-2)) then
leafflag=false
exit do
end if
rs.movenext
loop
if leafflag=true then
if rs.recordcount>=1 then
rs.movefirst
end if
do while not rs.eof
tempnumber=trim(rs("number"))
if (len(tempnumber)=len(number)-2) and (tempnumber=left(number,len(number)-2)) then
rs("leaf")="1"
rs.update
exit do
end if
rs.movenext
loop
end if
rs.requery
if rs.recordcount>=1 then
rs.movefirst
end if
response.redirect Request.ServerVariables("PATH_INFO")
elseif actstr="modify" then '修改操作
rs.movefirst
do while not rs.eof
if trim(rs("number"))=number then
'判断是否要修改的栏目是根栏目,是的话,不允许修改
if len(rs("number"))=2 then
response.write "<script language=javascript>"
response.write "alert('根栏目不允许修改!');"
response.write "history.back(-1);"
response.write "</script>"
end if
rs("name")=tradename
rs.update
exit do
end if
rs.movenext
loop
rs.requery
rs.movefirst
response.write "<script language='javascript'>"
response.write "alert('修改成功');"
response.write "</script>"
response.redirect Request.ServerVariables("PATH_INFO")
end if
%>
<%
function treelist(rs,mode,filename)
dim modestr,filenamestr
dim secondnumber,secondflag,flag,linevalue
modestr=mode
filenamestr=filename
pathfile=Request.ServerVariables("PATH_INFO")
secondflag=false
flag=false
public_mode=mode
public_filename=filename
do while not rs.eof '选中最后一个二级节点编号
if len(trim(rs("number")))=4 then
secondnumber=trim(rs("number"))
end if
rs.movenext
loop
if rs.recordcount>=1 then
rs.movefirst
end if
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -