fengweiqiang há 6 anos atrás
pai
commit
59f6e889cf
2 ficheiros alterados com 645 adições e 415 exclusões
  1. 423 412
      src/jy/admin/version.go
  2. 222 3
      src/web/templates/admin/version.html

+ 423 - 412
src/jy/admin/version.go

@@ -1,412 +1,423 @@
-// version
-package admin
-
-import (
-	. "jy/mongodbutil"
-	"jy/util"
-	"net/http"
-	qu "qfw/util"
-	"strings"
-	"time"
-
-	"github.com/gin-contrib/sessions"
-	"github.com/gin-gonic/gin"
-)
-
-func init() {
-	Admin.GET("/version", func(c *gin.Context) {
-		c.HTML(
-			http.StatusOK, "version.html",
-			gin.H{},
-		)
-	})
-	//任务版本
-	Admin.POST("/version/data", func(c *gin.Context) {
-		data, _ := Mgo.Find("version", `{"delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
-		c.JSON(200, gin.H{"data": data})
-	})
-	Admin.POST("/version/save", func(c *gin.Context) {
-		_id, _ := c.GetPostForm("_id")
-		data := GetPostForm(c)
-		if _id != "" {
-			Mgo.UpdateById("version", _id, map[string]interface{}{"$set": data})
-			c.JSON(200, gin.H{"rep": true})
-		} else {
-			version, _ := c.GetPostForm("version")
-			tmp, _ := Mgo.FindOne("version", `{"version":"`+version+`","delete":false}`)
-			if len(*tmp) > 0 {
-				c.JSON(200, gin.H{"rep": false})
-			} else {
-				s_pversionid, _ := c.GetPostForm("s_pversionid")
-				iscopyfiled, _ := data["iscopyfiled"].(bool)
-				data["l_createtime"] = time.Now().Unix()
-				s_username := sessions.Default(c).Get("username").(string)
-				data["s_username"] = s_username
-				data["delete"] = false
-				vid := Mgo.Save("version", data)
-				if s_pversionid != "" {
-					copyComRules(version, s_pversionid, s_username)
-				}
-				if iscopyfiled {
-					list, _ := Mgo.Find("versioninfo", `{"vid":"`+s_pversionid+`","delete":false}`, nil, nil, false, -1, -1)
-					for _, v := range *list {
-						delete(v, "_id")
-						v["l_createtime"] = time.Now().Unix()
-						v["s_username"] = sessions.Default(c).Get("username")
-						v["l_lasttime"] = time.Now().Unix()
-						v["vid"] = vid
-						v["delete"] = false
-						pid := Mgo.Save("versioninfo", v)
-						s_field := qu.ObjToString(v["s_field"])
-						//克隆属性配置
-						copyFieldRules(vid, pid, s_field, s_pversionid, s_username)
-					}
-					//克隆分包属性
-					list2, _ := Mgo.Find("pkg_info", `{"vid":"`+s_pversionid+`","delete":false}`, nil, nil, false, -1, -1)
-					for _, v := range *list2 {
-						delete(v, "_id")
-						v["l_createtime"] = time.Now().Unix()
-						v["s_username"] = sessions.Default(c).Get("username")
-						v["l_lasttime"] = time.Now().Unix()
-						v["vid"] = vid
-						v["delete"] = false
-						pid := Mgo.Save("pkg_info", v)
-						s_field := qu.ObjToString(v["s_field"])
-						//克隆属性配置
-						copyPkgRules(vid, pid, s_field, s_pversionid, s_username)
-					}
-				}
-				c.JSON(200, gin.H{"rep": true})
-			}
-		}
-	})
-	Admin.POST("/version/use", func(c *gin.Context) {
-		_id, _ := c.GetPostForm("_id")
-		isuse, _ := c.GetPostForm("isuse")
-		if isuse == "true" { //启用确保只有一个版本
-			l, _ := Mgo.Find("version", `{"isuse":true,"delete":false}`, nil, nil, false, -1, -1)
-			if len(*l) > 0 {
-				c.JSON(200, gin.H{"rep": false})
-				return
-			}
-		}
-		bisuse := false
-		if isuse == "true" {
-			bisuse = true
-		}
-		set := map[string]interface{}{
-			"$set": map[string]interface{}{
-				"isuse": bisuse,
-			},
-		}
-		b := Mgo.UpdateById("version", _id, set)
-		c.JSON(200, gin.H{"rep": b})
-	})
-	Admin.POST("/version/del", func(c *gin.Context) { //删除版本
-		_id, _ := c.GetPostForm("_id")
-		s_version, _ := c.GetPostForm("version")
-		b := Mgo.UpdateById("version", _id, `{"$set":{"delete":true}}`)
-		//b := Mgo.Del("version", `{"_id":"`+_id+`"}`)
-		//级联删除
-		//刪除属性配置
-		//删除分包配置
-		//删除逻辑
-		//删除属性配置中的前置规则
-		//删除属性配置中的抽取规则
-		//删除属性配置中的后置规则
-
-		//刪除属性配置
-		go DelVersionInfo(_id)
-		//删除分包配置
-		go DelPkgInfo(_id)
-		//删除版本的通用前置规则
-		go DelRulePre(s_version)
-		//删除版本的通用后置规则
-		go DelRuleBack(s_version)
-		//删除标签库
-		go DelTag(s_version)
-		//删除版本的通用前置规则
-		go DelCleanUp(s_version)
-		c.JSON(200, gin.H{"rep": b})
-	})
-	Admin.GET("/version/info", func(c *gin.Context) {
-		vid := c.Query("vid")
-		v, _ := Mgo.Find("version", `{}`, `{"_id":-1}`, `{"version":1}`, false, -1, -1)
-		c.HTML(
-			http.StatusOK, "versioninfo.html",
-			gin.H{"vid": vid, "versions": v},
-		)
-	})
-	Admin.POST("/version/infodata", func(c *gin.Context) {
-		vid, _ := c.GetPostForm("vid")
-		list, _ := Mgo.Find("versioninfo", `{"vid":"`+vid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
-		c.JSON(200, gin.H{"data": list, "vid": vid})
-	})
-	Admin.POST("/version/infosave", func(c *gin.Context) {
-		_id, _ := c.GetPostForm("_id")
-		data := GetPostForm(c)
-		if _id != "" {
-			Mgo.UpdateById("versioninfo", _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("versioninfo", `{"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("versioninfo", 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/infouse", func(c *gin.Context) {
-		_id, _ := c.GetPostForm("_id")
-		isuse, _ := c.GetPostForm("isuse")
-		b := Mgo.UpdateById("versioninfo", _id, `{"$set":{"isuse":`+isuse+`}}`)
-		c.JSON(200, gin.H{"rep": b})
-	})
-	Admin.POST("/version/infodel", func(c *gin.Context) {
-		_id, _ := c.GetPostForm("_id")
-		b := Mgo.UpdateById("versioninfo", _id, `{"$set":{"delete":true}}`)
-		v, _ := Mgo.FindById("versioninfo", _id, `{"vid":1}`)
-		go DelLogic(qu.ObjToString((*v)["vid"]), _id)
-		//b := Mgo.Del("versioninfo", `{"_id":"`+_id+`"}`)
-		c.JSON(200, gin.H{"rep": b})
-	})
-	Admin.GET("/version/pkginfo", func(c *gin.Context) {
-		vid := c.Query("vid")
-		c.HTML(
-			http.StatusOK, "pkg_info.html",
-			gin.H{"vid": vid},
-		)
-	})
-	Admin.POST("/version/pkginfodata", func(c *gin.Context) {
-		vid, _ := c.GetPostForm("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 != "" {
-					//克隆分包属性
-					copyPkgRules(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})
-	})
-	Admin.POST("/version/pkginfodel", func(c *gin.Context) {
-		_id, _ := c.GetPostForm("_id")
-		b := Mgo.UpdateById("pkg_info", _id, `{"$set":{"delete":true}}`)
-		v, _ := Mgo.FindById("pkg_info", _id, `{"vid":1}`)
-		go DelPkgLogic(qu.ObjToString((*v)["vid"]), _id)
-		//b := Mgo.Del("versioninfo", `{"_id":"`+_id+`"}`)
-		c.JSON(200, gin.H{"rep": b})
-	})
-}
-
-//克隆版本通用属性
-func copyComRules(version, pvid, s_username string) {
-	tmp, _ := Mgo.FindById("version", pvid, nil)
-	oldversion := (*tmp)["version"].(string)
-	//克隆前置规则
-	plist, _ := Mgo.Find("rule_pre", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
-	for _, v := range *plist {
-		delete(v, "_id")
-		v["s_version"] = version
-		v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
-		v["s_username"] = s_username
-		v["l_createtime"] = time.Now().Unix()
-		v["l_lasttime"] = time.Now().Unix()
-		Mgo.Save("rule_pre", v)
-	}
-	//克隆后置规则
-	blist, _ := Mgo.Find("rule_back", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
-	for _, v := range *blist {
-		delete(v, "_id")
-		v["s_version"] = version
-		v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
-		v["s_username"] = s_username
-		v["l_createtime"] = time.Now().Unix()
-		v["l_lasttime"] = time.Now().Unix()
-		Mgo.Save("rule_back", v)
-	}
-	//克隆tag
-	tlist, _ := Mgo.Find("tag", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
-	for _, v := range *tlist {
-		oldId := qu.BsonIdToSId(v["_id"])
-		delete(v, "_id")
-		v["s_version"] = version
-		v["s_creater"] = s_username
-		v["l_intime"] = time.Now().Unix()
-		newId := Mgo.Save("tag", v) //克隆父标签
-		td, _ := Mgo.Find("tagdetailinfo", `{"s_parentid":"`+oldId+`","delete":false}`, nil, nil, false, -1, -1)
-		for _, v2 := range *td {
-			delete(v2, "_id")
-			v2["s_version"] = version
-			v2["s_creater"] = s_username
-			v2["l_intime"] = time.Now().Unix()
-			v2["s_parentid"] = newId
-			Mgo.Save("tagdetailinfo", v2) //克隆详细标签
-		}
-	}
-	//克隆函数
-	clist, _ := Mgo.Find("cleanup", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
-	for _, v := range *clist {
-		delete(v, "_id")
-		v["s_version"] = version
-		v["s_creater"] = s_username
-		v["l_intime"] = time.Now().Unix()
-		Mgo.Save("cleanup", v)
-	}
-}
-
-func copyPkgRules(vid, pid, s_field, oldvid, s_username string) {
-	tmp, _ := Mgo.FindOne("pkg_info", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
-	oldpid := qu.BsonIdToSId((*tmp)["_id"])
-	//克隆逻辑列表
-	logicList, _ := Mgo.Find("pkg_logic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`, `{"_id":1}`, nil, false, -1, -1)
-	for _, logic := range *logicList {
-		if len(logic) > 0 {
-			oldsid := qu.BsonIdToSId(logic["_id"])
-			delete(logic, "_id")
-			logic["vid"] = vid
-			logic["pid"] = pid
-			logic["l_createtime"] = time.Now().Unix()
-			logic["l_lasttime"] = time.Now().Unix()
-			logic["s_username"] = s_username
-			sid := Mgo.Save("pkg_logic", logic)
-			//克隆过滤规则
-			blist, _ := Mgo.Find("pkg_logicback", `{"sid":"`+oldsid+`","delete":false}`, `{"_id":1}`, nil, false, -1, -1)
-			for _, v := range *blist {
-				delete(v, "_id")
-				v["vid"] = vid
-				v["pid"] = pid
-				v["sid"] = sid
-				v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
-				v["s_username"] = s_username
-				v["l_createtime"] = time.Now().Unix()
-				v["l_lasttime"] = time.Now().Unix()
-				Mgo.Save("pkg_logicback", v)
-			}
-		}
-	}
-
-}
-
-//克隆版本Field
-func copyFieldRules(vid, pid, s_field, oldvid, s_username string) {
-	tmp, _ := Mgo.FindOne("versioninfo", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
-	oldpid := qu.BsonIdToSId((*tmp)["_id"])
-	//克隆逻辑列表
-	logicList, _ := Mgo.Find("rule_logic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`, `{"_id":1}`, nil, false, -1, -1)
-	for _, logic := range *logicList {
-		if len(logic) > 0 {
-			oldsid := qu.BsonIdToSId(logic["_id"])
-			delete(logic, "_id")
-			logic["vid"] = vid
-			logic["pid"] = pid
-			logic["l_createtime"] = time.Now().Unix()
-			logic["l_lasttime"] = time.Now().Unix()
-			logic["s_username"] = s_username
-			sid := Mgo.Save("rule_logic", logic)
-			//克隆前置规则
-			plist, _ := Mgo.Find("rule_logicpre", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
-			for _, v := range *plist {
-				delete(v, "_id")
-				v["vid"] = vid
-				v["pid"] = pid
-				v["sid"] = sid
-				v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
-				v["s_username"] = s_username
-				v["l_createtime"] = time.Now().Unix()
-				v["l_lasttime"] = time.Now().Unix()
-				Mgo.Save("rule_logicpre", v)
-			}
-			//克隆抽取规则
-			elist, _ := Mgo.Find("rule_logicore", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
-			for _, v := range *elist {
-				delete(v, "_id")
-				v["vid"] = vid
-				v["pid"] = pid
-				v["sid"] = sid
-				v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
-				v["s_username"] = s_username
-				v["l_createtime"] = time.Now().Unix()
-				v["l_lasttime"] = time.Now().Unix()
-				Mgo.Save("rule_logicore", v)
-			}
-			//克隆过滤规则
-			blist, _ := Mgo.Find("rule_logicback", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
-			for _, v := range *blist {
-				delete(v, "_id")
-				v["vid"] = vid
-				v["pid"] = pid
-				v["sid"] = sid
-				v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
-				v["s_username"] = s_username
-				v["l_createtime"] = time.Now().Unix()
-				v["l_lasttime"] = time.Now().Unix()
-				Mgo.Save("rule_logicback", v)
-			}
-		}
-	}
-
-}
-
-//克隆清理版本Field
-func copyClearRuleLogic(vid, pid, s_field, oldvid, s_username string) {
-	tmp, _ := Mgo.FindOne("clearversioninfo", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
-	oldpid := qu.BsonIdToSId((*tmp)["_id"])
-	elist, _ := Mgo.Find("clearulelogic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`, nil, nil, false, -1, -1)
-	for _, v := range *elist {
-		delete(v, "_id")
-		v["vid"] = vid
-		v["pid"] = pid
-		v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
-		v["s_username"] = s_username
-		v["l_createtime"] = time.Now().Unix()
-		v["l_lasttime"] = time.Now().Unix()
-		Mgo.Save("clearulelogic", v)
-	}
-
-}
-
-//获取代码
-func getCode(code string) string {
-	tmps := strings.Split(code, "_")
-	tmp := tmps[:len(tmps)-1]
-	return strings.Join(tmp, "_")
-}
+// version
+package admin
+
+import (
+	"github.com/gin-contrib/sessions"
+	"github.com/gin-gonic/gin"
+	"gopkg.in/mgo.v2/bson"
+	. "jy/mongodbutil"
+	"jy/util"
+	"net/http"
+	qu "qfw/util"
+	"strings"
+	"time"
+)
+
+func init() {
+	Admin.GET("/version", func(c *gin.Context) {
+		c.HTML(
+			http.StatusOK, "version.html",
+			gin.H{},
+		)
+	})
+	//任务版本
+	Admin.POST("/version/data", func(c *gin.Context) {
+		data, _ := Mgo.Find("version", `{"delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
+		c.JSON(200, gin.H{"data": data})
+	})
+	//根据_id查询版本详细信息
+	Admin.GET("/version/dataById", func(c *gin.Context) {
+		gid ,b :=c.GetQuery("_id")
+		if !b || !bson.IsObjectIdHex(gid){
+			c.JSON(400,gin.H{"req":false})
+			return
+		}
+
+		data, _ := Mgo.FindOne("version", `{"_id":"`+gid+`","delete":false}`)
+		c.JSON(200, gin.H{"req":true,"data": data})
+	})
+	Admin.POST("/version/save", func(c *gin.Context) {
+		_id, _ := c.GetPostForm("_id")
+		data := GetPostForm(c)
+		if _id != "" {
+			Mgo.UpdateById("version", _id, map[string]interface{}{"$set": data})
+			c.JSON(200, gin.H{"rep": true})
+		} else {
+			version, _ := c.GetPostForm("version")
+			tmp, _ := Mgo.FindOne("version", `{"version":"`+version+`","delete":false}`)
+			if len(*tmp) > 0 {
+				c.JSON(200, gin.H{"rep": false})
+			} else {
+				s_pversionid, _ := c.GetPostForm("s_pversionid")
+				iscopyfiled, _ := data["iscopyfiled"].(bool)
+				data["l_createtime"] = time.Now().Unix()
+				s_username := sessions.Default(c).Get("username").(string)
+				data["s_username"] = s_username
+				data["delete"] = false
+				vid := Mgo.Save("version", data)
+				if s_pversionid != "" {
+					copyComRules(version, s_pversionid, s_username)
+				}
+				if iscopyfiled {
+					list, _ := Mgo.Find("versioninfo", `{"vid":"`+s_pversionid+`","delete":false}`, nil, nil, false, -1, -1)
+					for _, v := range *list {
+						delete(v, "_id")
+						v["l_createtime"] = time.Now().Unix()
+						v["s_username"] = sessions.Default(c).Get("username")
+						v["l_lasttime"] = time.Now().Unix()
+						v["vid"] = vid
+						v["delete"] = false
+						pid := Mgo.Save("versioninfo", v)
+						s_field := qu.ObjToString(v["s_field"])
+						//克隆属性配置
+						copyFieldRules(vid, pid, s_field, s_pversionid, s_username)
+					}
+					//克隆分包属性
+					list2, _ := Mgo.Find("pkg_info", `{"vid":"`+s_pversionid+`","delete":false}`, nil, nil, false, -1, -1)
+					for _, v := range *list2 {
+						delete(v, "_id")
+						v["l_createtime"] = time.Now().Unix()
+						v["s_username"] = sessions.Default(c).Get("username")
+						v["l_lasttime"] = time.Now().Unix()
+						v["vid"] = vid
+						v["delete"] = false
+						pid := Mgo.Save("pkg_info", v)
+						s_field := qu.ObjToString(v["s_field"])
+						//克隆属性配置
+						copyPkgRules(vid, pid, s_field, s_pversionid, s_username)
+					}
+				}
+				c.JSON(200, gin.H{"rep": true})
+			}
+		}
+	})
+	Admin.POST("/version/use", func(c *gin.Context) {
+		_id, _ := c.GetPostForm("_id")
+		isuse, _ := c.GetPostForm("isuse")
+		if isuse == "true" { //启用确保只有一个版本
+			l, _ := Mgo.Find("version", `{"isuse":true,"delete":false}`, nil, nil, false, -1, -1)
+			if len(*l) > 0 {
+				c.JSON(200, gin.H{"rep": false})
+				return
+			}
+		}
+		bisuse := false
+		if isuse == "true" {
+			bisuse = true
+		}
+		set := map[string]interface{}{
+			"$set": map[string]interface{}{
+				"isuse": bisuse,
+			},
+		}
+		b := Mgo.UpdateById("version", _id, set)
+		c.JSON(200, gin.H{"rep": b})
+	})
+	Admin.POST("/version/del", func(c *gin.Context) { //删除版本
+		_id, _ := c.GetPostForm("_id")
+		s_version, _ := c.GetPostForm("version")
+		b := Mgo.UpdateById("version", _id, `{"$set":{"delete":true}}`)
+		//b := Mgo.Del("version", `{"_id":"`+_id+`"}`)
+		//级联删除
+		//刪除属性配置
+		//删除分包配置
+		//删除逻辑
+		//删除属性配置中的前置规则
+		//删除属性配置中的抽取规则
+		//删除属性配置中的后置规则
+
+		//刪除属性配置
+		go DelVersionInfo(_id)
+		//删除分包配置
+		go DelPkgInfo(_id)
+		//删除版本的通用前置规则
+		go DelRulePre(s_version)
+		//删除版本的通用后置规则
+		go DelRuleBack(s_version)
+		//删除标签库
+		go DelTag(s_version)
+		//删除版本的通用前置规则
+		go DelCleanUp(s_version)
+		c.JSON(200, gin.H{"rep": b})
+	})
+	Admin.GET("/version/info", func(c *gin.Context) {
+		vid := c.Query("vid")
+		v, _ := Mgo.Find("version", `{}`, `{"_id":-1}`, `{"version":1}`, false, -1, -1)
+		c.HTML(
+			http.StatusOK, "versioninfo.html",
+			gin.H{"vid": vid, "versions": v},
+		)
+	})
+	Admin.POST("/version/infodata", func(c *gin.Context) {
+		vid, _ := c.GetPostForm("vid")
+		list, _ := Mgo.Find("versioninfo", `{"vid":"`+vid+`","delete":false}`, `{"_id":-1}`, nil, false, -1, -1)
+		c.JSON(200, gin.H{"data": list, "vid": vid})
+	})
+	Admin.POST("/version/infosave", func(c *gin.Context) {
+		_id, _ := c.GetPostForm("_id")
+		data := GetPostForm(c)
+		if _id != "" {
+			Mgo.UpdateById("versioninfo", _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("versioninfo", `{"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("versioninfo", 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/infouse", func(c *gin.Context) {
+		_id, _ := c.GetPostForm("_id")
+		isuse, _ := c.GetPostForm("isuse")
+		b := Mgo.UpdateById("versioninfo", _id, `{"$set":{"isuse":`+isuse+`}}`)
+		c.JSON(200, gin.H{"rep": b})
+	})
+	Admin.POST("/version/infodel", func(c *gin.Context) {
+		_id, _ := c.GetPostForm("_id")
+		b := Mgo.UpdateById("versioninfo", _id, `{"$set":{"delete":true}}`)
+		v, _ := Mgo.FindById("versioninfo", _id, `{"vid":1}`)
+		go DelLogic(qu.ObjToString((*v)["vid"]), _id)
+		//b := Mgo.Del("versioninfo", `{"_id":"`+_id+`"}`)
+		c.JSON(200, gin.H{"rep": b})
+	})
+	Admin.GET("/version/pkginfo", func(c *gin.Context) {
+		vid := c.Query("vid")
+		c.HTML(
+			http.StatusOK, "pkg_info.html",
+			gin.H{"vid": vid},
+		)
+	})
+	Admin.POST("/version/pkginfodata", func(c *gin.Context) {
+		vid, _ := c.GetPostForm("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 != "" {
+					//克隆分包属性
+					copyPkgRules(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})
+	})
+	Admin.POST("/version/pkginfodel", func(c *gin.Context) {
+		_id, _ := c.GetPostForm("_id")
+		b := Mgo.UpdateById("pkg_info", _id, `{"$set":{"delete":true}}`)
+		v, _ := Mgo.FindById("pkg_info", _id, `{"vid":1}`)
+		go DelPkgLogic(qu.ObjToString((*v)["vid"]), _id)
+		//b := Mgo.Del("versioninfo", `{"_id":"`+_id+`"}`)
+		c.JSON(200, gin.H{"rep": b})
+	})
+}
+
+//克隆版本通用属性
+func copyComRules(version, pvid, s_username string) {
+	tmp, _ := Mgo.FindById("version", pvid, nil)
+	oldversion := (*tmp)["version"].(string)
+	//克隆前置规则
+	plist, _ := Mgo.Find("rule_pre", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
+	for _, v := range *plist {
+		delete(v, "_id")
+		v["s_version"] = version
+		v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
+		v["s_username"] = s_username
+		v["l_createtime"] = time.Now().Unix()
+		v["l_lasttime"] = time.Now().Unix()
+		Mgo.Save("rule_pre", v)
+	}
+	//克隆后置规则
+	blist, _ := Mgo.Find("rule_back", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
+	for _, v := range *blist {
+		delete(v, "_id")
+		v["s_version"] = version
+		v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
+		v["s_username"] = s_username
+		v["l_createtime"] = time.Now().Unix()
+		v["l_lasttime"] = time.Now().Unix()
+		Mgo.Save("rule_back", v)
+	}
+	//克隆tag
+	tlist, _ := Mgo.Find("tag", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
+	for _, v := range *tlist {
+		oldId := qu.BsonIdToSId(v["_id"])
+		delete(v, "_id")
+		v["s_version"] = version
+		v["s_creater"] = s_username
+		v["l_intime"] = time.Now().Unix()
+		newId := Mgo.Save("tag", v) //克隆父标签
+		td, _ := Mgo.Find("tagdetailinfo", `{"s_parentid":"`+oldId+`","delete":false}`, nil, nil, false, -1, -1)
+		for _, v2 := range *td {
+			delete(v2, "_id")
+			v2["s_version"] = version
+			v2["s_creater"] = s_username
+			v2["l_intime"] = time.Now().Unix()
+			v2["s_parentid"] = newId
+			Mgo.Save("tagdetailinfo", v2) //克隆详细标签
+		}
+	}
+	//克隆函数
+	clist, _ := Mgo.Find("cleanup", `{"s_version":"`+oldversion+`","delete":false}`, nil, nil, false, -1, -1)
+	for _, v := range *clist {
+		delete(v, "_id")
+		v["s_version"] = version
+		v["s_creater"] = s_username
+		v["l_intime"] = time.Now().Unix()
+		Mgo.Save("cleanup", v)
+	}
+}
+
+func copyPkgRules(vid, pid, s_field, oldvid, s_username string) {
+	tmp, _ := Mgo.FindOne("pkg_info", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
+	oldpid := qu.BsonIdToSId((*tmp)["_id"])
+	//克隆逻辑列表
+	logicList, _ := Mgo.Find("pkg_logic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`, `{"_id":1}`, nil, false, -1, -1)
+	for _, logic := range *logicList {
+		if len(logic) > 0 {
+			oldsid := qu.BsonIdToSId(logic["_id"])
+			delete(logic, "_id")
+			logic["vid"] = vid
+			logic["pid"] = pid
+			logic["l_createtime"] = time.Now().Unix()
+			logic["l_lasttime"] = time.Now().Unix()
+			logic["s_username"] = s_username
+			sid := Mgo.Save("pkg_logic", logic)
+			//克隆过滤规则
+			blist, _ := Mgo.Find("pkg_logicback", `{"sid":"`+oldsid+`","delete":false}`, `{"_id":1}`, nil, false, -1, -1)
+			for _, v := range *blist {
+				delete(v, "_id")
+				v["vid"] = vid
+				v["pid"] = pid
+				v["sid"] = sid
+				v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
+				v["s_username"] = s_username
+				v["l_createtime"] = time.Now().Unix()
+				v["l_lasttime"] = time.Now().Unix()
+				Mgo.Save("pkg_logicback", v)
+			}
+		}
+	}
+
+}
+
+//克隆版本Field
+func copyFieldRules(vid, pid, s_field, oldvid, s_username string) {
+	tmp, _ := Mgo.FindOne("versioninfo", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
+	oldpid := qu.BsonIdToSId((*tmp)["_id"])
+	//克隆逻辑列表
+	logicList, _ := Mgo.Find("rule_logic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`, `{"_id":1}`, nil, false, -1, -1)
+	for _, logic := range *logicList {
+		if len(logic) > 0 {
+			oldsid := qu.BsonIdToSId(logic["_id"])
+			delete(logic, "_id")
+			logic["vid"] = vid
+			logic["pid"] = pid
+			logic["l_createtime"] = time.Now().Unix()
+			logic["l_lasttime"] = time.Now().Unix()
+			logic["s_username"] = s_username
+			sid := Mgo.Save("rule_logic", logic)
+			//克隆前置规则
+			plist, _ := Mgo.Find("rule_logicpre", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
+			for _, v := range *plist {
+				delete(v, "_id")
+				v["vid"] = vid
+				v["pid"] = pid
+				v["sid"] = sid
+				v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
+				v["s_username"] = s_username
+				v["l_createtime"] = time.Now().Unix()
+				v["l_lasttime"] = time.Now().Unix()
+				Mgo.Save("rule_logicpre", v)
+			}
+			//克隆抽取规则
+			elist, _ := Mgo.Find("rule_logicore", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
+			for _, v := range *elist {
+				delete(v, "_id")
+				v["vid"] = vid
+				v["pid"] = pid
+				v["sid"] = sid
+				v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
+				v["s_username"] = s_username
+				v["l_createtime"] = time.Now().Unix()
+				v["l_lasttime"] = time.Now().Unix()
+				Mgo.Save("rule_logicore", v)
+			}
+			//克隆过滤规则
+			blist, _ := Mgo.Find("rule_logicback", `{"sid":"`+oldsid+`","delete":false}`, nil, nil, false, -1, -1)
+			for _, v := range *blist {
+				delete(v, "_id")
+				v["vid"] = vid
+				v["pid"] = pid
+				v["sid"] = sid
+				v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
+				v["s_username"] = s_username
+				v["l_createtime"] = time.Now().Unix()
+				v["l_lasttime"] = time.Now().Unix()
+				Mgo.Save("rule_logicback", v)
+			}
+		}
+	}
+
+}
+
+//克隆清理版本Field
+func copyClearRuleLogic(vid, pid, s_field, oldvid, s_username string) {
+	tmp, _ := Mgo.FindOne("clearversioninfo", `{"vid":"`+oldvid+`","s_field":"`+s_field+`","delete":false}`)
+	oldpid := qu.BsonIdToSId((*tmp)["_id"])
+	elist, _ := Mgo.Find("clearulelogic", `{"vid":"`+oldvid+`","pid":"`+oldpid+`","delete":false}`, nil, nil, false, -1, -1)
+	for _, v := range *elist {
+		delete(v, "_id")
+		v["vid"] = vid
+		v["pid"] = pid
+		v["s_code"] = util.GetSyncIndex(getCode(v["s_code"].(string)))
+		v["s_username"] = s_username
+		v["l_createtime"] = time.Now().Unix()
+		v["l_lasttime"] = time.Now().Unix()
+		Mgo.Save("clearulelogic", v)
+	}
+
+}
+
+//获取代码
+func getCode(code string) string {
+	tmps := strings.Split(code, "_")
+	tmp := tmps[:len(tmps)-1]
+	return strings.Join(tmp, "_")
+}

+ 222 - 3
src/web/templates/admin/version.html

@@ -3,12 +3,16 @@
 {{template "header"}}
 <!-- Left side column. 权限菜单 -->
 {{template "memu"}}
+<link href="../res/doublebox/css/hdw.css" rel="stylesheet" type="text/css">
+<style>.myred{ color:red;   }</style>
+<script src="../res/doublebox/js/hdw.js"></script>
 
 <!-- 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><button type="button" class="btn btn-primary" data-toggle="modal" onclick='createOneVersion("")'>新增版本</button></small>
 		</h1>
 		<ol class="breadcrumb">
 		  <li><a href="/admin/version"><i class="fa fa-dashboard"></i>抽取版本</a></li>
@@ -40,7 +44,90 @@
 	</div>
   </section>
 </div>
-	
+<!--新增函数-->
+<div class="modal fade" id="modal-info-version" >
+	<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 myred"  >版本名称:</label>
+						<div class="col-sm-10">
+							<input name="name" type="text" id="version" value="" class="form-control" placeholder="版本名称">
+						</div>
+					</div>
+					<div class="form-group" >
+						<label for="code" class="col-sm-2 control-label myred" >描述:</label>
+						<div class="col-sm-10">
+							<input name="name" type="text" id="s_descript" value="" class="form-control" placeholder="描述信息">
+						</div>
+					</div>
+					<div class="form-group">
+						<label for="code" id="fieldname" class="col-sm-2 control-label">城市抽取:</label>
+						<div class="col-sm-10">
+							<select class="form-control isextractcity_class" id="isextractcity">
+								<option value=false>否</option>
+								<option value=true>是</option>
+							</select>
+						</div>
+					</div>
+					<div class="form-group">
+						<label for="code" id="fieldname" class="col-sm-2 control-label">克隆版本:</label>
+						<div class="col-sm-10">
+							<select id="s_pversionid" name="v1" class="form-control">
+							</select>
+						</div>
+					</div>
+					<div class="form-group">
+						<label for="code" id="fieldname" class="col-sm-2 control-label">克隆属性:</label>
+						<div class="col-sm-10">
+							<select class="form-control" id="iscopyfiled">
+								<option value=false>否</option>
+								<option value=true>是</option>
+							</select>
+						</div>
+					</div>
+					<div class="form-group">
+						<label for="code" id="fieldname" class="col-sm-2 control-label">是否附件:</label>
+						<div class="col-sm-10">
+							<select class="form-control" id="isfiles">
+								<option value=false>否</option>
+								<option value=true>是</option>
+							</select>
+						</div>
+					</div>
+					<div class="form-group">
+						<label for="code" class="col-sm-2 control-label">导出属性:</label>
+						<div class="col-sm-10" id="selectclear">
+							<div class="doublebox">
+								<select multiple="multiple" id="select1" style="overflow-x: scroll;"></select>
+							</div>
+							<div class="move">
+								<button type="button" id="right" class="btn btn-primary">右移</button>
+								<button type="button" id="left" class="btn btn-primary">左移</button>
+							</div>
+							<div class="doublebox">
+								<select multiple="multiple" id="select2" style="overflow-x: scroll;"></select>
+							</div>
+						</div>
+					</div>
+				</div>
+				<div class="modal-footer">
+					<button type="button" class="btn btn-default cancel" data-dismiss="modal" onclick="reset()">取消</button>
+					<button type="button" class="btn btn-primary save" onclick="save()">保存</button>
+				</div>
+			</div>
+			<!-- /.modal-content -->
+			<input type="hidden" name="_id" value="">
+		</form>
+	</div>
+	<!-- /.modal-dialog -->
+</div>
 <!-- footer -->
 {{template "dialog"}}
 {{template "footer"}}
@@ -89,7 +176,8 @@ $(function () {
 				return '<div class="btn-group">'+
 						'<a class="btn btn-sm btn-success" href="/admin/version/info?vid='+val+'" >属性配置</a>'+
 						'<a class="btn btn-sm btn-info" href="/admin/version/pkginfo?vid='+val+'" >分包配置</a>'+
-						'<a class="btn btn-sm btn-primary opr" opr="edit">编&nbsp;&nbsp;辑</a>'+
+						'<a class="btn btn-sm btn-primary opr" opr="edit">编&nbsp;&nbsp;辑1</a>'+
+						"<a class=\"btn btn-sm btn-primary opr\" href='#' onclick=\"edit('"+val+"')\">编&nbsp;&nbsp;辑</a> &nbsp;"+
 						'<a class="btn btn-sm btn-danger" href="#" onclick="del(\''+val+'\',\''+row["version"]+'\')">删&nbsp;&nbsp;除</a>'
 					'</div>';
 			}}
@@ -109,6 +197,8 @@ $(function () {
 					{label:"城市抽取",s_label:"isextractcity",type:"tpl_list_local",list:[{"s_name":"是","_id":true},{"s_name":"否","_id":false}],default:false},
 					{label:"克隆版本",s_label:"s_pversionid",type:"tpl_list_local",url:"/admin/getversions"},
 					{label:"克隆属性",s_label:"iscopyfiled",type:"tpl_list_local",list:[{"s_name":"是","_id":true},{"s_name":"否","_id":false}],default:false},
+					{label:"是否附件",s_label:"isfiles",type:"tpl_list_local",list:[{"s_name":"是","_id":true},{"s_name":"否","_id":false}],default:false},
+					{label:"附件字段",s_label:"s_filefileds",type:"tpl_list_local",url:"/admin/getfields"},
 					{s_label:"isuse",type:"tpl_hidden"},
 					{s_label:"_id",type:"tpl_hidden"}
 				]
@@ -134,7 +224,9 @@ $(function () {
 										return false
 									}
 								})
-								if (bcon){	
+                                console.log(obj)
+                                return;
+								if (bcon){
 									if(obj.isuse != "true"){
 										obj.isuse = false
 									}
@@ -196,4 +288,131 @@ function del(_id,version){
 		})
 	});
 }
+var field = {{.field}};
+var clearMap = {"资金来源": "funds","中标单位":"winner","招标机构": "agency","项目范围": "projectscope",
+	"项目编号": "projectcode","评标方法": "bidmethod", "开标日期": "bidopentime","监理项目费率": "supervisorrate",
+	"候选人": "winnerorder", "城市": "city","成交状态": "bidstatus", "采购单位联系人": "buyerperson", "采购单位电话": "buyertel",
+	"采购单位": "buyer","币种": "currency", "项目名称": "projectname","中标金额": "bidamount", "预算": "budget",}
+
+
+//创建标签
+function createOneVersion(){
+	_id = "";
+	$("#s_pversionid").empty();
+	$("#s_pversionid").append("<option value=''></option>")
+	$("#addfieldname").removeAttr("disabled");
+	$("#addfieldname").empty();
+	$("#select1").empty();
+	$("#select2").empty();
+	$("#addfieldname").append("<option value=''>--请选择--</option>");
+	for(var i in field){
+		if(field[i]["s_name"] != ""){
+			$("#addfieldname").append("<option value='"+field[i]["s_name"]+"+"+field[i]["s_field"]+"'>"+field[i]["s_name"]+"</option>");
+		}
+	}
+	for(var i in clearMap){
+		$("#select1").append("<option  value="+clearMap[i]+">"+i+"</option>");
+		//$("#select1").append("<option value='"+clearArr[i]+"'>"+clearArr[i]+"</option>");
+	}
+	$.ajax({
+		url:"/admin/getversions",
+		type:"post",
+		data:{},
+		success:function(r){
+			if(r.data){
+				for(var i in r.data){
+					$("#s_pversionid").append("<option value='"+r.data[i]._id+"'>"+r.data[i].version+"</option>");
+					//$("#select1").append("<option value='"+clearArr[i]+"'>"+clearArr[i]+"</option>");
+				}
+			}
+		}
+	})
+
+	$("#modal-info-version").modal("show");
+}
+//保存
+function save(){
+    var version = $("#version").val();//版本
+    var s_descript = $("#s_descript").val();//描述
+    var isextractcity = $("#isextractcity").val()//是否抽取城市
+    var s_pversionid = $("#s_pversionid").val()//克隆版本
+    var iscopyfiled = $("#iscopyfiled").val()//克隆版本
+    var isfiles = $("#isfiles").val()//是否附件
+    var s_filefileds = [];
+    $("#select2 option").each(function(i,val){
+        s_filefileds[i] = this.value
+    })
+    var s_filefiledsJsonStr = JSON.stringify(s_filefileds)
+    if(fieldname == "" ||s_descript==""){
+        alert("版本名称或者描述填写不完整!");
+        return false;
+    }
+    /*console.log({"_id":_id,"s_descript":s_descript,"version":version,"isextractcity":isextractcity,"s_pversionid":s_pversionid,"iscopyfiled":iscopyfiled,"isfiles":isfiles,"s_filefileds":s_filefiledsJsonStr})*/
+    // {{/*data:{"_id":_id,"s_descript":s_descript,"version":version,"clearJsonStr":clearJsonStr,"username":{{index (session "user") "name" }}},*/}}
+    $.ajax({
+        url:"/admin/version/save",
+        type:"post",
+        data:{"_id":_id,"s_descript":s_descript,"version":version,"isextractcity":isextractcity,"s_pversionid":s_pversionid,"iscopyfiled":iscopyfiled,"isfiles":isfiles,"s_filefileds":s_filefiledsJsonStr},
+        success:function(r){
+			if(r&&r.rep){
+				window.location.href="/admin/version"
+			}else{
+				showTip("已存在!",1000)
+			}
+        }
+    })
+}
+//编辑
+function edit(id){
+	_id = id;
+	$.ajax({
+		url:"/admin/version/dataById?_id="+id,
+		type:"get",
+		success:function(r){
+			if (r.req){
+				$("#version").empty();
+				$("#version").val(r.data.version).attr("disabled",true);
+				$("#s_descript").empty();
+				$("#s_descript").val(r.data.s_descript);
+				console.log("r.data.isextractcity",r.data.isextractcity);
+				if (r.data.isextractcity){
+					$(".isextractcity_class").find("option[text='是']").attr("selected",true);
+				}else {
+					$(".isextractcity_class").find("option[text='否']").attr("selected",true);
+				}
+
+				$("#s_pversionid").empty();
+				$("#iscopyfiled").empty();
+				$("#isfiles").empty();
+				$("#select1").empty();
+				$("#select2").empty();
+
+
+				var s_filefileds=[]
+				s_filefileds = r.data.s_filefileds
+				for(var i in clearMap){
+					var flag = true;
+					for(var j in s_filefileds){
+						if(i == s_filefileds[j]){
+							$("#select2").append("<option title='"+i+"' value='"+i+"+"+clearMap[i]+"'>"+i+"</option>");
+							flag = false;
+						}
+					}
+					if(flag){
+						$("#select1").append("<option title='"+i+"' value='"+i+"+"+clearMap[i]+"'>"+i+"</option>");
+					}
+				}
+				$("#modal-info-version").modal("show");
+			}else {
+				alert(r)
+			}
+		}
+	})
+
+
+
+
+
+}
+
 </script>