最好的菜单,高分相谢!

xgtqr123 2004-09-29 08:09:33
http://www.smartx.biz的OA系统中有最好的菜单,是我至今看到最好的一个哟,真的是太棒了哟,大家破一下哟,重分相谢!
...全文
300 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
mqjshanghai 2004-12-24
  • 打赏
  • 举报
回复
都给你弄出来了你还说不方便

就是就是
楼主真不厚道
fzxml 2004-12-24
  • 打赏
  • 举报
回复
mark
zsp0010 2004-10-14
  • 打赏
  • 举报
回复
佩服!
帮忙顶!!
cdsun 2004-10-14
  • 打赏
  • 举报
回复
都给你弄出来了你还说不方便

czxwm 2004-10-14
  • 打赏
  • 举报
回复
up
  • 打赏
  • 举报
回复
强~!!!
aking8736 2004-09-30
  • 打赏
  • 举报
回复
收藏~~~
yb2008 2004-09-30
  • 打赏
  • 举报
回复
个人意见:用鼠标触发做个算了,没别的,简单!!
iuhxq 2004-09-30
  • 打赏
  • 举报
回复
好东东,就是俺怎么也弄不明白是怎么做的,微软中国也有这个技术。多级下拉菜单
zfhdream 2004-09-30
  • 打赏
  • 举报
回复
有什么特别的?
下拉菜单??
鼠标触发菜单....
不是很好做??
aspnetxp 2004-09-30
  • 打赏
  • 举报
回复
8错,顶一下
明珠佩佩 2004-09-30
  • 打赏
  • 举报
