一.页面设计部分 
1.img控件 
alt:所有展示类图片都要具有能简要描述图片内容的文字说明。 
2.Input控件 
maxlength:所有INPUT控件都需要制定maxlength属性,默认值为数据库中对应的字段的长度。 
readonly:所有不可更改的信息都要使用readonly属性。 
3.Form控件 
action:所有Form都要指定action,如果提交给本身就指定action="" 
method:执行不可逆动作使用POST,可逆动作使用GET 
onsubmit:所有form都要指定提交前需要的检查程序。 
所有form都要有对应的reset button。 
4.button控件 
onclick:form中用于提交的button不容许使用此方法,所有数据检查通过form的onsubmit激活。 
5.title属性 
所有页面都要具有和本页标题相同的title。 
6.控件的命名 
采用控件类型缩写(小写)+英文单词(第一个字母大写)的方法。 
开发中控件基本涉及一下几类 
button:btn 
form:frm 
select:sel 
textarea:txt 
input:ipt 
7.语言设置 
所有中文页面都要加上如下语句: 
 
 
8.控件属性赋值 
所有控件的属性值都要使用双引号或者单引号包括起来。 

二.客户端程序部分 
1.错误提示信息的处理(2-1) 
所有错误信息全部使用中文提示错误信息,标点使用中文半角符号,格式如下: 
"错误:"+提示信息+"!" 
2.成功提示信息的处理(2-2) 
所有成功信息全部使用中文提示成功信息,标点使用中文半角符号,格式如下: 
"成功:"+提示信息+"!" 
3.页面的返回 
所有需要返回上一页的时候使用history.back();不使用history.go(-1); 
需要返回前n页(n>1)时使用history.go(-n); 
所有返回都使用连接的方式而不是button。 
4.提交前数据的判断 
保证提交前的数据都会通过JavaScript进行数据类型以及长度的判断 
是否为数字:使用函数isNaN() 
长度判断: 长度要判断去掉前后空格后的实际长度 
为空判断: 所有不容许为空的输入字段都要在去掉前后空格后进行判断,同时如果该字段为查询条件则必须不能为空 
如果判断条件发现数据错误,则通过(2-1)提示错误信息,然后通过方法focus()聚焦错误字段。 
5.删除数据前的提示 
所有涉及删除的操作,在用户选定以后都要再进行一次确认操作。 

三.服务器端程序部分 
1.数据的取得 
通过Get,Post,连接传递过来的数据在使用前都要通过trim去掉数据前后的空格。 
2.数据的判断 
通过request的得到的参数数据需要再次进行空,类型,和长度的判断。 
3.对象的关闭 
所有数据库和文件对象都要在使用后尽可能早的close,同时赋nothing。 
4.提示信息 
所有错误提示信息使用JavaScript提示,保证使用者看不到任何内部错误信息。(如1-1) 
涉及数据库Update,Del,Insert的操作成功都要提示。(如1-2) 
5.变量的使用 
所有变量在使用前都需要声明,并且赋初值。 
6.变量的命名 
采用变量类型缩写(小写)+英文单词(第一个字母大写)的方法。 
开发中变量基本涉及一下几类 
整数:i 
小数:f 
字符: s 
布尔:b 
日期:d 
特殊的: 
循环依次采用i,j,m,n; 
数组用ary 
指针p,q 
临时变量tmp 

七.SQL语句 
1.排序 
order时应该尽量提前使用建立索引或者主键的字段排序。 
2.select 
select时避免使用*,即使需要所有字段也应尽量一个一个按照使用的顺序罗列出来。 
3.尽量避免使用in和not in 


八.测试 
所有页面要在800*600,1024*768两种分辨率下运行通过。 
所有页面要在IE5.0,5.5以及6.0下运行通过没有JavaScript错误。 

**************************************************************** 

WEB编码规范 
编制人:walaqi 

第一章 ASP编码规范通述 
  ASP编码分为两大部分,一部分为静态文件编码,一部分为包含服务器端脚本的动态文件编码。 
  静态文件编码分Script编码和HTML编码两部分。 
  服务器端编码则分为服务器脚本、客户端脚本、HTML脚本三部分。 
  编码规范采用如下约定: 
   所有客户端脚本一律使用JavaScript 
   所有服务器端脚本一律使用VBScript 
   静态页面输出一律使用HTML脚本 
  本规范不适用于由服务器端脚本所产生的客户端脚本代码。 

