ソースを参照

迁至后置规则

zhangjinkun 7 年 前
コミット
874a03b31c

+ 104 - 42
src/jy/admin/rule.go

@@ -2,16 +2,27 @@
 package admin
 
 import (
+	"fmt"
 	. "jy/mongodbutil"
+	"jy/util"
+	"log"
 	"regexp"
 	"strings"
 	"time"
 
+	"github.com/gin-contrib/sessions"
 	"github.com/gin-gonic/gin"
 )
 
 var Date_Short_Layout = "2006-01-02"
 
+const (
+	FE = "FE" //前置正则
+	FL = "FL" //前置脚本
+	BE = "BE" //后置正则
+	BL = "BL" //后置脚本
+)
+
 func init() {
 	//rulepre
 	Admin.GET("/rulepre", func(c *gin.Context) {
@@ -22,7 +33,18 @@ func init() {
 	Admin.POST("/rulepre/save", RulePreSave)
 	Admin.POST("/rulepre/searchbyid", RulePreSearchById)
 	Admin.POST("/rulepre/del", RulePreDel)
-	Admin.GET("/rulepre/newlua", RulePreNewLua)
+	Admin.GET("/rulepre/luastr", RulePreLua)
+
+	//ruleback
+	Admin.GET("/ruleback", func(c *gin.Context) {
+		version := c.Query("version")
+		c.HTML(200, "rule_backlist.html", gin.H{"version": version})
+	})
+	Admin.POST("/ruleback/data", RuleBackData)
+	Admin.POST("/ruleback/save", RuleBackSave)
+	Admin.POST("/ruleback/searchbyid", RuleBackSearchById)
+	Admin.POST("/ruleback/del", RuleBackDel)
+	Admin.GET("/ruleback/luastr", RuleBackLua)
 
 	//ruletag
 	Admin.GET("/ruletag", func(c *gin.Context) {
@@ -35,76 +57,116 @@ func init() {
 	Admin.POST("/ruletag/editsave", RuleTagEditSave)
 }
 
-//前置规则列表
 func RulePreData(c *gin.Context) {
 	version, _ := c.GetPostForm("version")
-	data, _ := Mgo.Find("rule_pre", `{"version":"`+version+`"}`, `{"_id":-1}`, nil, false, -1, -1)
+	data, _ := Mgo.Find("rule_pre", `{"s_version":"`+version+`"}`, `{"_id":-1}`, nil, false, -1, -1)
 	c.JSON(200, gin.H{"data": data, "version": version})
 }
-
-//前置规则创建
 func RulePreSave(c *gin.Context) {
-	stype, _ := c.GetPostForm("type")
-	name, _ := c.GetPostForm("name")
-	version, _ := c.GetPostForm("version")
-	descript, _ := c.GetPostForm("descript")
-	username, _ := c.GetPostForm("username")
-	field, _ := c.GetPostForm("field")
-	rule, _ := c.GetPostForm("rule")
-	luastr, _ := c.GetPostForm("luastr")
-	if stype == "0" { //正则
-		if name == "" || rule == "" {
-			c.JSON(200, gin.H{"rep": false, "msg": "表单不完整"})
-			return
-		}
-	} else { //lua脚本
-		if luastr == "" {
-			c.JSON(200, gin.H{"rep": false, "msg": "表单不完整"})
-			return
+	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")
+		s_type := data["s_type"]
+		code := ""
+		if s_type == "0" { //前置正则
+			code = util.GetSyncIndex(FE)
+		} else { //前置lua脚本
+			code = util.GetSyncIndex(FL)
 		}
-	}
-	data := map[string]interface{}{
-		"name":     name,
-		"version":  version,
-		"type":     stype,
-		"descript": descript,
-		"username": username,
-		"rule":     rule,
-		"field":    field,
-		"luastr":   luastr,
-		"intime":   time.Now().Unix(),
-	}
-	b := Mgo.Update("rule_pre", `{"name":"`+name+`","version":"`+version+`"}`, data, true, false)
-	if b {
-		c.JSON(200, gin.H{"rep": true})
+		data["s_code"] = code
+		log.Println(code)
+		b = Mgo.Save("rule_pre", data) != ""
 	} else {
-		c.JSON(200, gin.H{"rep": false})
+		data["l_lasttime"] = time.Now().Unix()
+		b = Mgo.Update("rule_pre", `{"_id":"`+_id+`"}`, map[string]interface{}{
+			"$set": data,
+		}, true, false)
 	}
+	c.JSON(200, gin.H{"rep": b})
 }
-
 func RulePreSearchById(c *gin.Context) {
 	_id, _ := c.GetPostForm("_id")
 	data, _ := Mgo.FindById("rule_pre", _id, nil)
 	c.JSON(200, gin.H{"rep": data})
 }
-
 func RulePreDel(c *gin.Context) {
 	_id, _ := c.GetPostForm("_id")
 	b := Mgo.Del("rule_pre", `{"_id":"`+_id+`"}`)
 	c.JSON(200, gin.H{"rep": b})
 }
-
-func RulePreNewLua(c *gin.Context) {
+func RulePreLua(c *gin.Context) {
 	version := c.Query("version")
 	_id := c.Query("_id")
 	data := map[string]interface{}{}
 	if _id != "" {
 		tmp, _ := Mgo.FindById("rule_pre", _id, nil)
 		data = *tmp
+		if version == "" {
+			version = fmt.Sprint((*tmp)["s_version"])
+		}
+		data["_id"] = _id
 	}
 	c.HTML(200, "rule_prelua.html", gin.H{"version": version, "data": data})
 }
 
+func RuleBackData(c *gin.Context) {
+	version, _ := c.GetPostForm("version")
+	data, _ := Mgo.Find("rule_back", `{"s_version":"`+version+`"}`, `{"_id":-1}`, nil, false, -1, -1)
+	c.JSON(200, gin.H{"data": data, "version": version})
+}
+func RuleBackSave(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")
+		s_type := data["s_type"]
+		code := ""
+		if s_type == "0" { //前置正则
+			code = util.GetSyncIndex(BE)
+		} else { //前置lua脚本
+			code = util.GetSyncIndex(BL)
+		}
+		data["s_code"] = code
+		log.Println(code)
+		b = Mgo.Save("rule_back", data) != ""
+	} else {
+		data["l_lasttime"] = time.Now().Unix()
+		b = Mgo.Update("rule_back", `{"_id":"`+_id+`"}`, map[string]interface{}{
+			"$set": data,
+		}, true, false)
+	}
+	c.JSON(200, gin.H{"rep": b})
+}
+func RuleBackSearchById(c *gin.Context) {
+	_id, _ := c.GetPostForm("_id")
+	data, _ := Mgo.FindById("rule_back", _id, nil)
+	c.JSON(200, gin.H{"rep": data})
+}
+func RuleBackDel(c *gin.Context) {
+	_id, _ := c.GetPostForm("_id")
+	b := Mgo.Del("rule_back", `{"_id":"`+_id+`"}`)
+	c.JSON(200, gin.H{"rep": b})
+}
+func RuleBackLua(c *gin.Context) {
+	version := c.Query("version")
+	_id := c.Query("_id")
+	data := map[string]interface{}{}
+	if _id != "" {
+		tmp, _ := Mgo.FindById("rule_back", _id, nil)
+		data = *tmp
+		if version == "" {
+			version = fmt.Sprint((*tmp)["s_version"])
+		}
+		data["_id"] = _id
+	}
+	c.HTML(200, "rule_backlua.html", gin.H{"version": version, "data": data})
+}
+
 //标签库列表
 func RuleTagData(c *gin.Context) {
 	version, _ := c.GetPostForm("version")

+ 0 - 9
src/jy/mongodbutil/pool.go

@@ -1,9 +1,7 @@
 package mongodbutil
 
 import (
-	"jy/util"
 	"log"
-	qu "qfw/util"
 	"sync"
 	"time"
 
@@ -12,13 +10,6 @@ import (
 
 var Mgo *Pool
 
-func InitMgoPool() {
-	initCap := qu.IntAll(util.Config["dbsize"])
-	addr := qu.ObjToString(util.Config["mgodb"])
-	dbname := qu.ObjToString(util.Config["dbname"])
-	Mgo = MgoFactory(initCap, initCap*3, 120, addr, dbname)
-}
-
 type Pool struct {
 	mu      sync.RWMutex
 	initCap int

+ 25 - 0
src/jy/util/util.go

@@ -1,14 +1,18 @@
 package util
 
 import (
+	"fmt"
 	"io"
+	. "jy/mongodbutil"
 	"log"
 	"os"
 	qu "qfw/util"
 
+	. "gopkg.in/mgo.v2/bson"
 	"gopkg.in/natefinch/lumberjack.v2"
 )
 
+var syncint chan bool //获取下标锁
 var Config map[string]interface{}
 var Se = qu.SimpleEncrypt{Key: "topnet@extract"}
 
@@ -27,4 +31,25 @@ func init() {
 	}
 	fileAndStdoutWriter := io.MultiWriter(writers...)
 	log.SetOutput(fileAndStdoutWriter)
+
+	syncint = make(chan bool, 1)
+}
+
+func InitMgoPool() {
+	initCap := qu.IntAll(Config["dbsize"])
+	addr := qu.ObjToString(Config["mgodb"])
+	dbname := qu.ObjToString(Config["dbname"])
+	Mgo = MgoFactory(initCap, initCap*3, 120, addr, dbname)
+}
+
+func GetSyncIndex(code string) string {
+	tmp := ""
+	syncint <- true
+	Mgo.Update("rule_code", `{"code":"`+code+`"}`, M{"$inc": M{"index": 1}}, true, false)
+	data, _ := Mgo.FindOne("rule_code", `{"code":"`+code+`"}`)
+	<-syncint
+	if len(*data) > 0 {
+		tmp = code + "_" + fmt.Sprint((*data)["index"])
+	}
+	return tmp
 }

+ 1 - 2
src/main.go

@@ -5,7 +5,6 @@ import (
 	_ "jy/admin/buyermanager"
 	_ "jy/admin/task"
 	_ "jy/front"
-	"jy/mongodbutil"
 	. "jy/router"
 	"jy/util"
 	"log"
@@ -15,7 +14,7 @@ import (
 
 func init() {
 	qu.ReadConfig(&util.Config)
-	mongodbutil.InitMgoPool()
+	util.InitMgoPool()
 }
 
 func main() {

+ 10 - 0
src/web/templates/admin/com_luares.html

@@ -0,0 +1,10 @@
+{{ define "luares" }}
+<link rel="stylesheet" href="/res/plugins/codemirror/codemirror.css">
+<link rel="stylesheet"  href="/res/plugins/codemirror/theme/solarized.css">
+<link rel="stylesheet"  href="/res/plugins/codemirror/theme/abcdef.css">
+<link rel="stylesheet" href="/res/plugins/codemirror/theme/the-matrix.css">
+<script src="/res/plugins/codemirror/codemirror.js"></script>
+<script src="/res/plugins/codemirror/lua.js"></script>
+<script src="/res/plugins/codemirror/fullscreen.js"></script>
+<script>com.initMirror();</script>
+{{ end }}

+ 1 - 10
src/web/templates/admin/com_memu.html

@@ -5,16 +5,7 @@
         <li class="header">HEADER</li>
         <!-- Optionally, you can add icons to the links -->
 		<li><a href="/admin/task"><i class="fa fa-clock-o"></i> <span>任务管理</span></a></li>
-		<li class="treeview">
-          	<a href="#"><i class="fa fa-laptop"></i> <span>版本控制</span>
-            <span class="pull-right-container">
-                <i class="fa fa-angle-left pull-right"></i>
-            </span>
-          	</a>
-          	<ul class="treeview-menu">
-	            <li><a href="/admin/version"><i class="fa fa-circle-o"></i>版本管理</a></li>
-			</ul>
-        </li>
+	    <li><a href="/admin/version"><i class="fa fa-navicon"></i>版本管理</a></li>
 		<li class="treeview">
           	<a href="#"><i class="fa fa-laptop"></i> <span>中标单位库</span>
             <span class="pull-right-container">

+ 188 - 0
src/web/templates/admin/rule_backlist.html

@@ -0,0 +1,188 @@
+{{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">版本管理</a></li>
+		  <li class="active"><a href="/admin/ruleback?version={{.version}}">后置逻辑</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>
+
+	
+<!-- footer -->
+{{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/ruleback/data",
+			"type": "post",
+			"data":{"version":{{ .version}} }
+		 },
+		"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 href="/admin/ruleback/luastr?_id='+val+'" class="btn btn-sm btn-primary">编辑</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 _tit="" 
+			switch(n){
+			case "edit":			
+				obj=ttable.row($(this).closest("tr")).data()
+			case "newlua":
+			case "new":
+				tmptag=[{label:"名称",s_label:"s_name",placeholder:"",must:true},
+					{label:"描述",s_label:"s_descript",type:"tpl_text"},
+					{label:"字段",s_label:"s_field"},
+					{label:"正则",s_label:"s_rule",type:"tpl_text",must:true},
+					{s_label:"_id",type:"tpl_hidden"},
+					{s_label:"s_version",type:"tpl_hidden"},
+					{s_label:"s_type",type:"tpl_hidden"}]
+				if(n=="edit"){
+					_tit="编辑-"+obj.s_name
+				}else{
+					_tit="新增规则"
+					if(n=="newlua"){
+						_tit="新增脚本"
+						obj={"s_version":"{{.version}}","s_type":"1"}
+						tmptag = [
+							{label:"名称",s_label:"s_name",placeholder:"",must:true},
+							{label:"描述",s_label:"s_descript",type:"tpl_text"},
+							{s_label:"s_version",type:"tpl_hidden"},
+							{s_label:"s_type",type:"tpl_hidden"}
+						]
+					}else{
+						obj={"s_version":"{{.version}}","s_type":"0"}
+					}
+				}
+				htmlObj={
+					title:_tit,
+					tag:tmptag,
+					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!="_id"&&$(el).attr("must")&&!val){
+										bcon=false
+										return false
+									}
+									obj[el.id]=$(el).val()
+								})
+								if (bcon){								
+									$.post("/admin/ruleback/save",obj,function(data){
+										if(data&&data.rep){
+											window.location.href="/admin/ruleback?version={{.version}}"								
+										}else{
+											showTip(data.msg,1000)
+										}
+									},'json')
+								}else{
+									alert("红色标签的表单不能为空!")
+								}
+							}
+						}
+					]
+				}
+			OpenDialog(htmlObj,obj)
+			break;
+			}
+		});
+	})
+})
+
+function del(_id){
+	showConfirm("确定删除?", function() {
+		$.ajax({
+			url:"/admin/ruleback/del",
+			type:"post",
+			data:{"_id":_id},
+			success:function(r){
+				if(r.rep){				
+					ttable.ajax.reload();
+				}else{
+					showTip("删除失败", 1000, function() {});
+				}
+			}
+		})
+	});
+}
+
+</script>

+ 48 - 0
src/web/templates/admin/rule_backlua.html

@@ -0,0 +1,48 @@
+{{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><button type="button" class="btn btn-primary" onclick="save()">保存</button></small></h1>
+		<ol class="breadcrumb">
+		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i> 版本控制</a></li>
+		  <li><a href="/admin/version">版本管理</a></li>
+		  <li class="active"><a href="/admin/ruleback?version={{.version}}">后置逻辑</a></li>
+		</ol>
+    </section>
+  <!-- Main content -->
+  <section class="content">
+    	<form id="dataform" class="form-horizontal">
+			<fieldset data-mode="expert">
+				<textarea id="luastr" name="s_luastr">{{.data.s_luastr}}</textarea>
+			</fieldset>
+			<input type="hidden" name="_id" value={{.data._id}}>
+			<input type="hidden" name="s_type" value="1">
+			<input type="hidden" name="s_version" value="{{.version}}">
+		</form>
+  </section>
+</div>
+{{template "luares"}}
+{{template "footer"}}
+
+<script>
+menuActive("version")
+function save(){
+	$.post("/admin/ruleback/save",
+		com.serializeArray("dataform"), 
+		function(r) {
+			if(r.rep){
+				$("#dataform")[0].reset();
+				$("#modal-info").modal("hide");
+				showMsg("保存成功", function() {history.back();});
+			}else{
+				showTip(r.msg, 1000);
+			}
+		}
+	);
+}
+</script>
+

+ 92 - 99
src/web/templates/admin/rule_prelist.html

@@ -8,8 +8,8 @@
 <div class="content-wrapper">
 	<section class="content-header">
 		<h1>
-			<small><button type="button" class="btn btn-primary" data-toggle="modal" data-target="#modal-info">新增正则</button></small>
-			<small><a href="/admin/rulepre/newlua?version={{.version}}" type="button" class="btn btn-primary">新增lua脚本</a></small>
+			<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>
@@ -44,67 +44,9 @@
   </section>
 </div>
 
-<!-- modal -->  
-<div class="modal fade" id="modal-info">
-  	<div class="modal-dialog">
-	    <form id="dataform" class="form-horizontal" role="form">
-		<div class="modal-content">
-		    <div class="modal-header">
-		        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
-		          <span aria-hidden="true">&times;</span></button>
-		        <h4 class="modal-title">规则信息</h4>
-		    </div>
-		    <div class="modal-body">
-		     	<div class="form-group">
-				    <label for="code" class="col-sm-2 control-label">名称:</label>
-				    <div class="col-sm-10">
-				      <input name="name" type="text" class="form-control" placeholder="请输名称">
-				    </div>
-				</div>
-				<div class="form-group">
-				    <label for="code" class="col-sm-2 control-label">版本:</label>
-				    <div class="col-sm-10">
-				      <input name="version" type="text" value="{{.version}}" class="form-control" readonly>
-				    </div>
-				</div>
-				<div class="form-group">
-				    <label for="code" class="col-sm-2 control-label">描述:</label>
-				    <div class="col-sm-10">
-				      <input name="descript" type="text" class="form-control" placeholder="描述">
-				    </div>
-				</div>
-				<div class="form-group" id="field">
-				    <label for="code" class="col-sm-2 control-label">字段:</label>
-				    <div class="col-sm-10">
-				      <input name="field" type="text" class="form-control" placeholder="针对字段">
-				    </div>
-				</div>
-				<div class="form-group" id="rule">
-				    <label for="code" class="col-sm-2 control-label">正则:</label>
-				    <div class="col-sm-10">
-				      <input name="rule" type="text" class="form-control" placeholder="正则内容">
-				    </div>
-				</div>
-				<div class="form-group">
-				    <label for="code" class="col-sm-2 control-label">类型:</label>
-				    <div class="col-sm-10">
-				      	<label class="radio-inline">
-					        <input type="radio" name="type" value="0" checked readonly> 正则
-					    </label>
-				    </div>
-				</div>
-		    </div>
-		    <div class="modal-footer">
-		        <button type="button" class="btn btn-default" data-dismiss="modal" onclick="reset()">取消</button>
-		        <button type="button" class="btn btn-primary" onclick="save()">保存</button>
-	    	</div>
-		</div>
-		<input name="username" type="hidden" value={{index (session "user") "name" }}>
-	    </form>
-  	</div>
-</div>
 	
 <!-- footer -->
+{{template "dialog"}}
 {{template "footer"}}
 
 <script>
@@ -126,55 +68,106 @@ $(function () {
             "url": "/res/dist/js/dataTables.chinese.lang"
         },
 		"columns": [
-			{ "data": "code"},
-            { "data": "name"},
-			{ "data": "username"},
-			{ "data": "descript"},
-			{ "data": "type",render:function(val,a,row){
+			{ "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){
-				return  "<a href='#' onclick='edit(\""+val+"\",\""+row.type+"\")'><i class='fa fa-fw fa-edit text-yellow'></i></a> &nbsp;"+
-						"<a href='#' onclick='del(\""+val+"\")'><i class='fa fa-fw fa-trash text-red'></i></a>"
+			{ "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 href="/admin/rulepre/luastr?_id='+val+'" class="btn btn-sm btn-primary">编辑</a> '+
+						'<a class="btn btn-sm btn-warning" onclick="del(\''+val+'\')">删除</a> '+
+						'</div>';
+				}
+				return tmp
 			}}
        	]
 	});
-	//ttable.on('init.dt', function () {});
-})
-function save(){
-	$.post("/admin/rulepre/save",
-		$("#dataform").serialize(), 
-		function(r) {
-			if(r.rep){
-				$("#dataform")[0].reset();
-				$("#modal-info").modal("hide");
-				ttable.ajax.reload();
-			}else{
-				showTip(r.msg, 1000, function() {});
+	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 "newlua":
+			case "new":
+				tmptag=[{label:"名称",s_label:"s_name",placeholder:"",must:true},
+					{label:"描述",s_label:"s_descript",type:"tpl_text"},
+					{label:"字段",s_label:"s_field"},
+					{label:"正则",s_label:"s_rule",type:"tpl_text",must:true},
+					{s_label:"_id",type:"tpl_hidden"},
+					{s_label:"s_version",type:"tpl_hidden"},
+					{s_label:"s_type",type:"tpl_hidden"}]
+				if(n=="edit"){
+					_tit="编辑-"+obj.s_name
+				}else{
+					_tit="新增规则"
+					if(n=="newlua"){
+						_tit="新增脚本"
+						obj={"s_version":"{{.version}}","s_type":"1"}
+						tmptag = [
+							{label:"名称",s_label:"s_name",placeholder:"",must:true},
+							{label:"描述",s_label:"s_descript",type:"tpl_text"},
+							{s_label:"s_version",type:"tpl_hidden"},
+							{s_label:"s_type",type:"tpl_hidden"}
+						]
+					}else{
+						obj={"s_version":"{{.version}}","s_type":"0"}
+					}
+				}
+				htmlObj={
+					title:_tit,
+					tag:tmptag,
+					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!="_id"&&$(el).attr("must")&&!val){
+										bcon=false
+										return false
+									}
+									obj[el.id]=$(el).val()
+								})
+								if (bcon){								
+									$.post("/admin/rulepre/save",obj,function(data){
+										if(data&&data.rep){
+											window.location.href="/admin/rulepre?version={{.version}}"								
+										}else{
+											showTip(data.msg,1000)
+										}
+									},'json')
+								}else{
+									alert("红色标签的表单不能为空!")
+								}
+							}
+						}
+					]
+				}
+			OpenDialog(htmlObj,obj)
+			break;
 			}
-		}
-	);
-}
-function edit(_id,stype){
-	if(stype=="1"){
-		window.location.href="/admin/rulepre/newlua?version={{.version}}&_id="+_id
-	}
-	$.ajax({
-		url:"/admin/rulepre/searchbyid",
-		type:"post",
-		data:{"_id":_id},
-		success:function(r){
-			if(r.rep){
-				$.setForm('#dataform',r.rep);
-			}	
-		}
+		});
 	})