回复
<script language=JavaScript>
function DynLayer(id,nestref,frame) {
if (!DynLayer.set && !frame) DynLayerInit()
this.frame = frame || self
if (is.ns) {
if (is.ns4) {
if (!frame) {
if (!nestref) var nestref = DynLayer.nestRefArray[id]
if (!DynLayerTest(id,nestref)) return
this.css = (nestref)? eval("document."+nestref+".document."+id) : document.layers[id]
}
else this.css = (nestref)? eval("frame.document."+nestref+".document."+id) : frame.document.layers[id]
this.elm = this.event = this.css
this.doc = this.css.document
}
if (is.ns5) {
this.elm = document.getElementById(id)
this.css = this.elm.style
this.doc = document
}
this.x = this.css.left
this.y = this.css.top
this.w = this.css.clip.width
this.h = this.css.clip.height
}
else if (is.ie) {
this.elm = this.event = this.frame.document.all[id]
this.css = this.frame.document.all[id].style
this.doc = document
this.x = this.elm.offsetLeft
this.y = this.elm.offsetTop
this.w = (is.ie4)? this.css.pixelWidth : this.elm.offsetWidth
this.h = (is.ie4)? this.css.pixelHeight : this.elm.offsetHeight
}
this.id = id
this.nestref = nestref
this.obj = id + "DynLayer"
eval(this.obj + "=this")
}
function DynLayerSetWidth(w) {
this.css.width = w>0?w:0+"px"
}
function DynLayerSetHeight(h) {
this.css.height = h>0?h:0+"px"
}
function DynLayerMoveTo(x,y) {
if (x!=null) {
this.x = x
if (is.ns) this.css.left = this.x
else this.css.pixelLeft = this.x
}
if (y!=null) {
this.y = y
if (is.ns) this.css.top = this.y
else this.css.pixelTop = this.y
}
}
function DynLayerMoveX(x) {
if (x!=null) {
this.x = x
this.css.left = this.x
}
}
function DynLayerMoveY(y) {
if (y!=null) {
this.y = y
this.css.top = this.y
}
}
function DynLayerMoveBy(x,y) {
this.moveTo(this.x+x,this.y+y)
}
function DynLayerShow() {
this.css.visibility = (is.ns)? "show" : "visible"
}
function DynLayerHide() {
this.css.visibility = (is.ns)? "hide" : "hidden"
}
DynLayer.prototype.moveTo = DynLayerMoveTo
DynLayer.prototype.moveX = DynLayerMoveX
DynLayer.prototype.moveY = DynLayerMoveY
DynLayer.prototype.moveBy = DynLayerMoveBy
DynLayer.prototype.show = DynLayerShow
DynLayer.prototype.hide = DynLayerHide
DynLayer.prototype.setWidth = DynLayerSetWidth
DynLayer.prototype.setHeight = DynLayerSetHeight
DynLayerTest = new Function('return true')
// DynLayerInit Function
function DynLayerInit(nestref) {
if (!DynLayer.set) DynLayer.set = true
if (is.ns) {
if (nestref) ref = eval('document.'+nestref+'.document')
else {nestref = ''; ref = document;}
for (var i=0; i<ref.layers.length; i++) {
var divname = ref.layers[i].name
DynLayer.nestRefArray[divname] = nestref
var index = divname.indexOf("Div")
if (index > 0) {
eval(divname.substr(0,index)+' = new DynLayer("'+divname+'","'+nestref+'")')
}
if (ref.layers[i].document.layers.length > 0) {

DynLayer.refArray[DynLayer.refArray.length] = (nestref=='')? ref.layers[i].name : nestref+'.document.'+ref.layers[i].name
}
}
if (DynLayer.refArray.i < DynLayer.refArray.length) {
DynLayerInit(DynLayer.refArray[DynLayer.refArray.i++])
}
}
else if (is.ie) {
for (var i=0; i<document.all.tags("DIV").length; i++) {
var divname = document.all.tags("DIV")[i].id
var index = divname.indexOf("Div")
if (index > 0) {
eval(divname.substr(0,index)+' = new DynLayer("'+divname+'")')
}
}
}
return true
}
DynLayer.nestRefArray = new Array()
DynLayer.refArray = new Array()
DynLayer.refArray.i = 0
DynLayer.set = false
// Slide Methods
function DynLayerSlideTo(endx,endy,inc,speed,fn) {
if (endx==null) endx = this.x
if (endy==null) endy = this.y
var distx = endx-this.x
var disty = endy-this.y
this.slideStart(endx,endy,distx,disty,inc,speed,fn)
}
function DynLayerSlideBy(distx,disty,inc,speed,fn) {
var endx = this.x + distx
var endy = this.y + disty
this.slideStart(endx,endy,distx,disty,inc,speed,fn)
}
function DynLayerSlideStart(endx,endy,distx,disty,inc,speed,fn) {
if (this.slideActive) return
if (!inc) inc = 10
if (!speed) speed = 5
var num = Math.sqrt(Math.pow(distx,2) + Math.pow(disty,2))/inc
if (num==0) return
var dx = distx/num
var dy = disty/num
if (!fn) fn = null
this.slideActive = true
this.slide(dx,dy,endx,endy,num,1,speed,fn)
}
function DynLayerSlide(dx,dy,endx,endy,num,i,speed,fn) {
if (!this.slideActive) return
if (i++ < num) {
this.moveBy(dx,dy)
this.onSlide()
if (this.slideActive) setTimeout(this.obj+".slide("+dx+","+dy+","+endx+","+endy+","+num+","+i+","+speed+",\""+fn+"\")",speed)
else this.onSlideEnd()
}
else {
this.slideActive = false
this.moveTo(endx,endy)
this.onSlide()
this.onSlideEnd()
eval(fn)
}
}
DynLayerSlideInit = new Function()
DynLayer.prototype.slideInit = new Function()
DynLayer.prototype.slideTo = DynLayerSlideTo
DynLayer.prototype.slideBy = DynLayerSlideBy
DynLayer.prototype.slideStart = DynLayerSlideStart
DynLayer.prototype.slide = DynLayerSlide
DynLayer.prototype.onSlide = new Function()
DynLayer.prototype.onSlideEnd = new Function()
// Clip Methods
function DynLayerClipInit(clipTop,clipRight,clipBottom,clipLeft) {
if (is.ie) {
if (arguments.length==4) this.clipTo(clipTop,clipRight,clipBottom,clipLeft)
else if (is.ie4) this.clipTo(0,this.css.pixelWidth,this.css.pixelHeight,0)
}
}
function DynLayerClipTo(t,r,b,l) {
if (t==null) t = this.clipValues('t')
if (r==null) r = this.clipValues('r')
if (b==null) b = this.clipValues('b')
if (l==null) l = this.clipValues('l')
if (is.ns) {
this.css.clip.top = t
this.css.clip.right = r
this.css.clip.bottom = b
this.css.clip.left = l
}
else if (is.ie) this.css.clip = "rect("+t+"px "+r+"px "+b+"px "+l+"px)"
}
function DynLayerClipBy(t,r,b,l) {
this.clipTo(this.clipValues('t')+t,this.clipValues('r')+r,this.clipValues('b')+b,this.clipValues('l')+l)
}
function DynLayerClipValues(which) {
if (is.ie) var clipv = this.css.clip.split("rect(")[1].split(")")[0].split("px")
if (which=="t") return (is.ns)? this.css.clip.top : Number(clipv[0])
if (which=="r") return (is.ns)? this.css.clip.right : Number(clipv[1])
if (which=="b") return (is.ns)? this.css.clip.bottom : Number(clipv[2])
if (which=="l") return (is.ns)? this.css.clip.left : Number(clipv[3])
}
DynLayer.prototype.clipInit = DynLayerClipInit
DynLayer.prototype.clipTo = DynLayerClipTo
DynLayer.prototype.clipBy = DynLayerClipBy
DynLayer.prototype.clipValues = DynLayerClipValues
// Write Method
function DynLayerWrite(html) {
if (is.ns) {
this.doc.open()
this.doc.write(html)
this.doc.close()
}
else if (is.ie) {
this.event.innerHTML = html
}
}
DynLayer.prototype.write = DynLayerWrite
</script>
明珠佩佩 2004-09-30
  • 打赏
  • 举报
