wangji 6 years ago
parent
commit
974b12e13f

+ 83 - 1
src/jy/admin/rule.go

@@ -66,8 +66,18 @@ func init() {
 		go DelLogicBack(_id)
 		c.JSON(200, gin.H{"rep": b})
 	})
-
 	Admin.POST("/rulelogic/use", RuleLogicUse)
+
+	//pkglogic
+	Admin.GET("/pkglogic", func(c *gin.Context) {
+		vid := c.Query("vid")
+		pid := c.Query("pid")
+		c.HTML(200, "pkg_logiclist.html", gin.H{"vid": vid, "pid": pid})
+	})
+	Admin.POST("/pkglogic/data", PkgLogicData)
+	Admin.POST("/pkglogic/save", PkgLogicSave)
+	Admin.POST("/pkglogic/use", PkgLogicUse)
+
 	Admin.GET("/logicpre", func(c *gin.Context) {
 		vid := c.Query("vid")
 		pid := c.Query("pid")
@@ -77,6 +87,7 @@ func init() {
 	Admin.POST("/logicpre/data", RuleLogicPreData)
 	Admin.POST("/logicpre/save", RuleLogicPreSave)
 	Admin.POST("/logicpre/del", RuleLogicPreDel)
+
 	Admin.GET("/logicback", func(c *gin.Context) {
 		vid := c.Query("vid")
 		pid := c.Query("pid")
@@ -101,6 +112,16 @@ func init() {
 	Admin.POST("/logicore/del", RuleLogicCoreDel)
 	Admin.POST("/logicore/use", RuleLogicCoreUse)
 
+	Admin.GET("/pkglogicback", func(c *gin.Context) {
+		vid := c.Query("vid")
+		pid := c.Query("pid")
+		sid := c.Query("sid")
+		//查询属性字段
+		tmp, _ := Mgo.FindById("pkg_info", pid, `{"s_field":1}`)
+		c.HTML(200, "pkg_logicbacklist.html", gin.H{"vid": vid, "pid": pid, "sid": sid, "field": (*tmp)["s_field"]})
+	})
+	Admin.POST("/pkglogicback/data", PkgLogicBackData)
+	Admin.POST("/pkglogicback/save", PkgLogicBackSave)
 	//ruletag
 	//	Admin.GET("/ruletag", func(c *gin.Context) {
 	//		version := c.Query("version")
@@ -230,6 +251,12 @@ func RuleLogicData(c *gin.Context) {
 	data, _ := Mgo.Find("rule_logic", `{"vid":"`+vid+`","pid":"`+pid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
 	c.JSON(200, gin.H{"data": data, "vid": vid, "pid": pid})
 }
+func PkgLogicData(c *gin.Context) {
+	vid, _ := c.GetPostForm("vid")
+	pid, _ := c.GetPostForm("pid")
+	data, _ := Mgo.Find("pkg_logic", `{"vid":"`+vid+`","pid":"`+pid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
+	c.JSON(200, gin.H{"data": data, "vid": vid, "pid": pid})
+}
 func RuleLogicSave(c *gin.Context) {
 	data := GetPostForm(c)
 	_id, _ := c.GetPostForm("_id")
@@ -247,12 +274,35 @@ func RuleLogicSave(c *gin.Context) {
 	}
 	c.JSON(200, gin.H{"rep": b})
 }
+func PkgLogicSave(c *gin.Context) {
+	data := GetPostForm(c)
+	_id, _ := c.GetPostForm("_id")
+	b := false
+	if _id == "" {
+		data["l_createtime"] = time.Now().Unix()
+		data["s_username"] = sessions.Default(c).Get("username")
+		data["delete"] = false
+		b = Mgo.Save("pkg_logic", data) != ""
+	} else {
+		data["l_lasttime"] = time.Now().Unix()
+		b = Mgo.Update("pkg_logic", `{"_id":"`+_id+`"}`, map[string]interface{}{
+			"$set": data,
+		}, true, false)
+	}
+	c.JSON(200, gin.H{"rep": b})
+}
 func RuleLogicUse(c *gin.Context) {
 	_id, _ := c.GetPostForm("_id")
 	isuse, _ := c.GetPostForm("isuse")
 	b := Mgo.UpdateById("rule_logic", _id, `{"$set":{"isuse":`+isuse+`}}`)
 	c.JSON(200, gin.H{"rep": b})
 }
+func PkgLogicUse(c *gin.Context) {
+	_id, _ := c.GetPostForm("_id")
+	isuse, _ := c.GetPostForm("isuse")
+	b := Mgo.UpdateById("pkg_logic", _id, `{"$set":{"isuse":`+isuse+`}}`)
+	c.JSON(200, gin.H{"rep": b})
+}
 func RuleLogicPreData(c *gin.Context) {
 	vid, _ := c.GetPostForm("vid")
 	pid, _ := c.GetPostForm("pid")
@@ -298,6 +348,13 @@ func RuleLogicBackData(c *gin.Context) {
 	data, _ := Mgo.Find("rule_logicback", `{"sid":"`+sid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
 	c.JSON(200, gin.H{"data": data, "vid": vid, "pid": pid, "sid": sid})
 }
+func PkgLogicBackData(c *gin.Context) {
+	vid, _ := c.GetPostForm("vid")
+	pid, _ := c.GetPostForm("pid")
+	sid, _ := c.GetPostForm("sid")
+	data, _ := Mgo.Find("pkg_logicback", `{"sid":"`+sid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
+	c.JSON(200, gin.H{"data": data, "vid": vid, "pid": pid, "sid": sid})
+}
 func RuleLogicBackSave(c *gin.Context) {
 	data := GetPostForm(c)
 	_id, _ := c.GetPostForm("_id")
@@ -323,6 +380,31 @@ func RuleLogicBackSave(c *gin.Context) {
 	}
 	c.JSON(200, gin.H{"rep": b})
 }
+func PkgLogicBackSave(c *gin.Context) {
+	data := GetPostForm(c)
+	_id, _ := c.GetPostForm("_id")
+	b := false
+	if _id == "" {
+		data["l_createtime"] = time.Now().Unix()
+		data["s_username"] = sessions.Default(c).Get("username")
+		data["delete"] = false
+		s_type := data["s_type"]
+		code := ""
+		if s_type == "0" { //抽取后置正则E_FE
+			code = util.GetSyncIndex(E_BE)
+		} else { //抽取后置脚本
+			code = util.GetSyncIndex(E_BL)
+		}
+		data["s_code"] = code
+		b = Mgo.Save("pkg_logicback", data) != ""
+	} else {
+		data["l_lasttime"] = time.Now().Unix()
+		b = Mgo.Update("pkg_logicback", `{"_id":"`+_id+`"}`, map[string]interface{}{
+			"$set": data,
+		}, true, false)
+	}
+	c.JSON(200, gin.H{"rep": b})
+}
 func RuleLogicBackDel(c *gin.Context) {
 	_id, _ := c.GetPostForm("_id")
 	//b := Mgo.Del("rule_logicback", `{"_id":"`+_id+`"}`)

+ 13 - 0
src/jy/admin/rulecheck.go

@@ -127,6 +127,19 @@ func init() {
 				"pid": pid, "vid": vid, "sid": sid},
 		)
 	})
+	Admin.GET("/check/lua/pkgcoreback", func(c *gin.Context) {
+		vid := c.Query("vid")
+		pid := c.Query("pid")
+		sid := c.Query("sid")
+		s_code := c.Query("s_code")
+		rule, _ := Mgo.FindOne("pkg_logicback", `{"s_code":"`+s_code+`"}`)
+		(*rule)["_id"] = qu.BsonIdToSId((*rule)["_id"])
+		c.HTML(200,
+			"check_pkgluacoreback.html",
+			gin.H{"code": s_code, "rule": &rule, "infos": getCheckInfos(),
+				"pid": pid, "vid": vid, "sid": sid},
+		)
+	})
 	Admin.POST("/check/lua/corebackrule", func(c *gin.Context) {
 		luascript, _ := c.GetPostForm("s_luascript")
 		infoid, _ := c.GetPostForm("infoid")

+ 34 - 1
src/jy/admin/version.go

@@ -172,7 +172,40 @@ func init() {
 	})
 	Admin.POST("/version/pkginfodata", func(c *gin.Context) {
 		vid, _ := c.GetPostForm("vid")
-		c.JSON(200, gin.H{"data": map[string]interface{}{}, "vid": vid})
+		list, _ := Mgo.Find("pkg_info", `{"vid":"`+vid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
+		c.JSON(200, gin.H{"data": list, "vid": vid})
+	})
+	Admin.POST("/version/pkginfosave", func(c *gin.Context) {
+		_id, _ := c.GetPostForm("_id")
+		data := GetPostForm(c)
+		if _id != "" {
+			Mgo.UpdateById("pkg_info", _id, map[string]interface{}{"$set": data})
+			c.JSON(200, gin.H{"rep": true})
+		} else {
+			s_field, _ := c.GetPostForm("s_field")
+			vid, _ := c.GetPostForm("vid")
+			tmp, _ := Mgo.FindOne("pkg_info", `{"s_field":"`+s_field+`","vid":"`+vid+`","delete":false}`)
+			if len(*tmp) > 0 {
+				c.JSON(200, gin.H{"rep": false})
+			} else {
+				data["l_createtime"] = time.Now().Unix()
+				data["s_username"] = sessions.Default(c).Get("username")
+				data["l_lasttime"] = time.Now().Unix()
+				data["delete"] = false
+				pid := Mgo.Save("pkg_info", data)
+				fromvid, _ := data["s_pversionid"].(string)
+				if fromvid != "" {
+					copyFieldRules(vid, pid, s_field, fromvid, sessions.Default(c).Get("username").(string))
+				}
+				c.JSON(200, gin.H{"rep": true})
+			}
+		}
+	})
+	Admin.POST("/version/pkginfouse", func(c *gin.Context) {
+		_id, _ := c.GetPostForm("_id")
+		isuse, _ := c.GetPostForm("isuse")
+		b := Mgo.UpdateById("pkg_info", _id, `{"$set":{"isuse":`+isuse+`}}`)
+		c.JSON(200, gin.H{"rep": b})
 	})
 }
 

+ 84 - 0
src/web/templates/admin/check_pkgluacoreback.html

@@ -0,0 +1,84 @@
+{{template "inc"}}
+<!-- Main Header -->
+{{template "header"}}
+<!-- Left side column. 权限菜单 -->
+{{template "memu"}}
+<!-- Content Wrapper. Contains page content -->
+<div class="content-wrapper">
+	<section class="content-header">
+		<ol class="breadcrumb">
+		 <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <li><a href="/admin/version/pkginfo?vid={{.vid}}&pid={{.pid}}">分包属性</a></li>
+		  <li><a href="/admin/pkglogic?vid={{.vid}}&pid={{.pid}}">抽取逻辑</a></li>
+		  <li><a href="/admin/pkglogicback?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}">后置规则</a></li>
+		  <li class="active"><a href="/admin/check/lua/pkgcoreback?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}&s_code={{.code}}">{{.code}}</a></li>
+		</ol>
+    </section>
+  <!-- Main content -->
+  <section class="content"><br/>
+    	<form id="dataform" class="form-horizontal">
+			<div class="form-group">
+				<div class="col-sm-12">
+					<select name="infoid" class="form-control">
+	                	<option value="">请选择测试信息</option>
+						{{if .rule.infoid}}
+							{{$ruleid := .rule.infoid}}
+							{{range .infos}}
+								<option value="{{._id}}" {{if eq ._id $ruleid}} selected {{end}}>{{.title}}</option>
+							{{end}}
+						{{else}}
+							{{range .infos}}
+								<option value="{{._id}}">{{.title}}</option>
+							{{end}}
+						{{end}}
+	              	</select>
+				</div>
+				<label for="code" class="col-sm-1 control-label">代码: {{.rule.s_code}}</label>
+			    <label for="code" class="col-sm-3 control-label">名称: {{.rule.s_name}}</label>
+			</div>
+			<fieldset class="col-sm-6" data-mode="expert">
+				<textarea id="s_luascript" name="s_luascript">{{.rule.s_luascript}}</textarea>
+			</fieldset>
+			<fieldset class="col-sm-6" data-mode="expert">
+				<textarea id="result" style="height:400px;width:100%"></textarea>
+			</fieldset>
+			<input type="hidden" name="_id" value="{{.rule._id}}">
+			<input type="hidden" name="s_code" value="{{.rule.s_code}}">
+			<input type="hidden" name="s_name" value="{{.rule.s_name}}">
+			<input type="hidden" name="vid" value="{{.vid}}">
+		</form>
+		
+		<h1><div class="btn-center">
+			<button type="button" class="btn btn-success" onclick="check()">测试</button>
+			<button type="button" class="btn btn-primary" onclick="save()">保存</button>
+		</div></h1>
+</section>
+
+</div>
+{{template "luares"}}
+{{template "footer"}}
+<script>
+com.initMirror(400)
+menuActive("version")
+function check(){
+	$.post("/admin/check/lua/corebackrule",
+		com.serializeArray("dataform"), 
+		function(r) {
+			if(r.rep){				
+				$("#result").html(JSON.stringify(r.rep, null, 2)) 
+			}
+		}
+	);
+}
+function save(){
+	$.post("/admin/logicback/save",
+		com.serializeArray("dataform"),
+		function(r){
+			if(r){
+				showTip("保存成功",1000)
+			}
+		}
+	);
+}
+</script>
+

+ 229 - 0
src/web/templates/admin/pkg_logicbacklist.html

@@ -0,0 +1,229 @@
+{{template "inc"}}
+<!-- Main Header -->
+{{template "header"}}
+<!-- Left side column. 权限菜单 -->
+{{template "memu"}}
+
+<!-- Content Wrapper. Contains page content -->
+<div class="content-wrapper">
+	<section class="content-header">
+		<h1>
+			<small><a class="btn btn-primary opr" opr="new">新增正则</a></small>
+			<small><a class="btn btn-primary opr" opr="newlua">新增脚本</a></small>
+		</h1>
+		<ol class="breadcrumb">
+		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <li><a href="/admin/version/pkginfo?vid={{.vid}}&pid={{.pid}}">分包属性</a></li>
+		  <li><a href="/admin/pkglogic?vid={{.vid}}&pid={{.pid}}">抽取逻辑</a></li>
+		  <li class="active"><a href="/admin/pkglogicback?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}">后置规则</a></li>
+		</ol>
+    </section>
+  <!-- Main content -->
+  <section class="content">
+      <div class="row">
+	      <div class="col-xs-12">
+	        <div class="box">
+		        <div class="box-body">
+		            <table id="dataTable" class="table table-bordered table-hover">
+		              <thead>
+		              <tr>
+						<th>代码</th>
+		                <th>名称</th>
+						<th>创建人</th>
+						<th>描述</th>
+						<th>类型</th>
+						<th>操作</th>
+		              </tr>
+		              </thead>
+		            </table>
+		        </div>
+	          <!-- /.box-body -->
+	        </div>
+        <!-- /.box -->
+		</div>
+	</div>
+  </section>
+</div>
+{{template "luares"}}
+{{template "dialog"}}
+{{template "footer"}}
+
+<script>
+menuActive("version")
+$(function () {
+	ttable=$('#dataTable').DataTable({
+		"paging"      : false,
+		"lengthChange": false,
+		"searching"   : true,
+		"ordering"    : false,
+		"info"        : true,
+		"autoWidth"   : false,
+		"ajax": {
+			"url": "/admin/pkglogicback/data",
+			"type": "post",
+			"data":{"vid":{{.vid}},"pid":{{.pid}},"sid":{{ .sid}} }
+		 },
+		"language": {
+            "url": "/res/dist/js/dataTables.chinese.lang"
+        },
+		"columns": [
+			{ "data": "s_code"},
+            { "data": "s_name"},
+			{ "data": "s_username"},
+			{ "data": "s_descript"},
+			{ "data": "s_type",render:function(val,a,row){
+				if(val=="0"){
+					return "正则"
+				}else{
+					return "lua脚本"
+				}
+			}},
+			{ "data": "_id",render:function(val,a,row,pos){
+				tmp=""
+				if(row.s_type=="0"){
+					tmp = '<div>'+
+						'<a class="btn btn-sm btn-primary opr" opr="edit" row="'+pos.row+'" >编辑</a> '+
+						'<a class="btn btn-sm btn-warning" onclick="del(\''+val+'\')">删除</a> '+
+						'</div>';
+				}else{
+					tmp = '<div>'+
+						'<a class="btn btn-sm btn-primary opr" opr="editlua" row="'+pos.row+'" >编辑</a> '+
+						'<a class="btn btn-sm btn-warning" onclick="del(\''+val+'\')">删除</a> '+
+						'</div>';
+				}
+				return tmp
+			}}
+       	]
+	});
+	ttable.on('init.dt', function () {
+		$(".opr").click(function(){
+			var n=$(this).attr("opr")
+			var htmlObj={},obj,tag=[]
+			var bts=[{label:"保存",class:"btn-primary",
+							fun:function(){
+								var obj={}
+								var bcon=true
+								$("#_con").find("input[id!=s_show],textarea").each(function(i,el){
+									var val=$(el).val();
+									if(el.id=="s_luascript"){
+										val=editor_1.getValue()
+										obj[el.id]=val
+									}else{
+										obj[el.id]=$(el).val()
+									}
+									if(el.id!="_id"&&$(el).attr("must")&&!val){
+										bcon=false
+										return false
+									}
+								})
+								if (bcon){								
+									$.post("/admin/pkglogicback/save",obj,function(data){
+										if(data&&data.rep){
+											window.location.href="/admin/pkglogicback?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}"								
+										}else{
+											showTip(data.msg,1000)
+										}
+									},'json')
+								}else{
+									alert("红色标签的表单不能为空!")
+								}
+							}
+						}
+					]
+			var _tit="" 
+			switch(n){
+			case "edit":			
+				obj=ttable.row($(this).closest("tr")).data();
+			case "editlua":			
+				obj=ttable.row($(this).closest("tr")).data();
+			case "newlua":
+			case "new":
+				comtag=[{label:"名称",s_label:"s_name",placeholder:"",must:true},{label:"描述",s_label:"s_descript",type:"tpl_text"}]
+				regtag=[{label:"字段",s_label:"s_field",type:"tpl_list_local",url:"/admin/getfields",default:{{.field}}},{label:"正则",s_label:"s_rule",type:"tpl_text",must:true}]
+				luatag=[{label:"脚本",s_label:"s_luascript",type:"tpl_text",must:true}]
+				testcon=[{label:"测试内容",s_label:"s_testcon",type:"tpl_text",must:true}]
+				hiddentag=[{s_label:"_id",type:"tpl_hidden"},{s_label:"vid",type:"tpl_hidden"},{s_label:"pid",type:"tpl_hidden"},{s_label:"sid",type:"tpl_hidden"},{s_label:"s_type",type:"tpl_hidden"}]
+				islua=false
+				tag = com.pushArry(tag,comtag)
+				if(n=="edit"){
+					_tit="编辑-"+obj.s_name
+					tag = com.pushArry(tag,regtag)
+					tag = com.pushArry(tag,hiddentag)
+					tag = com.pushArry(tag,testcon)
+					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/backrule",obj,function(data){
+											showMsg(data.rep)
+										},'json')
+									}else{
+										alert("红色标签的表单不能为空!")
+									}
+								}
+							}]
+					bts = com.pushArry(bts,check)
+				}else if(n=="editlua"){
+					_tit="编辑-"+obj.s_name
+					islua=true
+					tag = com.pushArry(tag,luatag)
+					tag = com.pushArry(tag,hiddentag)
+					check=[{label:"测试",class:"btn-warning",
+								fun:function(){
+									window.location.href="/admin/check/lua/pkgcoreback?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}&s_code="+obj.s_code
+								}
+							}]
+					bts = com.pushArry(bts,check)
+				}else{
+					_tit="新增规则"
+					if(n=="newlua"){
+						_tit="新增脚本"
+						obj={"s_luascript":"--code脚本代码,result 抽取结果,过滤后返回result,对象结构不可改变\nfunction main(code,result)\n\t--过滤操作\n\treturn result\nend","vid":"{{.vid}}","pid":"{{.pid}}","sid":"{{.sid}}","s_type":"1"}
+						tag = com.pushArry(tag,luatag)
+						tag = com.pushArry(tag,hiddentag)
+						islua=true
+					}else{
+						obj={"vid":"{{.vid}}","pid":"{{.pid}}","sid":"{{.sid}}","s_type":"0"}
+						tag = com.pushArry(tag,regtag)
+						tag = com.pushArry(tag,hiddentag)
+					}
+				}
+				htmlObj={
+					title:_tit,
+					tag:tag,
+					lua:islua,
+					bts:bts
+				}
+			OpenDialog(htmlObj,obj)
+			break;
+			}
+		});
+	})
+})
+
+function del(_id){
+	showConfirm("确定删除?", function() {
+		$.ajax({
+			url:"/admin/logicback/del",
+			type:"post",
+			data:{"_id":_id},
+			success:function(r){
+				if(r.rep){				
+					window.location.href="/admin/logicback?vid={{.vid}}&pid={{.pid}}&sid={{.sid}}"
+				}else{
+					showTip("删除失败", 1000);
+				}
+			}
+		})
+	});
+}
+</script>

+ 198 - 0
src/web/templates/admin/pkg_logiclist.html

@@ -0,0 +1,198 @@
+{{template "inc"}}
+<!-- Main Header -->
+{{template "header"}}
+<!-- Left side column. 权限菜单 -->
+{{template "memu"}}
+
+<!-- Content Wrapper. Contains page content -->
+<div class="content-wrapper">
+	<section class="content-header">
+		<h1>
+			<small><a class="btn btn-primary opr" opr="new">新增逻辑</a></small>
+		</h1>
+		<ol class="breadcrumb">
+		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
+		  <li class="active"><a href="/admin/version/pkginfo?vid={{.vid}}">分包属性</a></li>
+		  <li class="active"><a href="/admin/pkglogic?vid={{.vid}}&pid={{.pid}}">抽取逻辑</a></li>
+		</ol>
+    </section>
+  <!-- Main content -->
+  <section class="content">
+      <div class="row">
+	      <div class="col-xs-12">
+	        <div class="box">
+		        <div class="box-body">
+		            <table id="dataTable" class="table table-bordered table-hover">
+		              <thead>
+		              <tr>
+						<th>名称</th>
+						<th>创建人</th>
+						<th>描述</th>
+						<th>是否启用</th>
+						<th>配置规则</th>
+						<th>操作</th>
+		              </tr>
+		              </thead>
+		            </table>
+		        </div>
+	          <!-- /.box-body -->
+	        </div>
+        <!-- /.box -->
+		</div>
+	</div>
+  </section>
+</div>
+{{template "luares"}}
+{{template "dialog"}}
+{{template "footer"}}
+
+<script>
+menuActive("version")
+$(function () {
+	ttable=$('#dataTable').DataTable({
+		"paging"      : false,
+		"lengthChange": false,
+		"searching"   : true,
+		"ordering"    : false,
+		"info"        : true,
+		"autoWidth"   : false,
+		"ajax": {
+			"url": "/admin/pkglogic/data",
+			"type": "post",
+			"data":{"vid":{{ .vid}} ,"pid":{{ .pid}} }
+		 },
+		"language": {
+            "url": "/res/dist/js/dataTables.chinese.lang"
+        },
+		"columns": [
+			{ "data": "s_name"},
+			{ "data": "s_username"},
+			{ "data": "s_descript"},
+			{ "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","width":"25%",render:function(val,a,row){
+				tmp = '<div class="btn-group">'+
+					'<a class="btn btn-sm btn-info" href="/admin/pkglogicback?vid='+{{.vid}}+'&pid='+{{.pid}}+'&sid='+row._id+'">后置规则</a>'+
+					'</div>';
+				return  tmp
+			}},
+			{"data":"s_version","width":"15%",render:function(val,a,row,pos){
+				return '<a class="btn btn-sm btn-primary opr" opr="edit" row="'+pos.row+'" >编辑</a>'+
+					'&nbsp;&nbsp;<a class="btn btn-sm btn-warning" onclick="del(\''+row._id+'\')">删除</a>';
+			}}
+       	]
+	});
+	ttable.on('init.dt', function () {
+		$(".opr").click(function(){
+			var n=$(this).attr("opr")
+			var htmlObj={},obj,tag=[]
+			var _tit="" 
+			switch(n){
+			case "edit":			
+				obj=ttable.row($(this).closest("tr")).data()
+			case "editlua":
+				obj=ttable.row($(this).closest("tr")).data()
+			case "new":
+				tag=[{label:"名称",s_label:"s_name",placeholder:"",must:true},
+					{label:"描述",s_label:"s_descript",type:"tpl_text"},
+					{label:"启用",s_label:"isuse",type:"tpl_list_local",list:[{"s_name":"是","_id":true},{"s_name":"否","_id":false}],default:true},
+					{label:"标题抽取",s_label:"extfrom",type:"tpl_list_local",list:[{"s_name":"是","_id":true},{"s_name":"否","_id":false}],default:false},
+					{label:"是否适用",s_label:"s_luascript",type:"tpl_text",must:true},
+					{s_label:"_id",type:"tpl_hidden"},
+					{s_label:"vid",type:"tpl_hidden"},{s_label:"pid",type:"tpl_hidden"}]
+				if(n=="edit"){
+					_tit="编辑-"+obj.s_name
+				}else{
+					_tit="新增逻辑"
+					obj={"s_luascript":"function logic(doc)\n\treturn true\nend","vid":"{{.vid}}","pid":"{{.pid}}","s_type":"0"}
+				}
+				
+				htmlObj={
+					title:_tit,
+					tag:tag,
+					lua:true,
+					bts:[
+						{label:"保存",class:"btn-primary",
+							fun:function(){
+								var obj={}
+								var bcon=true
+								$("#_con").find("input[id!=s_show],textarea").each(function(i,el){
+									var val=$(el).val();
+									if(el.id=="s_luascript"){
+										val=editor_1.getValue()
+										obj[el.id]=val
+									}else{
+										obj[el.id]=$(el).val()
+									}
+									if(el.id!="_id"&&$(el).attr("must")&&!val){
+										bcon=false
+										return false
+									}
+								})
+								if (bcon){								
+									$.post("/admin/pkglogic/save",obj,function(data){
+										if(data&&data.rep){
+											window.location.href="/admin/pkglogic?vid={{.vid}}&pid={{.pid}}"	
+										}else{
+											showTip(data.msg,1000)
+										}
+									},'json')
+								}else{
+									alert("红色标签的表单不能为空!")
+								}
+							}
+						}
+					]
+				}
+			OpenDialog(htmlObj,obj)
+			break;
+			}
+		});
+	})
+})
+function del(_id){
+	showConfirm("确定删除?", function() {
+		$.ajax({
+			url:"/admin/rulelogic/del",
+			type:"post",
+			data:{"_id":_id},
+			success:function(r){
+				if(r.rep){				
+					window.location.href="/admin/rulelogic?vid={{.vid}}&pid={{.pid}}";
+				}else{
+					showTip("删除失败", 1000);
+				}
+			}
+		})
+	});
+}
+function use(_id,utype){
+	smg=""
+	if(utype){
+		smg="确定启用?"
+	}else{
+		smg="确定停用?"
+	}
+	showConfirm(smg, function() {
+		$.ajax({
+			url:"/admin/pkglogic/use",
+			type:"post",
+			data:{"_id":_id,"isuse":utype},
+			success:function(r){
+				if(r.rep){				
+					window.location.href="/admin/pkglogic?vid={{.vid}}&pid={{.pid}}"
+				}else{
+					showTip("启用失败", 1000, function() {});
+				}
+			}
+		})
+	});
+}
+</script>

+ 6 - 6
src/web/templates/admin/pkginfo.html

@@ -12,7 +12,7 @@
 		</h1>
 		<ol class="breadcrumb">
 		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>版本管理</a></li>
-		  <li class="active"><a href="/admin/version/info?vid={{.vid}}">属性配置</a></li>
+		  <li class="active"><a href="/admin/version/pkginfo?vid={{.vid}}">分包属性</a></li>
 		</ol>
     </section>
   <!-- Main content -->
@@ -86,7 +86,7 @@ $(function () {
 				return tmp
 			}},
 			{"data":"_id",render:function(val,a,row){
-				return '<a class="btn btn-sm btn-success" href="/admin/rulelogic?vid={{.vid}}&pid='+val+'">配置逻辑</a>'
+				return '<a class="btn btn-sm btn-success" href="/admin/pkglogic?vid={{.vid}}&pid='+val+'">配置逻辑</a>'
 			}},
 			{"data":"_id",render:function(val,a,row){
 				return '<a class="btn btn-sm btn-primary opr" opr="edit">编辑</a>&nbsp;<a class="btn btn-sm btn-danger" href="#" onclick="del(\''+val+'\')">删除</a>'
@@ -136,9 +136,9 @@ $(function () {
 								})
 								if (bcon){	
                                     //console.log(obj)							
-									$.post("/admin/version/infosave",obj,function(data){
+									$.post("/admin/version/pkginfosave",obj,function(data){
 										if(data&&data.rep){
-											window.location.href="/admin/version/info?vid={{.vid}}"			
+											window.location.href="/admin/version/pkginfo?vid={{.vid}}"			
 										}else{
 											showTip("已存在!",1000)
 										}
@@ -165,12 +165,12 @@ function use(_id,isuse){
 	}
 	showConfirm(smg, function() {
 		$.ajax({
-			url:"/admin/version/infouse",
+			url:"/admin/version/pkginfouse",
 			type:"post",
 			data:{"_id":_id,"isuse":isuse},
 			success:function(r){
 				if(r.rep){				
-					window.location.href="/admin/version/info?vid={{.vid}}"
+					window.location.href="/admin/version/pkginfo?vid={{.vid}}"
 				}else{
 					showTip("启用失败", 1000, function() {});
 				}