-	$("#modal-info").modal("show");
-}
+})
+
 function del(_id){
 	showConfirm("确定删除?", function() {
 		$.ajax({

+ 5 - 42
src/web/templates/admin/rule_prelua.html

@@ -3,14 +3,6 @@
 {{template "header"}}
 <!-- Left side column. 权限菜单 -->
 {{template "memu"}}
-<link rel="stylesheet" href="/res/plugins/codemirror/codemirror.css">
-<link rel="stylesheet"  href="/res/plugins/codemirror/theme/solarized.css">
-<link rel="stylesheet"  href="/res/plugins/codemirror/theme/abcdef.css">
-<link rel="stylesheet" href="/res/plugins/codemirror/theme/the-matrix.css">
-<script src="/res/plugins/codemirror/codemirror.js"></script>
-<script src="/res/plugins/codemirror/lua.js"></script>
-<script src="/res/plugins/codemirror/fullscreen.js"></script>
-
 <!-- Content Wrapper. Contains page content -->
 <div class="content-wrapper">
 	<section class="content-header">
@@ -25,48 +17,19 @@
   <section class="content">
     	<form id="dataform" class="form-horizontal">
 			<fieldset data-mode="expert">
-				<legend></legend>
-				<div class="form-group">
-				    <div class="col-sm-3">
-					    <label for="code" class="col-sm-3 control-label">名称:</label>
-					    <div class="col-sm-9">
-					      <input name="name" value="{{.data.name}}" type="text" class="form-control" placeholder="名称">
-					    </div>
-				    </div>
-				    <div class="col-sm-3">
-						<label for="code" class="col-sm-3 control-label">版本:</label>
-					    <div class="col-sm-9">
-					      <input name="version" value="{{.version}}"  type="text" class="form-control" disabled>
-					    </div>
-				    </div>
-					<div class="col-sm-3">
-						<label for="code" class="col-sm-3 control-label">描述:</label>
-					    <div class="col-sm-9">
-					      <input name="descript" value="{{.data.descript}}" type="text" class="form-control" placeholder="描述">
-					    </div>
-				    </div>
-					<div class="col-sm-3">
-						<label for="code" class="col-sm-3 control-label">类型:</label>
-					    <div class="col-sm-9">
-					      	<label class="radio-inline">
-						        <input type="radio" name="type" value="1" checked readonly> lua脚本
-						    </label>
-					    </div>
-				    </div>
-				</div>
-				<textarea id="luastr" name="luastr">{{.data.luastr}}</textarea>
+				<textarea id="luastr" name="s_luastr">{{.data.s_luastr}}</textarea>
 			</fieldset>
-			<input name="username" type="hidden" value={{index (session "user") "name" }}>
+			<input type="hidden" name="_id" value={{.data._id}}>
+			<input type="hidden" name="s_type" value="1">
+			<input type="hidden" name="s_version" value="{{.version}}">
 		</form>
   </section>
 </div>
-	
-<!-- footer -->
+{{template "luares"}}
 {{template "footer"}}
 
 <script>
 menuActive("version")
-com.initMirror();
 function save(){
 	$.post("/admin/rulepre/save",
 		com.serializeArray("dataform"),