回复
<script language=JavaScript>

<!--

var menubarheight = 0;

var menubarsum = 0;

var menuspeed = 10;

var menuinc = 100;

var scrollspeed = 100;

var scrollinc = 60;

var menuchoose = 0;

var iconX = new Array(menubarsum);

var menuIconWidth = new Array(menubarsum);

var menuIconHeight = new Array(menubarsum);

var menuscroll = 0;

var iconareaheight = 0;

var iconrightpos = 0;

var maxscroll = 0;

var scrolling = false;

var scrollTimerID = 0;



function init(mnum, mheight) {

menubarheight = mnum

menubarsum = mheight

menulayer = new Array(menubarsum)

iconlayer = new Array(menubarsum)

barlayer = new Array(menubarsum)

uplayer = new Array(menubarsum)

downlayer = new Array(menubarsum)

for (var i=0; i<menubarsum; i++) {

menulayer[i] = new DynLayer("menulayer" + i + "Div")

menulayer[i].slideInit()



iconlayer[i] = new DynLayer("iconlayer" + i + "Div", "menulayer" + i + "Div")

iconlayer[i].slideInit()

/*iconlayer[i].setWidth(document.body.clientWidth);*/



if (menuIconWidth[i] > document.body.clientWidth) {

iconlayer[i].setWidth(menuIconWidth[i])

iconX[i] = (document.body.clientWidth-menuIconWidth[i])/2

} else {

iconlayer[i].setWidth(document.body.clientWidth)

iconX[i] = 0

}

iconlayer[i].moveTo(iconX[i], menubarheight)



barlayer[i] = new DynLayer("barlayer" + i + "Div", "menulayer" + i + "Div")

barlayer[i].slideInit()



uplayer[i] = new DynLayer("uplayer" + i + "Div", "menulayer" + i + "Div")

uplayer[i].slideInit()



downlayer[i] = new DynLayer("downlayer" + i + "Div", "menulayer" + i + "Div")

downlayer[i].slideInit()



}

menureload()





}



function menubarpush(num) {

if (num != menuchoose && num >= 0 && num < menubarsum) {



iconlayer[menuchoose].moveTo(iconX[menuchoose],menubarheight)

menuscroll = 0

scrolling = false



for (var i=0; i <=num; i++) {

menulayer[i].slideTo(0, i*menubarheight, menuinc, menuspeed)

}

nAdCornerOriginY = document.body.clientHeight;

nAdCornerOriginY += document.body.scrollTop;

for (var i=menubarsum-1; i>num; i--) {

nAdCornerOriginY -= menubarheight

menulayer[i].slideTo(0,nAdCornerOriginY, menuinc, menuspeed)

}

menuchoose = num

menuscrollbar()

}

}





