maxiaoshan 5 yıl önce
ebeveyn
işleme
5555829a13

+ 3 - 3
src/config.json

@@ -1,9 +1,9 @@
 {
     "port": "9090",
-    "mgodb": "192.168.3.207:27092",
-    "dbsize": 10,
+    "mgodb": "127.0.0.1:27092",
+    "dbsize": 2,
     "dbname": "extract_kf",
-    "redis": "buyer=192.168.3.205:6379,winner=192.168.3.205:6379,agency=192.168.3.205:6379",
+    "redis": "buyer=127.0.0.1:6379,winner=127.0.0.1:6379,agency=127.0.0.1:6379",
     "elasticsearch": "http://127.0.0.1:9800",
     "elasticsearch_index": "winner_enterprise",
     "elasticsearch_type": "winnerent",

+ 53 - 137
src/jy/admin/audit/rulemanager.go

@@ -7,7 +7,6 @@ import (
 	. "jy/mongodbutil"
 	ju "jy/util"
 	qu "qfw/util"
-	"regexp"
 	"strings"
 	"time"
 
@@ -25,53 +24,29 @@ func init() {
 	Admin.POST("/rulemanager/saverecogfield", SaveRecogField) //保存
 	Admin.POST("/rulemanager/delrecogfield", DelRecogField)   //删除
 	//class
-	Admin.GET("/rulemanager/getclasslist", func(c *gin.Context) {
-		fname := c.Query("fname")
-		fid := c.Query("id")
-		c.HTML(200, "audit_classlist.html", gin.H{"fname": fname, "fid": fid})
-	})
-	Admin.POST("/rulemanager/getclass", GetClass)           //获取分类
-	Admin.POST("/rulemanager/saveclass", SaveClass)         //保存
-	Admin.POST("/rulemanager/getauditfield", GetAuditField) //获取要审核的字段
-	Admin.POST("/rulemanager/delclass", DelClass)           //删除
-	//Admin.POST("/rulemanager/getclist", GetCList)           //获取父分类
+	//	Admin.GET("/rulemanager/getclasslist", func(c *gin.Context) {
+	//		fname := c.Query("fname")
+	//		fid := c.Query("id")
+	//		c.HTML(200, "audit_classlist.html", gin.H{"fname": fname, "fid": fid})
+	//	})
+	//	Admin.POST("/rulemanager/getclass", GetClass)           //获取分类
+	//	Admin.POST("/rulemanager/saveclass", SaveClass)         //保存
+	//	Admin.POST("/rulemanager/getauditfield", GetAuditField) //获取要审核的字段
+	//	Admin.POST("/rulemanager/delclass", DelClass)           //删除
+
 	//rule
 	Admin.GET("/rulemanager/getrulelist", func(c *gin.Context) {
-		cid := c.Query("id")
-		cname := c.Query("cname")
-		fid := c.Query("fid")
-		//		class, _ := Mgo.FindById("rc_class", cid, `{"_id":1,"s_name":1,"s_pid":1}`)
-		//		//级联查询,往上查
-		//		if class != nil && *class != nil {
-		//			pid := qu.ObjToString((*class)["s_pid"])
-		//			if pid != "" {
-		//				GetParent(pid, "rc_class", class)
-		//			}
-		//		}
-		rule, _ := Mgo.Find("rc_rule", `{"s_classid":"`+cid+`","delete":false}`, `{"i_order":1}`, nil, false, 0, 200)
-		//Finds := map[string]interface{}{}
-		data := map[string]interface{}{}
-		//		for _, r := range *rule {
-		//			rpid := qu.ObjToString(r["s_pid"])
-		//			if rpid != "" {
-		//				if Finds[rpid] != nil {
-		//					r["p"] = Finds[rpid]
-		//				} else {
-		//					GetParent(rpid, "rc_rule", &r)
-		//					Finds[rpid] = r["p"]
-		//				}
-		//			}
-		//		}
-		data["rule"] = rule
-		//data["class"] = class
-		c.HTML(200, "audit_rulelist.html", gin.H{"cid": cid, "cname": cname, "data": data, "fid": fid})
+		fid := c.Query("id")
+		fname := c.Query("fname")
+		c.HTML(200, "audit_rulelist.html", gin.H{"fname": fname, "fid": fid})
 	})
 	Admin.POST("/rulemanager/getrule", GetRule)   //获取规则
 	Admin.POST("/rulemanager/saverule", SaveRule) //保存规则
-	//	Admin.POST("/rulemanager/getrlist", GetRList)       //获取父分类中的所有规则
-	Admin.POST("/rulemanager/delrule", DelRule)         //删除
-	Admin.POST("/rulemanager/shift", Shift)             //移动
-	Admin.POST("/rulemanager/runruletest", RunRuleTest) //规则测试
+	Admin.POST("/rulemanager/delrule", DelRule)   //删除
+	//	Admin.POST("/rulemanager/shift", Shift)             //移动
+	//	Admin.POST("/rulemanager/runruletest", RunRuleTest) //规则测试
+
+	Admin.POST("/rulemanager/ruleuse", RuleUse) //是否适用
 
 }
 func GetRecogField(c *gin.Context) {
@@ -202,58 +177,46 @@ func GetOrder(sel string) int {
 }
 
 func GetRule(c *gin.Context) {
-	cid, _ := c.GetPostForm("cid")
-	data, _ := Mgo.Find("rc_rule", `{"s_classid":"`+cid+`","delete":false}`, `{"i_order":1}`, nil, false, -1, -1)
+	fid, _ := c.GetPostForm("fid")
+	rule_type, _ := c.GetPostForm("rule_type")
+	start := c.GetInt("start")
+	limit := c.GetInt("length")
+	query := map[string]interface{}{
+		"s_fid":  fid,
+		"delete": false,
+	}
+	if rule_type != "-1" {
+		query["s_type"] = rule_type
+	}
+
+	data, _ := Mgo.Find("rc_rule", query, `{"_id":1}`, nil, false, start, limit)
+	count := Mgo.Count("rc_rule", query)
 	for _, d := range *data {
 		timeStr := time.Unix(d["l_createtime"].(int64), 0).Format(Date_Short_Layout)
 		d["l_createtime"] = timeStr
 	}
-	c.JSON(200, gin.H{"data": data})
+	c.JSON(200, gin.H{"data": data, "recordsFiltered": count, "recordsTotal": count})
 }
 
 func SaveRule(c *gin.Context) {
 	data := GetPostForm(c)
 	_id, _ := c.GetPostForm("_id")
-	session := sessions.Default(c)
-	var s_ruleArr []string
-	rule, _ := c.GetPostForm("s_rule")
-	rule = regexp.MustCompile("\\n|\\s+").ReplaceAllString(rule, "")
-	s_rule := strings.Split(rule, "'")
-	for k, r := range s_rule {
-		if k%2 == 1 { //奇数为正则
-			r = "'" + r + "'" //为正则加上''
-			if r != "" {
-				s_ruleArr = append(s_ruleArr, r)
-			}
-		} else {
-			fr := strings.Split(r, ",")
-			for _, frs := range fr {
-				if frs != "" {
-					s_ruleArr = append(s_ruleArr, frs)
-				}
-			}
-		}
-	}
-	data["s_rule"] = s_ruleArr
-	if _id != "" {
-		Mgo.UpdateById("rc_rule", _id, map[string]interface{}{"$set": data})
-		c.JSON(200, gin.H{"rep": true})
+	b := false
+	if _id == "" {
+		data["l_createtime"] = time.Now().Unix()
+		data["s_username"] = sessions.Default(c).Get("username")
+		//data["i_order"] = GetOrder("rule")
+		data["delete"] = false
+		//code := ju.GetSyncIndex(E_CE)
+		//data["s_code"] = code
+		b = Mgo.Save("rc_rule", data) != ""
 	} else {
-		s_name, _ := c.GetPostForm("s_name")
-		s_classid, _ := c.GetPostForm("s_classid")
-		d, _ := Mgo.FindOne("rc_rule", `{"s_name":"`+s_name+`","s_classid":"`+s_classid+`","delete":false}`)
-		if len(*d) > 0 {
-			c.JSON(200, gin.H{"msg": "已存在!"})
-		} else {
-			data["l_createtime"] = time.Now().Unix()
-			//data["l_date"] = time.Now().Unix()
-			data["s_user"] = session.Get("username")
-			data["i_order"] = GetOrder("rule")
-			data["delete"] = false
-			Mgo.Save("rc_rule", data)
-			c.JSON(200, gin.H{"rep": true})
-		}
+		data["l_lasttime"] = time.Now().Unix()
+		b = Mgo.Update("rc_rule", `{"_id":"`+_id+`"}`, map[string]interface{}{
+			"$set": data,
+		}, true, false)
 	}
+	c.JSON(200, gin.H{"rep": b})
 }
 
 func DelRule(c *gin.Context) {
@@ -365,56 +328,9 @@ func DelRuleByClass(classid string) {
 	}, false, true)
 }
 
-//func GetCList(c *gin.Context) {
-//	nid := c.Query("nid")
-//	fname := c.Query("fname")
-//	query := map[string]interface{}{
-//		"delete": false,
-//	}
-//	if nid != "" {
-//		query = map[string]interface{}{
-//			"_id": map[string]interface{}{
-//				"$ne": qu.StringTOBsonId(nid),
-//			},
-//		}
-//	}
-//	if fname != "" {
-//		query = map[string]interface{}{
-//			"s_recogfield": map[string]interface{}{
-//				"$ne": fname,
-//			},
-//		}
-//	}
-//	class, _ := Mgo.Find("rc_class", query, nil, `{"s_name":1}`, false, 0, 200)
-//	c.JSON(200, gin.H{"data": class})
-//}
-
-//func GetRList(c *gin.Context) {
-//	cid := c.Query("id")
-//	if cid == "" {
-//		c.JSON(200, gin.H{"data": map[string]interface{}{}})
-//	} else {
-//		//先找类
-//		ids := strings.Split(cid, ",")
-//		ids2 := make([]string, len(ids))
-//		idsmap := []map[string]interface{}{}
-//		for n, val := range ids {
-//			idsmap = append(idsmap, map[string]interface{}{
-//				"_id": qu.StringTOBsonId(val),
-//			})
-//			ids2[n] = fmt.Sprintf(`{"s_classid":"%s"}`, val)
-//		}
-//		class, _ := Mgo.Find("rc_class", &map[string]interface{}{
-//			"$or": idsmap,
-//		}, nil, `{"s_name":1}`, false, 0, 10)
-//		rule, _ := Mgo.Find("rc_rule", fmt.Sprintf(`{"$or":[%s]}`, strings.Join(ids2, ",")), `{"i_order":1}`, `{"s_name":1,"s_code":1,"s_classid":1}`, false, 0, 200)
-//		for _, ru := range *rule {
-//			for _, c := range *class {
-//				if qu.BsonIdToSId(c["_id"]) == ru["s_classid"] {
-//					ru["s_name"] = fmt.Sprintf("%s[%s]", ru["s_name"], c["s_name"])
-//				}
-//			}
-//		}
-//		c.JSON(200, gin.H{"data": rule})
-//	}
-//}
+func RuleUse(c *gin.Context) {
+	_id, _ := c.GetPostForm("_id")
+	isuse, _ := c.GetPostForm("isuse")
+	b := Mgo.UpdateById("rc_rule", _id, `{"$set":{"isuse":`+isuse+`}}`)
+	c.JSON(200, gin.H{"rep": b})
+}

+ 31 - 5
src/jy/admin/rulecheck.go

@@ -31,6 +31,12 @@ func init() {
 		tmp := checkCoreReg(field, con, rule)
 		c.JSON(200, gin.H{"rep": tmp})
 	})
+	Admin.POST("/check/auditrule", func(c *gin.Context) {
+		rule, _ := c.GetPostForm("s_rule")
+		con, _ := c.GetPostForm("s_testcon")
+		tmp := checkAuditReg(con, rule)
+		c.JSON(200, gin.H{"rep": tmp})
+	})
 	Admin.POST("/check/backrule", func(c *gin.Context) {
 		rule, _ := c.GetPostForm("s_rule")
 		con, _ := c.GetPostForm("s_testcon")
@@ -304,10 +310,30 @@ func checkCoreReg(field, content, ruleText string) map[string]string {
 	return rep
 }
 
+func checkAuditReg(content, ruleText string) map[string]interface{} {
+	rep := map[string]interface{}{}
+	qu.Try(func() {
+		var pattern string
+		if strings.Contains(ruleText, "\\u") {
+			ruleText = strings.Replace(ruleText, "\\", "\\\\", -1)
+			ruleText = strings.Replace(ruleText, "\\\\u", "\\u", -1)
+			pattern, _ = strconv.Unquote(`"` + ruleText + `"`)
+		} else {
+			pattern = ruleText
+		}
+		log.Println("pattern", pattern)
+		reg := regexp.MustCompile(pattern)
+		rep[pattern] = reg.MatchString(content)
+	}, func(err interface{}) {
+		rep["err"] = fmt.Sprint(err)
+	})
+	return rep
+}
+
 //lua脚本前置过滤验证
 func checkPreScript(code, name, infoid, script string) map[string]interface{} {
 	doc, _ := Mgo.FindById("bidding", infoid, extract.Fields)
-	j, _,_ := extract.PreInfo(*doc)
+	j, _, _ := extract.PreInfo(*doc)
 	delete(*j.Data, "contenthtml")
 	lua := ju.LuaScript{Code: code, Name: name, Doc: *j.Data, Script: script}
 	lua.Block = j.Block
@@ -332,7 +358,7 @@ func checkBackScript(table, code, name, version, infoid, script string, alone bo
 	e.InitTag(false)
 	e.InitTag(true)
 	tmp, _ := Mgo.FindById("bidding", infoid, extract.Fields)
-	j, _,_ := extract.PreInfo(*tmp)
+	j, _, _ := extract.PreInfo(*tmp)
 	doc := *j.Data
 	//全局前置规则,结果覆盖doc属性
 	for _, v := range e.RulePres {
@@ -352,7 +378,7 @@ func checkBackScript(table, code, name, version, infoid, script string, alone bo
 					tmp = extract.ExtRegPre(tmp, j, v, e.TaskInfo)
 				}
 				//抽取-规则
-				extract.ExtRuleCore(tmp, e, vc, j,false)
+				extract.ExtRuleCore(tmp, e, vc, j, false)
 			}
 		}
 	} else {
@@ -368,7 +394,7 @@ func checkBackScript(table, code, name, version, infoid, script string, alone bo
 					tmp = extract.ExtRegPre(tmp, j, v, e.TaskInfo)
 				}
 				//抽取-规则
-				extract.ExtRuleCore(tmp, e, vc, j,false)
+				extract.ExtRuleCore(tmp, e, vc, j, false)
 			}
 		}
 	}
@@ -395,7 +421,7 @@ func checkBackScript(table, code, name, version, infoid, script string, alone bo
 //lua脚本抽取验证
 func checkCoreScript(code, name, infoid, script string) interface{} {
 	doc, _ := Mgo.FindById("bidding", infoid, extract.Fields)
-	j, _,_ := extract.PreInfo(*doc)
+	j, _, _ := extract.PreInfo(*doc)
 	delete(*j.Data, "contenthtml")
 	lua := ju.LuaScript{Code: code, Name: name, Doc: *j.Data, Script: script}
 	lua.Block = j.Block

+ 13 - 14
src/web/templates/admin/audit_recogfield.html

@@ -7,10 +7,10 @@
 <div class="content-wrapper" id="showbtn">
 	<section class="content-header">
 		<h1>
-			<small><a class="btn btn-primary opr" opr="new">新增识别字段</a></small>
+			<small><a class="btn btn-primary opr" opr="new">新增审核字段</a></small>
 		</h1>
 		<ol class="breadcrumb">
-		  <li><a href="/admin/audit/recogfield"><i class="fa fa-dashboard"></i> 识别字段</a></li>		  
+		  <li><a href="/admin/audit/recogfield"><i class="fa fa-dashboard"></i> 审核字段</a></li>		  
 		</ol>
     </section>
   <!-- Main content -->
@@ -22,11 +22,11 @@
 		            <table id="recogfieldTable" class="table table-bordered table-hover">
 		              <thead>
 		              <tr>
-		                <th>名称</th>
-						<th>识别字段</th>
-						<th>时间</th>
-						<th>创建人</th>
-						<th>操作</th>
+	                		<th>名称</th>
+					<th>审核字段</th>
+					<th>时间</th>
+					<th>创建人</th>
+					<th>操作</th>
 		              </tr>
 		              </thead>
 		            </table>
@@ -50,7 +50,7 @@ $(function () {
 		"searching"   : true,
 		"ordering"    : false,
 		"info"        : true,
-		"autoWidth"   : false,
+		"autoWidth"   : true,
 		"ajax": {
 			"url": "/admin/rulemanager/getrecogfield",
 			"type": "post",
@@ -64,10 +64,10 @@ $(function () {
 			{ "data": "s_recogfield"},
 			{ "data": "l_createtime"},
 			{ "data": "s_user"},
-			{ "data": "_id",render:function(val,a,row){
-				return '<a class="btn btn-sm btn-info opr" opr="edit">编辑</a>'+
-					'&nbsp;&nbsp;<a class="btn btn-sm btn-warning" href="/admin/rulemanager/getclasslist?id='+val+'&fname='+row["s_recogfield"]+'">编辑分类</a>'+
+			{ "data": "_id","width":"30%",render:function(val,a,row){
+				 return	 '<a class="btn btn-sm btn-info opr" opr="edit">编辑</a>'+
 					'&nbsp;&nbsp;<a class="btn btn-sm btn-success" href="/admin/audit/dataaudit?name='+row["s_recogfield"]+'">数据审核</a>'+
+					'&nbsp;&nbsp;<a class="btn btn-sm btn-warning" href="/admin/rulemanager/getrulelist?id='+val+'&fname='+row["s_recogfield"]+'">编辑规则</a>'+
 					'&nbsp;&nbsp;<a class="btn btn-sm btn-danger" onclick="del(\''+val+'\')">删除</a>'
 			}}
        	]
@@ -83,12 +83,11 @@ $(function () {
 			case "new":
 				tag=[
 					{label:"名称",s_label:"s_name",must:true},
-					{label:"识别字段",s_label:"s_recogfield",must:true},
-					{label:"前置过滤",s_label:"s_recogfield_prerule",type:"tpl_text"},
+					{label:"审核字段",s_label:"s_recogfield",must:true},
 					{s_label:"_id",type:"tpl_hidden"},
 				]
 				if(n == "new"){
-					_tit="新增识别字段";
+					_tit="新增审核字段";
 				}else{
 					_tit="编辑_"+obj.s_recogfield+"字段";
 					//tag[1]= {label:"识别字段",s_label:"s_recogfield",must:true,disabled:true}

+ 139 - 115
src/web/templates/admin/audit_rulelist.html

@@ -7,12 +7,11 @@
 <div class="content-wrapper" id="showbtn">
 	<section class="content-header">
 		<h1>
-			<small><a class="btn btn-primary opr" opr="new">新增{{.cname}}规则</a></small>
+			<small><a class="btn btn-primary opr" opr="new">新增{{.fname}}规则</a></small>
 		</h1>
 		<ol class="breadcrumb">
-			<li><a href="/admin/audit/recogfield"><i class="fa fa-dashboard"></i> 识别字段</a></li>
-			<li class="active"><a href="/admin/rulemanager/getclasslist?id={{.fid}}&fname={{.cname}}">分类列表</a></li>
-		  	<li class="active"><a href="/admin/rulemanager/getrulelist?id={{.cid}}&cname={{.cname}}&fid={{.fid}}">规则列表</a></li>
+			<li><a href="/admin/audit/recogfield"><i class="fa fa-dashboard"></i> 审核字段</a></li>
+		  	<li class="active"><a href="/admin/rulemanager/getrulelist?id={{.fid}}&fname={{.fname}}">规则列表</a></li>
 		</ol>
     </section>
   <!-- Main content -->
@@ -27,6 +26,9 @@
 		                <th>名称</th>
 						<th>时间</th>
 						<th>创建人</th>
+						<th>描述</th>
+						<th>类型</th>
+						<th>是否启用</th>
 						<th>操作</th>
 		              </tr>
 		              </thead>
@@ -44,8 +46,7 @@
 {{template "footer"}}
 <script>
 menuActive("recogfield")
-var cid = {{.cid}};
-var cname = {{.cname}};
+var fname = {{.fname}};
 var fid = {{.fid}};
 $(function () {
 	ttablerulemanager=$('#rulemanagerTable').DataTable({
@@ -54,101 +55,72 @@ $(function () {
 		"searching"   : true,
 		"ordering"    : false,
 		"info"        : true,
-		"autoWidth"   : false,
+		"autoWidth"   : true,
+		"serverSide": true,
 		"ajax": {
 			"url": "/admin/rulemanager/getrule",
 			"type": "post",
-			"data":{"cid":cid}
+			"data":{"fid":fid}
 		},
 		"language": {
             "url": "/res/dist/js/dataTables.chinese.lang"
         },
 		"columns": [
-            { "data": "s_name"},
+           		{ "data": "s_name"},
 			{ "data": "l_createtime"},
-			{ "data": "s_user"},
+			{ "data": "s_username"},
+			{ "data": "s_descript"},
+			{ "data": "s_type",render:function(val){
+				if(val=="0"){
+					return "正确";
+				}else if(val == "1"){
+					return "异常";
+				}
+			}},
+			{ "data": "isuse",render:function(val,a,row){
+				tmp=""
+				if(val){
+					tmp="<a href='#' title='停用' onclick='use(\""+row._id+"\",false)'><i class='fa fa-fw fa-circle text-green'></i></a>已启用"
+				}else{
+					tmp="<a href='#' title='启用' onclick='use(\""+row._id+"\",true)'><i class='fa fa-fw fa-circle text-red'></i></a>未启用"
+				}
+				return tmp
+			}},
 			{ "data": "_id",render:function(val,a,row,meta){
-				var udhtml = '&nbsp;&nbsp;<a class="btn btn-sm btn-success opr" opr="moveup" num="'+meta.row+'">上移</a>'+
+				/*var udhtml = '&nbsp;&nbsp;<a class="btn btn-sm btn-success opr" opr="moveup" num="'+meta.row+'">上移</a>'+
 					'&nbsp;&nbsp;<a class="btn btn-sm btn-success opr" opr="movedown" num="'+meta.row+'">下移</a>';
-				if({{.data.rule}}.length ==1){//一条数据
+				if(row.count ==1){//一条数据
 					udhtml = '&nbsp;&nbsp;<a class="btn btn-sm btn-success btn-default opr" opr="moveup" num="'+meta.row+'" disabled>上移</a>'+
 					'&nbsp;&nbsp;<a class="btn btn-sm btn-success btn-default opr" opr="movedown" num="'+meta.row+'" disabled>下移</a>';
 				}else if(meta.row == 0){//第一行
 					udhtml = '&nbsp;&nbsp;<a class="btn btn-sm btn-success btn-default opr" opr="moveup" num="'+meta.row+'" disabled>上移</a>'+
 					'&nbsp;&nbsp;<a class="btn btn-sm btn-success opr" opr="movedown" num="'+meta.row+'">下移</a>';
-				}else if(meta.row+1 == {{.data.rule}}.length){//最后一行
+				}else if(meta.row+1 == row.count){//最后一行
 					udhtml = '&nbsp;&nbsp;<a class="btn btn-sm btn-success opr" opr="moveup" num="'+meta.row+'">上移</a>'+
 					'&nbsp;&nbsp;<a class="btn btn-sm btn-success btn-default opr" opr="movedown" num="'+meta.row+'" disabled>下移</a>';
-				}
+				}*/
 				return '<a class="btn btn-sm btn-info opr" opr="edit" num="'+meta.row+'">编辑</a>'+
-					'&nbsp;&nbsp;<a class="btn btn-sm btn-warning opr" opr="ruletest" num="'+meta.row+'">测试</a>'+
-					'&nbsp;&nbsp;<a class="btn btn-sm btn-danger" onclick="del(\''+val+'\')">删除</a>'+udhtml
+					//'&nbsp;&nbsp;<a class="btn btn-sm btn-warning opr" opr="ruletest" num="'+meta.row+'">测试</a>'+
+					'&nbsp;&nbsp;<a class="btn btn-sm btn-danger" onclick="del(\''+val+'\')">删除</a>'
 					
 			}}
-       	]
+       	],
+		"fnServerParams": function (e) {  
+			var rule_type=$("#rule_type").val();
+			if(rule_type){
+				e.rule_type=rule_type;
+			}else{
+				e.rule_type="-1";
+			}
+      	}
 	});
 	ttablerulemanager.on('init.dt', function () {
 		$("#showbtn").on('click','a.opr',function(){
 			var n=$(this).attr("opr");
 			var rownum=parseInt($(this).attr("num"));
-			var tobj = {{.data.rule}}[rownum];//本行数据
+			//var tobj = {{.data.rule}}[rownum];//本行数据
 			var _tit="",htmlObj={},obj,tag=[];
-			var delid=$(this).attr("value");
-			switch(n){
-			//测试规则
-			case "ruletest":
-				htmlObj={
-					title:"测试_规则:"+tobj["s_name"],
-					content:"<div>测试规则...</div>",
-					tag:[
-						{s_label:function(){var str="";for(var i in tobj["s_rule"]){str+="<p>"+(parseInt(i)+1)+"、"+tobj["s_rule"][i]+"</p>";}return str
-								}(),type:"tpl_small"},
-						{s_label:"s_con",type:"tpl_text",rows:18},
-						{s_label:"_id",type:"tpl_hidden",val:tobj["_id"]}
-					],
-					bts:[{label:"RUN",class:"btn-danger",
-							fun:function(){
-								var form = $('<form/>').appendTo("body");  
-							    // 设置属性  
-							    form.attr('action','/admin/rulemanager/runruletest').attr('method', 'post').attr('target', '_blank');  
-							    // 创建Input  
-							    var my_input = $('<input type="text" name="_id" />'); 
-							    my_input.attr('value', $("#_id").val()); 
-								var mytext = $('<textarea name="s_con" />') 
-								mytext.val($("#s_con").val())
-							    // 附加到Form  
-							    form.append(my_input).append(mytext); 
-							    // 提交表单  
-							    form.submit();  
-								form.remove();
-							}
-						}]
-				}
-			OpenDialog(htmlObj,obj);
-			break;
-			case "edit":			
-				obj=ttablerulemanager.row($(this).closest("tr")).data();
-			case "new":
-				tag=[
-					{label:"名称",s_label:"s_name",must:true},
-					{label:"代码",s_label:"s_code",must:true},
-					//{label:"标识",s_label:"s_isok",must:true,type:"tpl_list_local",list:[{"s_name":"wrong","_id":"wrong"},{"s_name":"right","_id":"right"}],default:"wrong"},
-					{label:"前置过滤",s_label:"s_rule_prerule",type:"tpl_text",placeholder:"XXX__YYY"},
-					{label:"规则",s_label:"s_rule",type:"tpl_text",rows:8,must:true},
-					{s_label:"_id",type:"tpl_hidden"},
-					{s_label:"s_classid",type:"tpl_hidden",val:cid},
-					{s_label:"s_pfield",type:"tpl_hidden",val:cname}
-				]
-				if(n == "new"){
-					_tit="新增_"+cname+"规则";
-				}else{
-					_tit="编辑_"+cname+"规则:"+tobj["s_name"];
-				}
-				htmlObj={
-					mutilfield:"s_pid",
-					title:_tit,
-					tag:tag,
-					bts:[
+			var btn =[
 						{label:"保存",class:"btn-primary",
 							fun:function(){
 								var obj={}
@@ -164,7 +136,7 @@ $(function () {
 								if (bcon){								
 									$.post("/admin/rulemanager/saverule",obj,function(data){
 										if(data&&data.rep){
-											window.location.href="/admin/rulemanager/getrulelist?id="+cid+"&cname="+cname+"&fid="+fid;	
+											window.location.href="/admin/rulemanager/getrulelist?id="+fid+"&fname="+fname;	
 										}else{
 											showTip(data.msg,1000)
 										}
@@ -174,46 +146,62 @@ $(function () {
 								}
 							}
 						}
-					]
+					];
+			var delid=$(this).attr("value");
+			switch(n){
+			case "edit":			
+				obj=ttablerulemanager.row($(this).closest("tr")).data();
+			case "new":
+				tag=[
+					{label:"名称",s_label:"s_name",must:true},
+					{label:"描述",s_label:"s_descript"},
+					{label:"启用",s_label:"isuse",type:"tpl_list_local",list:[{"s_name":"是","_id":true},{"s_name":"否","_id":false}],default:true},
+					{label:"类型",s_label:"s_type",type:"tpl_list_local",must:true,list:[{"s_name":"正确","_id":"0"},{"s_name":"异常","_id":"1"}],default:"0"},
+					{label:"正则",s_label:"s_rule",type:"tpl_text",rows:2,must:true},
+					{s_label:"_id",type:"tpl_hidden"},
+					{s_label:"s_fid",type:"tpl_hidden",val:fid},
+					{s_label:"s_field",type:"tpl_hidden",val:fname}
+				]
+				if(n == "new"){
+					_tit="新增"+fname+"规则";
+				}else{
+					_tit="编辑"+fname+"规则";
+					testcon=[{label:"测试内容",s_label:"s_testcon",type:"tpl_text"}];
+					check=[{label:"测试",class:"btn-warning",
+								fun:function(){
+									var obj={}
+									var bcon=true
+									$("#_con").find("input[id!=s_show],textarea").each(function(i,el){
+										var val=$(el).val(); 
+										obj[el.id]=$(el).val()
+										if(el.id!="_id"&&$(el).attr("must")&&!val){
+											bcon=false
+											return false
+										}
+									})
+									if (bcon){								
+										$.post("/admin/check/auditrule",obj,function(data){
+											showMsg(JSON.stringify(data.rep))
+										},'json')
+									}else{
+										alert("红色标签的表单不能为空!")
+									}
+								}
+							}];
+					tag = com.pushArry(tag,testcon)
+					btn = com.pushArry(btn,check)
 				}
-			//if({{.data.class.s_pid}}){
-			//	htmlObj.tag.push({label:"父规则",s_label:"s_pid",type:"tpl_list_ajax",url:"/admin/rulemanager/getrlist?id="+{{.data.class.s_pid}},fun:function(){
-			//		var ids=$("#s_pid").data("ids")
-			//		ids=ids||{}
-			//		var tid=$(this).attr("_id")
-			//		if(!ids[tid]){
-			//			ids[tid]=true
-			//			$("#s_pid").data("ids",ids)
-			//			var tpl1=$('<div class="alert alert-dismissible alert-success" style="min-width:50px;max-width:250px;font-size:10px;padding:3px;margin:5px;display:inline-block"><button type="button" class="close" data-dismiss="alert" style="right:0px;">&times;</button><span></span></div>')
-			//			tpl1.find("span").text($(this).text())							
-			//			tpl1.attr("tid",tid)
-			//			tpl1.find("button").click(function(){
-			//				var ttid=$(this).closest(".alert").attr("tid");
-			//				var iids=$("#s_pid").data("ids")
-			//				delete iids[ttid]
-			//				$("#s_pid").val(function(){
-			//					var strid=[]
-			//					for(var k in iids){
-			//						strid.push(k)
-			//					}
-			//					return strid.join(",")
-			//				}())
-			//			})
-			//			$("#s_pid").prev().append(tpl1)
-			//			$("#s_pid").val(function(){
-			//				var strid=[]
-			//				for(var k in ids){
-			//					strid.push(k)
-			//				}
-			//				return strid.join(",")
-			//			}())
-			//		}
-			//	}})
-			//}
+				htmlObj={
+					mutilfield:"s_pid",
+					title:_tit,
+					tag:tag,
+					bts:btn
+				}
+			
 			OpenDialog(htmlObj,obj)
 			break;
 			//上移下移
-			case "moveup":
+			/*case "moveup":
 			case "movedown":
 				if($(this).attr("disabled")=="disabled"){
 					return
@@ -228,17 +216,32 @@ $(function () {
 				}
 				$.post("/admin/rulemanager/shift",{str:poststr},function(data){
 					if(data&&data.rep){
-						window.location.href="/admin/rulemanager/getrulelist?id="+cid+"&cname="+cname+"&fid="+fid;						
+						window.location.href="/admin/rulemanager/getrulelist?id="+fid+"&fname="+fname;						
 					}else{
 						showTip("移动失败", 1000, function() {});
 					}
 				})
-				break;
+				break;*/
 			}
 		});
+	
+		var opt="<option value='-1'>全部</option>"+
+				"<option value='0'>正确</option>"+
+				"<option value='1'>异常</option>";
+		var select="<div class='form-group'><label for='name'>类型:</label>"+
+			"<select id='rule_type' onchange='checkclick(this.value)' class='form-control input-sm'>"+
+			opt+
+			"</select></div>"
+		$("#rulemanagerTable_filter").prepend("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+		$("#rulemanagerTable_filter").prepend(select);
 	})
+	
 })
 
+function checkclick(){
+	ttablerulemanager.ajax.reload();
+}
+
 function del(_id){
 	showConfirm("确定删除?", function() {
 		$.ajax({
@@ -247,7 +250,7 @@ function del(_id){
 			data:{"_id":_id},
 			success:function(r){
 				if(r.rep){				
-					window.location.href="/admin/rulemanager/getrulelist?id="+cid+"&cname="+cname+"&fid="+fid;
+					window.location.href="/admin/rulemanager/getrulelist?id="+fid+"&fname="+fname;
 				}else{
 					showTip("删除失败", 1000, function() {});
 				}
@@ -255,5 +258,26 @@ function del(_id){
 		})
 	});
 }
-
+function use(_id,utype){
+	smg=""
+	if(utype){
+		smg="确定启用?"
+	}else{
+		smg="确定停用?"
+	}
+	showConfirm(smg, function() {
+		$.ajax({
+			url:"/admin/rulemanager/ruleuse",
+			type:"post",
+			data:{"_id":_id,"isuse":utype},
+			success:function(r){
+				if(r.rep){				
+					window.location.href="/admin/rulemanager/getrulelist?id="+fid+"&fname="+fname;
+				}else{
+					showTip("启用失败", 1000, function() {});
+				}
+			}
+		})
+	});
+}
 </script>