第二章 静态文件编码规范: 
  静态文件脚本部分采用JavaScript编写。输出部分采用HTML标记语言。 
1. HTML标记语言编码规范 
1.1 标记的换行规范: 
* 一个标记必须占用一行。不得出现两个标记在同一行的情况(同一标记的关闭标记除外),如: 
text 
而必须写成: 
 
text 
    
1.2 标记的关闭规范 
* 静态文件内容必须包含在标记中间 
* 标记必须包含在标记中间 
* 对于需要关闭的标记,如: 
  <body><table><tr><td><p><textarea><select><font><option><div><span>  <BR>  必须同其关闭标记同时出现。如  <BR>  <body>…<p>…<font>….</font>….</p>…..</body>  <BR>* 不得出现交叉包含的语句,如:  <BR><p><font>…..</p></font>  <BR>1.3 标记的属性赋值规范  <BR>  对于接受属性的标记,属性值必须使用双引号或者单引号包围。如:  <BR>  <body bgcolor=”red”>  <BR>  <font size=’7’>  <BR>1.4 标记的缩进规范  <BR>* 最高一级的父标记采用左对齐顶格方式书写。  <BR>* 下一级标记采用左对齐向右缩进一个Tab的方式书写  <BR>  在下一级依此类推,分别左对齐相对于父标记向右缩进一个Tab的方式书写  <BR>* 同一级标记的首字符上下必须对齐。  <BR>2. 客户端JavaScript规范  <BR>2.1 变量命名规范  <BR>* 常量以及全局变量名必须全部使用大写字母  <BR>* 变量名首字母必须小写。  <BR>* 变量名必须使用其类型的所写字符串开始。各种类型的所写字符串如下:  <BR>* 整型变量:int  <BR>* 长整型变量:lng  <BR>* 浮点型变量:flt  <BR>* 双精度变量:dbl  <BR>* 对象引用变量:obj  <BR>* 字符串变量:str  <BR>* Date类型变量:dtm  <BR>* 变量名必须采用有意义的单词命名,如:  <BR>strUserName、lngArrayIndex  <BR>* 变量名除首字母小写外,其他单词首字符必须大写  <BR>* 如果变量名过长可以使用单词缩写,除了被广泛了解的单词缩写以外,所有使用单词所写的变量名必须在定义时给出注释,如:  <BR>var strAdName //用于表示Administrator帐户的名称  <BR>var strAdminName //不用给出注释,Admin被广泛了解  <BR>2.2 变量使用规范  <BR>* 变量使用前必须定义。没有定义的变量禁止使用  <BR>* 变量的使用尽量缩小到小的作用域。如循环使用  <BR>for(var I=0;I<12;I++){  </p> <P>}  <BR>而不是:  <BR>var I;  <BR>for(I=0;I<12,I++){  </p> <P>}  <BR>2.3 对象命名规范  <BR>各种页面对象如text输入框、按钮、下拉选择框在命名时必须使用以下对应前缀:  <BR>* text输入框:txt  <BR>* button按钮:btn  <BR>* select下拉选择框:sel  <BR>* option项:opt  <BR>* form表单:frm  <BR>* frame框架:fra  <BR>* hidden表单项:hdn  <BR>* div标记:div  <BR>* span标记:span  <BR>* 对话框对象:dlg  <BR>* 窗口对象:win  <BR>2.4 函数以及子过程命名规范  <BR>* 函数命名必须使用动词+名词对的方式,并且能够体现函数的功能  <BR>* 函数命名的动词前缀必须是同函数功能相关的完整动词  <BR>* 函数命名第一个单词的首字母小写,后面每一个单词的首字母大写  <BR><BR><SPAN style="COLOR: red">第三章 动态文件编码规范</span>  <BR>1. HTML书写规范  <BR>  HTML书写规范必须符合静态文件HTML标记书写规范,参考(第二章第一节)  <BR>2. 客户端脚本规范  <BR>  动态文件客户端脚本一律采用JavaScript书写,并必须符合静态文件编码规范中有关JavaScript编码规范的规定(参考第二章第二节)  <BR>3. 服务器端脚本书写规范  <BR>  服务器端脚本书写采用VBScript书写  <BR>3.1 命名规范  <BR>3.1.1 VBScript脚本变量命名规范  <BR>* 常量以及全局变量必须全部使用大写字母  <BR>* 常量必须使用CONST_前缀  <BR>* 全局变量必须使用G_前缀  <BR>* 变量名首字母必须小写。  <BR>* 变量名必须使用其类型的所写字符串开始。各种类型的所写字符串如下:  <BR>* 整型变量:int  <BR>* 长整型变量:lng  <BR>* 浮点型变量:flt  <BR>* 双精度变量:dbl  <BR>* 对象引用变量:obj  <BR>* 字符串变量:str  <BR>* Date类型变量:dtm  <BR>* 变量名必须采用有意义的单词命名,如:  <BR>strUserName、lngArrayIndex  <BR>* 变量名除首字母小写外,其他单词首字符必须大写  <BR>* 如果变量名过长可以使用单词缩写,除了被广泛了解的单词缩写以外,所有使用单词所写的变量名必须在定义时给出注释,如:  <BR>dim strAdName ‘用于表示Administrator帐户的名称  <BR>dim strAdminName ‘不用给出注释,Admin被广泛了解  <BR>    <BR>3.1.2 对象命名规范  <BR>各种对象如Connection、Recordset、Command在命名时必须使用以下对应前缀:  <BR>* Connection对象:conn  <BR>* Recordset对象:rs  <BR>* Command对象:cmd  <BR>* Parameter对象:param  <BR>* Field对象:fld  <BR>* Error对象:err  <BR>3.1.3 函数以及子过程命名规范  <BR>* 函数命名必须使用动词+名词对的方式,并且能够体现函数的功能  <BR>* 函数命名的动词前缀必须是同函数功能相关的完整动词  <BR>* 函数命名第一个单词的首字母大写,后面每一个单词的首字母大写  <BR>3.1.4 常用变量命名规范:  <BR>  说明:包含在[]中的部分为可省略部分  <BR>* Connection对象:conn[Name]。Name为所连接数据库的服务器名字  <BR>* Recordset变量命名规范:rs[Name]。Name为自定义的同rs存储内容有关的英文单词组合  <BR>* Command对象:cmd[Name]。Name为自定义的同command目的有关的英文单词组合  <BR>* SQL语句字符串变量:strSql[CommandName]。CommandName为自定义的同Sql语句功能相关的英文单词组合,如:  <BR>strSqlUpdateModify  <BR>strSqlInsertUser  <BR>3.2 代码书写规范  <BR>3.2.1 变量明确声明原则  <BR>* 所有ASP程序文件,必须在代码的第一行包含<%option explicit%>。转为变量明确声明模式  <BR>3.2.2 字符集设定原则  <BR>* 所有将对客户端产生中文输出的ASP程序文件,必须在输出前设定Charset为”GB2312”.如:Response.Charset = “GB2312”  <BR>3.2.3 函数使用原则  <BR>* 尽量使用函数封装代码块  <BR>* 连续代码块尽量不要超过50行。最多不得超过70行  <BR>* 尽量使用局部变量。  <BR>* 如有涉及到全局的资源,如Connection,尽量作为函数的参数传入  <BR>* 所有在函数内部创建打开的资源,在退出函数前必须关闭释放。如:Recordset,Command  <BR>3.2.4 Request、Session、Application使用规范  <BR>* 所有需要放入Session、Application中的对象,必须采用有意义的英文名字。除了被广泛了解的单词缩写以外,不得采用单词缩写。如:  <BR>Session(“cp”) = strCurrentUserIP ‘不允许  <BR>Session(“CurrentUserIP”) = strCurrentUserIP  <BR>Session(“Pwd”) = strPwd ‘允许,Pwd被广泛了解为密码  <BR>* 所有需要在代码内用到的Request、Session、Application中的元素,必须在代码头部赋值给代码内声明的变量。  <BR>* 如果获得Form中提交的内容,必须使用Request.Form(“itemName”).  <BR>* 如果获得QueryString中提交的内容,必须使用Request.QueryString(“itemName”)  <BR>* 不得在代码中出现Request(“”)这样的引用方式  <BR>3.2.5 HTML同服务器端脚本混合使用原则  <BR>* 服务器端脚本标记“<%”必须同其上一行紧邻的标记左对齐,如:  <BR><table>  <BR><%  <BR>do while not rs.eof  <BR>%>  <BR><tr>  <BR><td>text</td>  <BR></tr>  <BR><%  <BR>rs.movenext  <BR>loop  <BR>%>  <BR></table>  <BR>* 服务器端脚本标记“<%”同其后的代码不得在同一行书写  <BR>* “%>”同其前面的代码不得在同一行书写  <BR>* 服务器端脚本标记”%>”同其最近的”<%”标记对齐  <BR>* 服务器端内部的HTML代码依据静态文件的HTML缩进规则编写,不遵循服务器端脚本缩进规则  <BR>* HTML标记内部的代码,依据服务器端脚本的缩进规则,不遵循HTML代码缩进规则  </p> <P><SPAN style="COLOR: red">第四章 常见错误</span>  <BR>1. ADO的事务处理  <BR>1.1 错误代码:80004005。  <BR>1.1.1 错误描述:  <BR>  Microsoft OLE DB Provider for ODBC Drivers 错误 ’80004005’  <BR>  不能在 firehose 方式下启动事务  <BR>1.1.2 解决方法:  <BR>  在开始ADO的事务的时候,必须首先关闭使用同一个连接对象打开的记录集,或者在打开那些游标集之前,设置游标集位置类型为adUseClient.(使用客户端游标集)  <BR>    <BR><SPAN style="COLOR: red">第五章 代码习惯书写示例</span>  <BR>1. ADO对象的使用  <BR>1.1 ADODB.Connection对象  <BR>1.2 ADODB.Command对象  <BR>1.3 ADODB.Recordset对象  <BR>1.3.1 创建:  <BR>  Set rs = Server.CreateObject(“ADODB.Recordset”)  <BR>  rs.CursorLocation = adUseClient  <BR>  rs.Open strSql,conn,1[,1] ‘必须指定游标类型  </p> <P><SPAN style="COLOR: #0000ff">一、 注释规范</span>  <BR>A. 注释标准:  <BR>l 功能注释  <BR>功能注释是指为了对代码本身进行解释说明而进行的注释。  <BR>注释符采用“’”作为统一的注释符。  <BR>1.行内注释  <BR>采用注释符号 “’”  <BR>例:  <BR>Dim intFileNo As Integer ’ファイル番号取得用  <BR>2.整行(包括多行)注释  <BR>采用注释块开始与块结束标志  <BR>36  </p> <P>’************************************  <BR>’  <BR>’  <BR>’  <BR>’************************************  <BR>l 修订注释  <BR>修订注释是指出于测试或者改错等目的,对代码进行了更改,而必须对此修改提供相关说明和醒目标记,并将原来的代码加入注释块内。  <BR>只要有改动,无论单行还是多行均采用设置注释块开始与块结束标志的方法来明确标志修改部分,清楚地进行解释说明,便于查找和分辨注释比较多的代码段。  <BR>15 15  </p> <P>’*************** Modify Start ***************  <BR>’  <BR>’  <BR>’  </p> <P>’*************** End ***************  <BR>B. 需要注释的地方:  <BR>声明定义部分  <BR>对每个常量声明进行注释;  <BR>对每个变量及类、对象等的声明进行注释;  <BR>对每个自定义函数定义进行注释;  <BR>对每个自定义子程序定义进行注释;  <BR>代码部分  <BR>对每个构件,在顶部进行注释;  <BR>对每个条件选择分支进行注释;  <BR>对每个详细设计中提到的关键点进行注释;  <BR>对全局变量的使用进行注释;  </p> <P>C. 注释的内容:  <BR>l 对变量及常量声明部分的注释以行内注释方式简要描述其用途。  </p> <P>l 自定义函数及子程序等定义部分的顶部进行注释:  <BR>’************************************  <BR>’ 概要:  <BR>’ 机能说明:  <BR>’ 参数说明:  <BR>’ 返回值:  <BR>’ 备注:  <BR>’************************************  </p> <P>l 代码内部的行内注释  <BR>说明具体代码的运算规则,循环的内容,计数器的目的等等。  </p> <P>l 修订注释  <BR>’*************** Modify Start ***************  <BR>’ 修订原因:  <BR>’ 修订履历:  <BR>’ 修订者 修订日期  <BR>’ 原始代码:  <BR>’ Case 5 To 8  <BR>’ ……  <BR>Case 4 To 8  <BR>’*************** End ***************  </p> <P>D. 注释的方法:  <BR>对代码行可以在行尾加注释(不能违反行宽的要求);  <BR>对单行代码的注释可以在上一行以“’”的形式添加简单注释;  <BR>对整段代码的注释放在代码段之前;  <BR>注释符统一采用“’”。  </p> <P></p> <P><SPAN style="COLOR: #0000ff">二、命名规范</span>  <BR>A.通则  <BR>VisualBasic保留字可在VisualBasic设计器中根据颜色的变化看到。变量命名不可以使用保留字,应使用有意义的名字命名,不可使用简称和无意义的名称诸如A,x1等。即便对于只用于循环计数的变量,也应该统一赋予有意义的名称,例如longCnt等。  <BR>不能起太长的名字,应该尽量简洁,长度限制应控制在32个字符之内。  </p> <P>B.常数  <BR>全部使用大写字母以表明常数意义的名词命名,不区分常数的类型:  <BR>Const DEFAULTCONCENTRATION As Single = 0.01  </p> <P>C.变量  <BR>命名必须使用大小写结合(VB编辑器会自动转换以减少程序出错的机率)  <BR>变量命名采用[范围前缀][数组前缀][类型前缀]+[自定义命名]  <BR>控件命名采用[控件前缀]+[自定义命名]  </p> <P>变量范围做前缀  <BR>范围 前缀 例子  <BR>全局变量 g gStrUserName  <BR>模块级 m mStrUserName  <BR>过程级 无 StrUserName  <BR>数组前缀: a  <BR>类型前缀:  <BR>数据类型 前缀 例子  <BR>Boolean Bln BlnFound  <BR>Byte Byt BytRasterDate  <BR>Currency Cur CurBalance  <BR>Date Dtm DtmBeginDate  <BR>Double Dbl DblFee  <BR>Integer Int IntQty  <BR>Long Lng LngVcID  <BR>Single Sng SngAverage  <BR>String Str StrItemId  <BR>Object Obj ObjRmtsvr  <BR>ADODB.Recordset Rst RstItem  <BR>ADODB.Connection Cnn cnnNewsPaper  <BR>ADODB.Command Cmm CmmAddCustomer  <BR>Variant Vnt VntCheck  <BR>自定义类型 Udt UdtUserInfo  <BR>控件类型命名前缀  <BR>控件类型 前缀 例子  <BR>ADO Data ado AdoBiblio  <BR>Check box chk ChkReadOnly  <BR>Combo box, drop-down list box cbo CboEnglish  <BR>Command button cmd CmdExit  <BR>Common dialog dlg DlgFileOpen  <BR>Data-bound combo box dbcbo DbcboLanguage  <BR>Data-bound grid dbgrd DbgrdQueryResult  <BR>Data-bound list box dblst DblstJobType  <BR>Data combo dbc DbcAuthor  <BR>Data grid dgd DgdTitles  <BR>Data list dbl DblPublisher  <BR>Directory list box dir DirSource  <BR>Drive list box drv DrvTarget  <BR>File list box fil FilSource  <BR>Form frm FrmEntry  <BR>Frame fra FraLanguage  <BR>Graph gra GraRevenue  <BR>Grid grd GrdPrices  <BR>Horizontal scroll bar hsb HsbVolume  <BR>Image img ImgIcon  <BR>Image combo imgcbo ImgcboProduct  <BR>ImageList ils IlsAllIcons  <BR>Label lbl LblHelpMessage  <BR>Line lin LinVertical  <BR>List box lst LstPolicyCodes  <BR>ListView lvw LvwHeadings  <BR>Menu mnu MnuFileOpen  <BR>Month view mvw MvwPeriod  <BR>MS Chart ch ChSalesbyRegion  <BR>MS Flex grid msg MsgClients  <BR>MS Tab mst MstFirst  <BR>Option button opt OptGender  <BR>Picture box pic PicVGA  <BR>ProgressBar prg PrgLoadFile  <BR>Remote Data rd RdTitles  <BR>Slider sld SldScale  <BR>Spin spn SpnPages  <BR>StatusBar sta StaDateTime  <BR>SysInfo sys SysMonitor  <BR>TabStrip tab TabOptions  <BR>Text box txt TxtLastName  <BR>Timer tmr TmrAlarm  <BR>Toolbar tlb TlbActions  <BR>TreeView tre TreOrganization  <BR>UpDown upd UpdDirection  <BR>Vertical scroll bar vsb VsbRate  <BR>自行开发ActiveX控件的前缀根据具体项目的设计时规定。  </p> <P>D. 标签  <BR>标签就是用于Goto跳转的代码标识,由于Goto并不推荐使用,所以标签的使用也比较苛刻。标签必须全部大写,中间的空格用下划线_代替,而且应该以_开头,比如:  <BR>_A_LABEL_EXAMPLE:  <BR>如此定义标签是为了与其他代码元素充分区别。  </p> <P>E.方法  <BR>无论是函数还是子程序,方法都必须以动词或动词短语命名。无需区分函数和子程序,也无需指明返回类型。  <BR>Sub Open(ByVal StrCommandString As String)  <BR>Function SetCopyNumber(ByVal IntCopyNumber As Integer) as Integer  <BR>参数需要指明ByVal还是ByRef,这一点写起来会让程序变长,但非常必要。如果没有特别情况,都使用ByVal。参数的命名方法,参考 “变量的命名方法”。  </p> <P></p> <P><SPAN style="COLOR: #0000ff">三、 书写格式规范</span>  <BR>A. 程序的书写顺序  <BR>该构件的概要注释说明  <BR>变量声明  <BR>过程声明  <BR>代码段1  <BR>代码段2  <BR>……  <BR>B. 大小写  <BR>变量名范围前缀用小写,每个单词第一个字母用大写  <BR>函数、过程、对象名也要求每个组成单词字首大写  <BR>C. 缩进  <BR>统一开发环境,设定VisualBasic设计器的开发环境选项,定义Tab宽度为4。代码缩进时,先选中要缩进的代码块,然后使用快捷键是Tab(右移)和Shift+Tab(左移);如果手工输入空格完成缩进,以4个空格为单位。  <BR>在If语句后缩进;  <BR>在Else语句后缩进  <BR>在Select Case语句后缩进  <BR>在Case语句后缩进  <BR>在Do语句后缩进  <BR>在For语句后缩进  <BR>已经用行接续符分割的语句的各个行要缩进  <BR>在With语句后缩进。  <BR>对从属于行标注的代码进行缩进。  </p> <P>D. 空格  <BR>运算符前后都要空格,包括:+,-,*,/,^,=,>,>=,<,<=,<>,NOT,AND,OR等;  <BR>E. 空行  <BR>变量声明部分和代码语句间的分隔;  <BR>在执行统一任务的各个语句组之间插入一个空行。好的代码应由按逻辑顺序排列的进程或相关语句组构成。  <BR>F. 页宽  <BR>对较长语句,如API声明等,在代码窗体可视范围内给予换行,不要使别人必须通过滚动窗口才能查看到完整的代码,单行代码长度不超过95列。  <BR>使用“& _ ”换行符。  <BR>G. 其他  <BR>在项目组内部,根据需要统一VisualBasic开发环境参数。  </p> <P><SPAN style="COLOR: #0000ff">四、 代码检查</span>  <BR>代码检查的合格标准  <BR>注释完整、命名规范、条理清晰、可读性强的代码视为合格代码。  <BR>检查办法  <BR>发现未遵循本编码规范的情况视为不合格;  </p> <P><SPAN style="COLOR: #0000ff">五、 建议性规范</span>  <BR>l 有的时候可能需要违背好的编程原则,或者使用了某些不正规的方法,遇到这种情况时,必须用详细的注释来说明在做什么和为什么要这样做。  <BR>技巧性特别高的代码段,一定要加详细的注释,不要让其他开发人员花很长时间来研究一个高技巧但不易理解的程序段。  <BR>l 对注释进行缩进,使之与后随的语句对齐。  <BR>注释通常位于它们要说明的代码的前面。为了从视觉上突出注释与它的代码之间的关系,请将注释缩进,使之与代码处于同一个层次上  </p> <P><SPAN style="COLOR: #0000ff">六、 其他</span>  <BR>对文档的理解产生的歧义由引用此文档的项目的项目负责人统一解释  </p></span>

posted on 2005-05-16 22:11  wddavid  阅读(574)  评论(0)    收藏  举报