function menureload() {

nAdCornerOriginY = document.body.clientHeight;

nAdCornerOriginY += document.body.scrollTop;

for (var i=menubarsum-1; i>menuchoose; i--) {

nAdCornerOriginY -= menubarheight

menulayer[i].moveTo(0, nAdCornerOriginY)

}

for (var i=0; i<menubarsum; i++) {

if (menuIconWidth[i] > document.body.clientWidth) {

iconlayer[i].setWidth(menuIconWidth[i])

iconX[i] = (document.body.clientWidth-menuIconWidth[i])/2

} else {

iconlayer[i].setWidth(document.body.clientWidth)

iconX[i] = 0

}

iconlayer[i].moveX(iconX[i], menubarheight)

}





menuscrollbar()

}





function menuscrollbar() {

iconareaheight = document.body.clientHeight-menubarheight*(menubarsum);

iconrightpos = document.body.clientWidth-16-4;

maxscroll = menuIconHeight[menuchoose] - iconareaheight







if (maxscroll > 0) {

if (menuscroll > 0) {

uplayer[menuchoose].moveTo(iconrightpos, menubarheight+4)

} else {

uplayer[menuchoose].moveTo(-20, 0)

}

if (menuscroll < maxscroll) {

downlayer[menuchoose].moveTo(iconrightpos, iconareaheight+2)

} else {

downlayer[menuchoose].moveTo(-20, 0)

}

} else {

if (menuscroll <= 0)

uplayer[menuchoose].moveTo(-20, 0)

downlayer[menuchoose].moveTo(-20, 0)

}

}





function menuscrollup() {

if (menuscroll > 0) {

scrolling = true

menuscroll -= scrollinc

iconlayer[menuchoose].moveTo(iconX[menuchoose], menubarheight-menuscroll)



scrollTimerID = setTimeout("menuscrollup()", scrollspeed)

} else {

menuscrollstop()

}

menuscrollbar()



}




function menuscrolldown() {

if (menuscroll < maxscroll) {

scrolling = true

menuscroll += scrollinc

if (menuscroll < maxscroll) {

iconlayer[menuchoose].moveTo(iconX[menuchoose], menubarheight-menuscroll)

} else {

iconlayer[menuchoose].moveTo(iconX[menuchoose], menubarheight-maxscroll)

}



scrollTimerID = setTimeout("menuscrolldown()", scrollspeed)

} else {

menuscrollstop()

}



menuscrollbar()



}



function menuscrollstop() {

scrolling = false

if (scrollTimerID) {

clearTimeout(scrollTimerID)

scrollTimerID = 0;

}
}
//-->
</script>
rainxiang 2004-09-30
  • 打赏
  • 举报
回复
up
xgtqr123 2004-09-30
  • 打赏
  • 举报
回复
谢谢 BlueDestiny(紫 蓝) 但是我是说的OA那里面的那个下拉菜单。
lonelydreamsym 2004-09-30
  • 打赏
  • 举报
回复
给个下多好,那么长,不方便呀
BlueDestiny 2004-09-29
  • 打赏
  • 举报
回复
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>无标题文档</title>
</head>

