⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 treelist2.asp

📁 某小学专业网站系统
💻 ASP
📖 第 1 页 / 共 2 页
字号:
<%
'===================================================================================
'	树状列表函数 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 + -