<body>
脚本说明:
把如下代码加入<body>区域中
<STYLE type=text/css>
.sec1 {
BORDER-RIGHT: gray 1px solid; BORDER-TOP: #ffffff 1px solid; BORDER-LEFT: #ffffff 1px solid; CURSOR: hand; COLOR: #000000; BORDER-BOTTOM: #ffffff 1px solid; BACKGROUND-COLOR: #eeeeee
}
.sec2 {
BORDER-RIGHT: gray 1px solid; BORDER-TOP: #ffffff 1px solid; FONT-WEIGHT: bold; BORDER-LEFT: #ffffff 1px solid; CURSOR: hand; COLOR: #000000; BACKGROUND-COLOR: #d4d0c8
}
.main_tab {
BORDER-RIGHT: gray 1px solid; BORDER-LEFT: #ffffff 1px solid; COLOR: #000000; BORDER-BOTTOM: gray 1px solid; BACKGROUND-COLOR: #d4d0c8
}
</STYLE>
<!--JavaScript部分-->
<SCRIPT language=javascript>
function secBoard(n)
{
for(i=0;i<secTable.cells.length;i++)
secTable.cells[i].className="sec1";
secTable.cells[n].className="sec2";
for(i=0;i<mainTable.tBodies.length;i++)
mainTable.tBodies[i].style.display="none";
mainTable.tBodies[n].style.display="block";
}
</SCRIPT>
<!--HTML部分-->
<TABLE id=secTable cellSpacing=0 cellPadding=0 width=549 border=0>
<TBODY>
<TR align=middle height=20>
<TD class=sec2 onclick=secBoard(0) width="10%">标题1</TD>
<TD class=sec1 onclick=secBoard(1) width="10%">标题2</TD>
<TD class=sec1 onclick=secBoard(2) width="10%">标题3</TD>
<TD class=sec1 onclick=secBoard(3) width="10%">标题4</TD>
</TR>
</TBODY>
</TABLE>

<TABLE class=main_tab id=mainTable height=240 cellSpacing=0 cellPadding=0 width=549 border=0>

<TBODY style="DISPLAY: block"><!--内容1-->
<TR>
<TD vAlign=top align=middle>
<TABLE cellSpacing=0 cellPadding=0 width=490 border=0>
<TBODY>
<TR>
<TD><BR>内容1<BR></TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
</TBODY>

<TBODY style="DISPLAY: none"><!--内容2-->
<TR>
<TD vAlign=top align=middle>
<TABLE cellSpacing=0 cellPadding=0 width=490 border=0>
<TBODY>
<TR>
<TD><BR>内容2<BR></TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
</TBODY>

<TBODY style="DISPLAY: none"><!--内容3-->
<TR>
<TD vAlign=top align=middle>
<TABLE cellSpacing=0 cellPadding=0 width=490 border=0>
<TBODY>
<TR>
<TD><BR>内容3<BR></TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
</TBODY>

<TBODY style="DISPLAY: none"><!--内容4-->
<TR>
<TD vAlign=top align=middle>
<TABLE cellSpacing=0 cellPadding=0 width=490 border=0>
<TBODY>
<TR>
<TD><BR>内容4<BR></TD>
</TR>
</TBODY>
</TABLE>
</TD>
</TR>
</TBODY>

</TABLE>
<script language="JavaScript" type="text/JavaScript">
var str = "1233-4567890-123"
var re = /^\d{4}-\d{7}-\d{3}$/;
if (re.test(str))
alert("good!");
else
alert("bad!");
</script>

</body>
</html>
BlueDestiny 2004-09-29
  • 打赏
  • 举报
回复
<body bgcolor=buttonface scroll=no topmargin=5>


<style type="text/css">
div,td{cursor:default;font-family:宋体;font-size:9pt;}
</style>
<script language=javascript>
function TableOK(){
var dotable,tmpcol,tmprow,docol,dorow
if(tba[0].checked){algn="left";}
if(tba[1].checked){algn="center";}
if(tba[2].checked){algn="right";}
tmpcol="<td align="+algn+"></td>";
docol=""
dorow=""
for ( var i=0; i<tbc.value; i++ ){
docol=docol+tmpcol;
}
docol="<tr>"+docol+"</tr>"
for ( var j=0; j<tbr.value; j++ ){
dorow=dorow+docol;
}
dotable="<table border="+tbb.value+" cellspacing="+tbs.value+" cellpadding="+tbp.value+">"+dorow+"</table>"
alert(dotable);
}
</script>
<script language=VBScript>
Sub TabStrip_Change()
if (TabStrip.Value = 0) then
Page1.style.visibility = "hidden"
Page0.style.visibility = "visible"
end if
if (TabStrip.Value = 1) then
Page0.style.visibility = "hidden"
Page1.style.visibility = "visible"
end if
end sub
</script>

<center>
<object id="TabStrip" classid="clsid:eae50eb0-4a62-11ce-bed6-00aa00611080" style="WIDTH: 285px; HEIGHT: 150px" >
<param name="ListIndex" value="0">
<param name="NewVersion" value="-1">
<param name="Accelerator" value="&A;B;">
<param name="TipStrings" value="这是一般设定;这是高级设定;">
<param name="FontName" value="宋体">
<param name="Items" value="一般设定;高级设定;">
</object>
<div id="Page0" style="visibility:visible;position:absolute;left:expression((TabStrip.offsetLeft + 6) + 'px');top:expression((TabStrip.offsetTop + 30) + 'px');width:280px;height:200px;text-align:left;">
<table border=0 cellpadding=0 cellspacing=2>
<tr><td>边框粗细:</td><td><input type=text name=tbb size=20 value="1" maxlength=2 onKeypress="if (event.keyCode < 45 || event.keyCode > 57) event.returnValue = false;" class=hole></td><td>px</td></tr>
<tr><td>表格行数:</td><td><input type=text name=tbc size=20 value="2" maxlength=2 onKeypress="if (event.keyCode < 45 || event.keyCode > 57) event.returnValue = false;" class=hole></td><td>行</td></tr>
<tr><td>表格列数:</td><td><input type=text name=tbr size=20 value="2" maxlength=2 onKeypress="if (event.keyCode < 45 || event.keyCode > 57) event.returnValue = false;" class=hole></td><td>列</td></tr>
</table>
</div>
<div id="Page1" style="visibility:hidden;position:absolute;left:expression((TabStrip.offsetLeft + 6) + 'px');top:expression((TabStrip.offsetTop + 30) + 'px');width:280px;height:200px;text-align:left;">
<table border=0 cellpadding=0 cellspacing=2>
<tr><td>边框间距:</td><td><input type=text name=tbs size=16 maxlength=2 value="2" onKeypress="if (event.keyCode < 45 || event.keyCode > 57) event.returnValue = false;" class=hole></td><td width=85>px</td></tr>
<tr><td>边距大小:</td><td><input type=text name=tbp size=16 maxlength=2 value="2" onKeypress="if (event.keyCode < 45 || event.keyCode > 57) event.returnValue = false;" class=hole></td><td>px</td></tr>
<tr><td>对齐方式:</td><td colspan=2><input type=radio name=tba checked>左<input type=radio name=tba>中<input type=radio name=tba>右</td></tr>
</table>
</div>
<div align="center" style="position:absolute;left:expression((TabStrip.offsetLeft + 6) + 'px');top:expression((TabStrip.offsetTop + TabStrip.style.posHeight - 30) + 'px');width:280px;height:80px;" align="center">
<table border=0 cellpadding=0 cellspacing=0>
<tr>
<td width=50 align=center><input type=button onclick="window.close();" value="取消" class=cmdbtn></td>
<td width=50 align=center><input type=button onclick="TableOK();" value="完成" class=cmdbtn></td>
</tr></table>
</div>
</center>
<script>
window.setTimeout('TabStrip.blur()',100);
</script>
<div style="width:100%;padding:10px" align="center">
<object id="menutabs" name="menutabs" classid="clsid:EAE50EB0-4A62-11CE-BED6-00AA00611080" align="baseline" border="0"
width="533"
height="313">
<param name="ListIndex" value="0">
<param name="ForeColor" value="4210816">
<param name="Size" value="14111;8290">
<param name="Items" value="Main;Links;Topics;Help;">
<param name="TabOrientation" value="2">
<param name="MultiRow" value="-1">
<param name="TipStrings" value="8888;;;;">
<param name="Names" value="Main;Links;Topics;Help;">
<param name="NewVersion" value="-1">
<param name="TabsAllocated" value="4">
<param name="Tags" value=";;;;">
<param name="TabData" value="4">
<param name="Accelerator" value=";;;;">
<param name="FontName" value="Arial">
<param name="FontEffects" value="1073741825">
<param name="FontCharSet" value="0">
<param name="FontPitchAndFamily" value="2">
<param name="FontWeight" value="700">
<param name="TabState" value="3;3;3;3">
</object>
</div>
</body>
</html>
tpf9000 2004-09-29
  • 打赏
  • 举报
回复
8错,顶一下
caojinrong 2004-09-29
  • 打赏
  • 举报
回复
1

28,404

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