Jianghan 5 lat temu
rodzic
commit
37f17780c2

+ 1 - 24
src/config.json

@@ -3,7 +3,7 @@
   "udpport": ":11117",
   "mgodb": "192.168.3.207:27092",
   "dbsize": 5,
-  "dbname": "datatag",
+  "dbname": "datatag_ent",
   "mgodben": "192.168.3.207:27092",
   "dbnameen": "enterprise",
   "mongoenc": "winner_enterprise",
@@ -15,7 +15,6 @@
 	"dbsize": 5 
   },
   "preview_href": "http://192.168.20.127:5500/data-preview.html",
-  "elasticsearchxs": "http://172.17.145.170:9800",
   "elasticsearch": "http://127.0.0.1:9800",
   "elasticsearch_index": "bidding",
   "elasticsearch_type": "bidding",
@@ -24,28 +23,6 @@
     "to": "wangjianghan@topnet.net.cn",
     "api": "http://10.171.112.160:19281/_send/_mail"
   },
-  "jy_info_back": "jy_modify_log",
-  "jy_pro_back": "jy_pro_modify_log",
-  "jymgo": {
-    "jyaddr": "192.168.3.207:27092",
-    "jydbsize": 5,
-    "jydbname": "datatag_data",
-    "jycollname1": "bidding",
-    "jycollname2": "bidding_back"
-  },
-  "jyredis": {
-    "redis_jy": "jy_log=127.0.0.1:6379",
-    "redis_jy_name": "jy_log",
-    "redisdelkey1": "jypcdetail_",
-    "redisdelkey2": "jypcdetail__rec",
-    "redisdelkey3": "jypcdetail__rec_vip_"
-  },
-  "jy_pro": {
-    "mgodb": "192.168.3.207:27092",
-    "dbsize": 5,
-    "dbname": "datatag_data",
-    "coll": "project"
-  },
   "indexNode": {
     "addr": "127.0.0.1",
     "port": 1483,

+ 1 - 0
src/es.json

@@ -0,0 +1 @@
+{"query":{"filtered":{}}}

+ 0 - 7
src/main.go

@@ -31,18 +31,11 @@ func init() {
 	xweb.RootApp().AppConfig.CacheTemplates = false
 	xweb.AddAction(&front.Front{})
 	xweb.AddAction(&service.Rule{})
-	xweb.AddAction(&service.CommonRule{})
-	xweb.AddAction(&service.TagRule{})
 	xweb.AddAction(&service.Feedback{})
 	xweb.AddAction(&service.Private{})
-	xweb.AddAction(&service.TaskRule{})
-	xweb.AddAction(&service.RepairRule{})
 	xweb.AddAction(&service.Customer{})
 	xweb.RootApp().AppConfig.SessionTimeout = 1 * time.Hour
 	xweb.RootApp().Logger.SetOutputLevel(1)
-
-	//xweb.AddTmplVar("add", func(a, b int) int { return a + b })
-	//InitTask("5ecf56ed92b4ee16ffd7e21e")
 }
 
 func main() {

+ 0 - 336
src/service/common_rule.go

@@ -1,336 +0,0 @@
-package service
-
-import (
-	"encoding/json"
-	"fmt"
-	"io"
-	"net/http"
-	"os"
-	qu "qfw/util"
-	"strconv"
-	"strings"
-	"time"
-	. "util"
-
-	"github.com/go-xweb/xweb"
-	"github.com/lauyoume/gopinyin"
-	"gopkg.in/mgo.v2/bson"
-)
-
-type CommonRule struct {
-	*xweb.Action
-	//rule
-	ruleList     xweb.Mapper `xweb:"/service/common_rule/list"`         //标签列表
-	ruleCreate   xweb.Mapper `xweb:"/service/common_rule/create"`       //新建标签
-	ruleDel      xweb.Mapper `xweb:"/service/common_rule/del"`          //删除标签
-	ruleEdit     xweb.Mapper `xweb:"/service/common_rule/edit"`         //编辑标签
-	ruleSave     xweb.Mapper `xweb:"/service/common_rule/save"`         //保存标签
-	archive      xweb.Mapper `xweb:"/service/common_rule/archive"`             //存档
-	productData  xweb.Mapper `xweb:"/service/common_rule/produce"`      //生成预览数据
-	downloadData xweb.Mapper `xweb:"/service/common_rule/downloadata"`  //下载数据
-	downloadRule xweb.Mapper `xweb:"/service/common_rule/downloadrule"` //下载标签
-	demoData     xweb.Mapper `xweb:"/service/common_rule/preview"`      //预览数据
-	exportEs     xweb.Mapper `xweb:"/service/common_rule/exportes"`     //导出es
-}
-
-func (r *CommonRule) RuleList() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-		start, _ := r.GetInteger("start")
-		limit, _ := r.GetInteger("length")
-		draw, _ := r.GetInteger("draw")
-		searchStr := r.GetString("search[value]")
-		search := strings.TrimSpace(searchStr)
-		query := bson.M{
-			"b_delete": false,
-		}
-		if search != "" {
-			query["$or"] = []interface{}{
-				bson.M{"s_tagname": bson.M{"$regex": search}},
-			}
-		}
-
-		data, _ := Mgo.Find("tags_common", query, `{"i_createtime":-1}`, nil, false, start, limit)
-		count := Mgo.Count("tags_common", query)
-		r.ServeJson(map[string]interface{}{
-			"draw":            draw,
-			"data":            data,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	} else {
-		r.T["preview_href"] = PreviewHref
-		r.Render("private/common_rule_list.html", &r.T)
-	}
-}
-
-func (r *CommonRule) RuleCreate() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-
-	} else {
-		r.T["province"] = Province
-		r.T["city"] = ProvinceCitys
-		r.T["district"] = CityDistricts
-		r.T["topTypeArr"] = TopTypeArr
-		r.T["subTypeArr"] = SubTypeArr
-		r.T["matchTypeMap"] = MatchTypeMap
-		r.T["existField"] = ExistFiled
-		r.T["buyerClass"] = BuyerClass
-		r.T["scopeClass"] = ScopeClassMap
-		r.Render("private/common_rule_create.html", &r.T)
-	}
-}
-
-func (r *CommonRule) RuleDel() {
-	defer qu.Catch()
-	_id := r.GetString("_id")
-	s_dataid := r.GetString("s_dataid")
-	set := bson.M{
-		"$set": bson.M{
-			"b_delete": true,
-		},
-	}
-	b := Mgo.UpdateById("tags_common", _id, set)
-	Mgo.Update("feedback", bson.M{"s_dataid": s_dataid}, bson.M{"$set": bson.M{"b_tagdel": true}}, false, false)
-	r.ServeJson(map[string]interface{}{
-		"rep": b,
-	})
-}
-
-func (r *CommonRule) RuleEdit() {
-	defer qu.Catch()
-	id := r.GetString("id")         //标签列表编辑
-	dataid := r.GetString("dataid") //反馈列表编辑
-	query := bson.M{}
-	if id != "" {
-		query["_id"] = qu.StringTOBsonId(id)
-	} else if dataid != "" {
-		query["s_dataid"] = dataid
-	}
-	data, _ := Mgo.FindOneByField("tags_common", query, `{}`)
-	(*data)["id"] = qu.BsonIdToSId((*data)["_id"])
-	r.T["data"] = *data
-	r.T["province"] = Province
-	r.T["city"] = ProvinceCitys
-	r.T["district"] = CityDistricts
-	r.T["topTypeArr"] = TopTypeArr
-	r.T["subTypeArr"] = SubTypeArr
-	r.T["matchTypeMap"] = MatchTypeMap
-	r.T["existField"] = ExistFiled
-	r.T["buyerClass"] = BuyerClass
-	r.T["scopeClass"] = ScopeClassMap
-	r.Render("private/common_rule_edit.html", &r.T)
-}
-
-func (r *CommonRule) RuleSave() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-		user := r.GetSession("user").(map[string]interface{})
-		data := GetPostForm(r.Request)
-		id := data["id"].(string)
-		delete(data, "id")
-		o_rules := []map[string]interface{}{}
-		o_rulesStr := data["o_rules"].(string)
-		json.Unmarshal([]byte(o_rulesStr), &o_rules)
-		data["o_rules"] = o_rules
-		if qu.IntAll(data["i_esquerytype"]) == 1 { //自动生成es
-			data["s_esquery"] = Utiltags(data)
-		}
-		i_createtime := time.Now().Unix()
-		data["i_updatetime"] = i_createtime
-		data["s_updateuser"] = user["name"]
-		if id == "" { //新建
-			data["i_createtime"] = i_createtime
-			data["s_createuser"] = user["name"]
-			s_tagnamekey := gopinyin.Convert(qu.ObjToString(data["s_tagname"]), false)
-			data["s_tagnamekey"] = s_tagnamekey
-			data["b_delete"] = false
-			data["s_dataid"] = qu.SE.EncodeString(fmt.Sprintf("%v", i_createtime) + qu.ObjToString(data["s_tagfield"]) + s_tagnamekey)
-		}
-		id, rep := updateDbXf1(id, data)
-		r.ServeJson(map[string]interface{}{
-			"id":        id,
-			"s_esquery": data["s_esquery"],
-			"rep":       rep,
-			"s_dataid":  data["s_dataid"],
-		})
-	}
-}
-
-func (r *CommonRule) ExportEs() {
-	defer qu.Catch()
-	id := r.GetString("id")
-	if id == "" {
-		return
-	}
-	w := r.ResponseWriter
-	tag, _ := Mgo.FindById("tags_common", id, `{}`)
-	s_esquery := (*tag)["s_esquery"].(string)
-	createEsJosn(s_esquery)
-	file, err := os.Open("./es.json")
-	defer file.Close()
-	if err != nil {
-		r.ServeJson(map[string]interface{}{
-			"rep": false,
-		})
-		return
-	}
-	fileHeader := make([]byte, 512)
-	file.Read(fileHeader)
-	fileStat, _ := file.Stat()
-	w.Header().Set("Content-Disposition", "attachment; filename=./es.json")
-	w.Header().Set("Content-Type", http.DetectContentType(fileHeader))
-	w.Header().Set("Content-Length", strconv.FormatInt(fileStat.Size(), 10))
-	file.Seek(0, 0)
-	io.Copy(w, file)
-	return
-}
-
-func createEsJosn1(es string) {
-	defer qu.Catch()
-	jmap := make(map[string]interface{})
-	err := json.Unmarshal([]byte(es), &jmap)
-	if err != nil {
-		fmt.Println("S_esquery To Json Err:", err)
-		return
-	}
-	fp, err := os.Create("./es.json")
-	if err != nil {
-		return
-	}
-	defer fp.Close()
-	j, _ := json.Marshal(jmap)
-	_, err = fp.Write(j)
-	if err != nil {
-		return
-	}
-}
-
-func updateDbXf1(id string, rdata map[string]interface{}) (rid string, rep bool) {
-	defer qu.Catch()
-	if id == "" {
-		rid = Mgo.Save("tags_common", rdata)
-		if rid != "" {
-			rep = true
-		} else {
-			rep = false
-		}
-	} else {
-		rid = id
-		query := bson.M{
-			"_id": qu.StringTOBsonId(id),
-		}
-		rep = Mgo.Update("tags_common", query, bson.M{"$set": rdata}, false, false)
-	}
-	return
-}
-
-func (r *CommonRule) DemoData() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-		sDataid := r.GetString("s_dataid")
-		start, _ := r.GetInteger("start")
-		limit, _ := r.GetInteger("length")
-		draw, _ := r.GetInteger("draw")
-		query := bson.M{
-			"s_dataid": sDataid,
-		}
-		data, _ := Mgo.Find("tagsdata", query, `{"publishtime":-1}`, nil, false, start, limit)
-		count := Mgo.Count("tagsdata", query)
-		for _, v := range *data {
-			if v["budget"] != nil {
-				v["budget"] = qu.Float64All(fmt.Sprintf("%f", qu.Float64All(v["budget"])/10000))
-			}
-			if v["bidamount"] != nil {
-				v["bidamount"] = qu.Float64All(fmt.Sprintf("%f", qu.Float64All(v["bidamount"])/10000))
-			}
-		}
-		r.ServeJson(map[string]interface{}{
-			"data":            data,
-			"draw":            draw,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	}
-}
-func (r *CommonRule) ProductData() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-		rep := false
-		id := r.GetString("id")
-		tag, _ := Mgo.FindById("tags_common", id, `{}`)
-		err, count := UtilEsFind(*tag)
-		qu.Debug(err)
-		if err == nil {
-			rep = true
-		}
-		r.ServeJson(map[string]interface{}{
-			"rep":   rep,
-			"count": count,
-		})
-	}
-}
-
-func (r *CommonRule) Archive() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-		rep := false
-		_id := r.GetString("_id")
-		query := bson.M{
-			"_id": qu.StringTOBsonId(_id),
-		}
-		tag, _ := Mgo.FindOne("tags_common", query)
-		if len(*tag) > 0 {
-			user := r.GetSession("user").(map[string]interface{})
-			histoty, _ := Mgo.FindOne("tags_history", `{"s_tagid":"`+_id+`"}`)
-			s_state := "创建"
-			if len(*histoty) > 0 { //该id已有记录
-				s_state = "变更"
-			}
-			(*tag)["s_tagid"] = _id                    //tags表id
-			(*tag)["s_state"] = s_state                //状态
-			(*tag)["l_changetime"] = time.Now().Unix() //变更时间
-			(*tag)["s_changeperson"] = user["name"]
-			id := Mgo.Save("tags_history", tag)
-			if id != "" {
-				rep = true
-			}
-		}
-		r.ServeJson(map[string]interface{}{
-			"rep": rep,
-		})
-	}
-}
-func (r *CommonRule) DownloadData() {
-	defer qu.Catch()
-	dataId := r.GetString("s_dataid")
-	if path := ResponseXlsx_Data(dataId); path == "" {
-		r.ServeJson("没有数据")
-	} else {
-		arr := strings.Split(path, "/")
-		r.ResponseWriter.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", arr[len(arr)-1]))
-		r.ServeFile(path)
-		go func(path string) {
-			time.Sleep(300000)
-			os.Remove(path)
-		}(path)
-	}
-}
-
-func (r *CommonRule) DownloadRule() {
-	defer qu.Catch()
-	id := r.GetString("id")
-	path := ResponseXlsx_Rule(id, "common")
-	if path == "" {
-		r.ServeJson("没有数据")
-	} else {
-		arr := strings.Split(path, "/")
-		r.ResponseWriter.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", arr[len(arr)-1]))
-		r.ServeFile(path)
-		go func(path string) {
-			time.Sleep(time.Minute * 3)
-			os.Remove(path)
-		}(path)
-	}
-}

+ 0 - 297
src/service/private_rule.go

@@ -13,8 +13,6 @@ import (
 	"time"
 	. "util"
 
-	"github.com/lauyoume/gopinyin"
-
 	"github.com/go-xweb/xweb"
 	"gopkg.in/mgo.v2/bson"
 )
@@ -22,11 +20,6 @@ import (
 type Rule struct {
 	*xweb.Action
 	//rule
-	ruleList   xweb.Mapper `xweb:"/service/rule/list"`   //标签列表
-	ruleCreate xweb.Mapper `xweb:"/service/rule/create"` //新建标签
-	ruleDel    xweb.Mapper `xweb:"/service/rule/del"`    //删除标签
-	ruleEdit   xweb.Mapper `xweb:"/service/rule/edit"`   //编辑标签
-	ruleSave   xweb.Mapper `xweb:"/service/rule/save"`   //保存标签
 	ruleImport xweb.Mapper `xweb:"/service/rule/import"` //导入文件excel
 	//history
 	archive xweb.Mapper `xweb:"/service/rule/archive"` //存档
@@ -37,80 +30,6 @@ type Rule struct {
 	downloadRule     xweb.Mapper `xweb:"/service/rule/downloadrule"`     //下载标签
 	demoData         xweb.Mapper `xweb:"/service/rule/preview"`          //预览数据
 	exportEs         xweb.Mapper `xweb:"/service/rule/exportes"`         //导出es
-	importComRule    xweb.Mapper `xweb:"/service/rule/importcomrule"`    //导入通用标签
-	getCustomerAppId xweb.Mapper `xweb:"/service/rule/getcustomerappid"` //获取appid
-}
-
-//var comfield = `{"s_area":1,"s_city":1,"s_district":1,"s_toptype":1,"s_subtype":1,"s_existfields":1,"s_globaladdkey":1,"s_globaladdkeymatch":1,"s_globalnotkey":1,"s_globalnotkeymatch":1,"s_globalbuyerclass":1,"s_globalsubscopeclass":1,"o_rules":1,"i_globaladdkeytype":1,"i_globalnotkeytype":1}`
-var comfield = []string{"s_area", "s_city", "s_district", "s_toptype", "s_subtype", "s_existfields", "s_globaladdkey", "s_globaladdkeymatch", "s_globalnotkey", "s_globalnotkeymatch", "s_globalbuyerclass", "s_globalsubscopeclass", "o_rules"}
-
-//标签列表
-func (r *Rule) RuleList() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-		start, _ := r.GetInteger("start")
-		limit, _ := r.GetInteger("length")
-		draw, _ := r.GetInteger("draw")
-		searchStr := r.GetString("search[value]")
-		search := strings.TrimSpace(searchStr)
-		//qu.Debug(start, limit, draw, search)
-		query := bson.M{
-			"b_delete": false,
-		}
-		if search != "" {
-			query["$or"] = []interface{}{
-				bson.M{"s_customer": bson.M{"$regex": search}},
-				bson.M{"s_tagname": bson.M{"$regex": search}},
-			}
-		}
-
-		data, _ := Mgo.Find("tags", query, `{"i_createtime":-1}`, nil, false, start, limit)
-		count := Mgo.Count("tags", query)
-		r.ServeJson(map[string]interface{}{
-			"draw":            draw,
-			"data":            data,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	} else {
-		r.T["preview_href"] = PreviewHref
-		r.Render("private/rule_list.html", &r.T)
-	}
-}
-
-func (r *Rule) RuleCreate() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-
-	} else {
-		r.T["province"] = Province
-		r.T["city"] = ProvinceCitys
-		r.T["district"] = CityDistricts
-		r.T["topTypeArr"] = TopTypeArr
-		r.T["subTypeArr"] = SubTypeArr
-		r.T["matchTypeMap"] = MatchTypeMap
-		r.T["matchTypeMap2"] = MatchTypeMap2
-		r.T["existField"] = ExistFiled
-		r.T["buyerClass"] = BuyerClass
-		r.T["scopeClass"] = ScopeClassMap
-		r.Render("private/rule_create.html", &r.T)
-	}
-}
-
-func (r *Rule) RuleDel() {
-	defer qu.Catch()
-	_id := r.GetString("_id")
-	s_dataid := r.GetString("s_dataid")
-	set := bson.M{
-		"$set": bson.M{
-			"b_delete": true,
-		},
-	}
-	b := Mgo.UpdateById("tags", _id, set)
-	Mgo.Update("feedback", bson.M{"s_dataid": s_dataid}, bson.M{"$set": bson.M{"b_tagdel": true}}, false, false)
-	r.ServeJson(map[string]interface{}{
-		"rep": b,
-	})
 }
 
 func (r *Rule) RuleImport() {
@@ -139,69 +58,6 @@ func (r *Rule) RuleImport() {
 	}
 }
 
-func (r *Rule) RuleEdit() {
-	defer qu.Catch()
-	id := r.GetString("id")         //标签列表编辑
-	dataid := r.GetString("dataid") //反馈列表编辑
-	query := bson.M{}
-	if id != "" {
-		query["_id"] = qu.StringTOBsonId(id)
-	} else if dataid != "" {
-		query["s_dataid"] = dataid
-	}
-	data, _ := Mgo.FindOneByField("tags", query, `{}`)
-	(*data)["id"] = qu.BsonIdToSId((*data)["_id"])
-	r.T["data"] = *data
-	r.T["province"] = Province
-	r.T["city"] = ProvinceCitys
-	r.T["district"] = CityDistricts
-	r.T["topTypeArr"] = TopTypeArr
-	r.T["subTypeArr"] = SubTypeArr
-	r.T["matchTypeMap"] = MatchTypeMap
-	r.T["matchTypeMap2"] = MatchTypeMap2
-	r.T["existField"] = ExistFiled
-	r.T["buyerClass"] = BuyerClass
-	r.T["scopeClass"] = ScopeClassMap
-	r.Render("private/rule_edit.html", &r.T)
-}
-
-func (r *Rule) RuleSave() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-		user := r.GetSession("user").(map[string]interface{})
-		data := GetPostForm(r.Request)
-		id := data["id"].(string)
-		delete(data, "id")
-		o_rules := []map[string]interface{}{}
-		o_rulesStr := data["o_rules"].(string)
-		json.Unmarshal([]byte(o_rulesStr), &o_rules)
-		data["o_rules"] = o_rules
-		if qu.IntAll(data["i_esquerytype"]) == 1 { //自动生成es
-			data["s_esquery"] = Utiltags(data)
-		}
-		i_createtime := time.Now().Unix()
-		data["i_updatetime"] = i_createtime
-		data["s_updateuser"] = user["name"]
-		if id == "" { //新建
-			data["i_createtime"] = i_createtime
-			data["s_createuser"] = user["name"]
-			s_customerkey := gopinyin.Convert(qu.ObjToString(data["s_customer"]), false)
-			s_tagnamekey := gopinyin.Convert(qu.ObjToString(data["s_tagname"]), false)
-			data["s_customerkey"] = s_customerkey
-			data["s_tagnamekey"] = s_tagnamekey
-			data["b_delete"] = false
-			data["s_dataid"] = qu.SE.EncodeString(fmt.Sprintf("%v", i_createtime) + s_customerkey + s_tagnamekey)
-		}
-		id, rep := updateDbXf(id, data) //保存tags
-		r.ServeJson(map[string]interface{}{
-			"id":        id,
-			"s_esquery": data["s_esquery"],
-			"rep":       rep,
-			"s_dataid":  data["s_dataid"],
-		})
-	}
-}
-
 func (r *Rule) Archive() {
 	defer qu.Catch()
 	if r.Method() == "POST" {
@@ -298,26 +154,6 @@ func createEsJosn(es string) {
 	}
 }
 
-//更新xlsx db
-func updateDbXf(id string, rdata map[string]interface{}) (rid string, rep bool) {
-	defer qu.Catch()
-	if id == "" {
-		rid = Mgo.Save("tags", rdata)
-		if rid != "" {
-			rep = true
-		} else {
-			rep = false
-		}
-	} else {
-		rid = id
-		query := bson.M{
-			"_id": qu.StringTOBsonId(id),
-		}
-		rep = Mgo.Update("tags", query, bson.M{"$set": rdata}, false, false)
-	}
-	return
-}
-
 func (r *Rule) DemoData() {
 	defer qu.Catch()
 	if r.Method() == "POST" {
@@ -394,136 +230,3 @@ func (r *Rule) DownloadRule() {
 		}(path)
 	}
 }
-
-func (r *Rule) ImportComRule() {
-	defer qu.Catch()
-	result := map[string]interface{}{} //存储所有追加好的数据
-	o_rules_all := []interface{}{}     //o_rule所有数据
-	tagid := r.GetString("tagid")      //有tagid表示编辑,无是新建
-	if tagid != "" {                   //在原有数据的基础上追加
-		tag, _ := Mgo.FindById("tags", tagid, `{}`)
-		if o_rule_tmp, ok := (*tag)["o_rules"].([]interface{}); ok {
-			o_rules_all = append(o_rules_all, o_rule_tmp...)
-		}
-	}
-	ids := r.GetString("ids")
-	idArr := strings.Split(ids, ",")
-	rep := false
-
-	if len(idArr) > 0 {
-		for _, id := range idArr {
-			d, _ := Mgo.FindById("tags_common", id, `{}`)
-			o_rules_all = addcomrule(*d, result, o_rules_all)
-		}
-		if len(o_rules_all) > 0 {
-			result["o_rules"] = o_rules_all
-		}
-		if len(result) > 0 {
-			rep = true
-		}
-	}
-	r.ServeJson(map[string]interface{}{
-		"rep":  rep,
-		"data": result,
-	})
-}
-
-func addcomrule(d, result map[string]interface{}, o_rules_all []interface{}) []interface{} {
-	for _, k := range comfield {
-		v := d[k]
-		//s_globaladdkeymatch s_globalnotkeymatch的匹配类型为2时,值就一个,追加时要判断所有值是否一致
-		if k == "s_globaladdkeymatch" && qu.ObjToString(v) != "" && qu.IntAll(d["i_globaladdkeytype"]) == 2 { //匹配方式的类型为2时,多个匹配方式的值必须一致
-			if result[k] == nil {
-				result[k] = v
-			} else if result[k] != v {
-				delete(result, k)
-			}
-			continue
-		} else if k == "s_globalnotkeymatch" && qu.ObjToString(v) != "" && qu.IntAll(d["i_globalnotkeytype"]) == 2 {
-			if result[k] == nil {
-				result[k] = v
-			} else if result[k] != v {
-				delete(result, k)
-			}
-			continue
-		}
-
-		if k == "o_rules" && v != nil { //封装所有的o_rules
-			o_rulesArr := v.([]interface{})
-			if len(o_rulesArr) > 0 {
-				o_rules_all = append(o_rules_all, o_rulesArr...)
-			}
-			continue
-		}
-
-		if vstr := qu.ObjToString(v); vstr != "" {
-			if result[k] == nil { //对应k没有值,赋值
-				result[k] = vstr
-			} else { //对应值有值,去重后追加
-				tmp := qu.ObjToString(result[k])
-				tmpArr1 := strings.Split(tmp, ",")
-				tmpArr2 := strings.Split(vstr, ",")
-				tmpArr1 = append(tmpArr1, tmpArr2...)
-				newArr := make([]string, 0)
-				for i := 0; i < len(tmpArr1); i++ {
-					repeat := false
-					for j := i + 1; j < len(tmpArr1); j++ {
-						if tmpArr1[i] == tmpArr1[j] {
-							repeat = true
-							break
-						}
-					}
-					if !repeat {
-						newArr = append(newArr, tmpArr1[i])
-					}
-				}
-				result[k] = strings.Join(newArr, ",")
-			}
-		}
-	}
-	return o_rules_all
-}
-
-func (r *Rule) GetCustomerAppId() {
-	defer qu.Catch()
-	rep := false
-	id := r.GetString("_id")
-	customer := r.GetString("customer")
-	user, _ := MgoCus.FindOne("user", map[string]interface{}{"username": customer})
-	appid := ""
-	if len(*user) > 0 { //存在,获取appid
-		appid = qu.ObjToString((*user)["appid"])
-	} else { //不存在调接口生成
-		client := &http.Client{}
-		url := CustomerApi + "?username=" + customer
-		req, err := http.NewRequest("POST", url, nil)
-		if err == nil {
-			resp, err := client.Do(req)
-			defer resp.Body.Close()
-			body, err := ioutil.ReadAll(resp.Body)
-			if err == nil {
-				resp := map[string]interface{}{}
-				json.Unmarshal(body, &resp)
-				if qu.ObjToString(resp["msg"]) == "ok" {
-					user, _ := MgoCus.FindOne("user", map[string]interface{}{"username": customer})
-					if len(*user) > 0 {
-						appid = qu.ObjToString((*user)["appid"])
-					}
-				}
-			}
-		} else {
-			fmt.Println("调企业用户接口失败", err)
-		}
-	}
-	if appid != "" { //保存
-		set := map[string]interface{}{
-			"$set": map[string]interface{}{
-				"s_appid": appid,
-			},
-		}
-		rep = Mgo.UpdateById("tags", id, set)
-	}
-	r.ServeJson(map[string]interface{}{
-		"rep": rep,
-	})
-}

+ 4 - 2
src/service/private_service.go

@@ -45,7 +45,9 @@ func (f *Private) Keydatademo(world string) {
 		if time.Now().Sub(time.Unix(ctimeint, 0)).Hours()/24 < Subday {
 			var tagfield *map[string]interface{}
 			if typeStr == "private" {
-				tagfield, _ = Mgo.FindOneByField("tags", bson.M{"s_dataid": world}, bson.M{"i_extfieldstype": 1, "i_estotal": 1, "s_customer": 1})
+				tagfield, _ = Mgo.FindOneByField("cuserdepartrule", bson.M{"s_dataid": world}, bson.M{"i_extfieldstype": 1, "i_estotal": 1, "s_userid": 1})
+				customer, _ := Mgo.FindById("cuser", qu.ObjToString((*tagfield)["s_userid"]), bson.M{"s_name": 1})
+				(*tagfield)["s_customer"] = (*customer)["s_name"]
 			}else {
 				tagfield, _ = Mgo.FindOneByField("tags_common", bson.M{"s_dataid": world}, bson.M{"i_extfieldstype": 1, "i_estotal": 1, "s_customer": 1})
 			}
@@ -206,7 +208,7 @@ func (f *Private) Keydataoption(world string) {
 					"code": "1",
 					"err":  "提交成功",
 				})
-				go sendMail(*res, qu.ObjToString(tmp["option"]))		//发送邮件
+				go sendMail(*res, qu.ObjToString(tmp["option"])) //发送邮件
 				return
 			}
 		}

+ 0 - 26
src/service/repair_pro_service.go

@@ -1,26 +0,0 @@
-package service
-
-import (
-	qu "qfw/util"
-	. "util"
-)
-
-func (jy *RepairRule) RepairPro() {
-	defer qu.Catch()
-	if jy.Method() == "POST" {
-		start, _ := jy.GetInteger("start")
-		limit, _ := jy.GetInteger("length")
-		draw, _ := jy.GetInteger("draw")
-
-		data, _ := Mgo.Find(JyProRecord, nil, `{"i_modifytime": -1}`, nil, false, start, limit)
-		count := Mgo.Count(JyProRecord, nil)
-		jy.ServeJson(map[string]interface{}{
-			"draw":            draw,
-			"data":            data,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	} else {
-		jy.Render("repair/jy_pro_repair.html")
-	}
-}

+ 0 - 667
src/service/repair_service.go

@@ -1,667 +0,0 @@
-package service
-
-import (
-	"encoding/json"
-	"io/ioutil"
-	"log"
-	mu "mfw/util"
-	"net"
-	qu "qfw/util"
-	"qfw/util/elastic"
-	"qfw/util/redis"
-	"regexp"
-	"strings"
-	"time"
-	"udptask"
-	. "util"
-
-	"github.com/go-xweb/xweb"
-	"gopkg.in/mgo.v2/bson"
-)
-
-var (
-	rpre *regexp.Regexp = regexp.MustCompile("https://www.jianyu360.com/article/content/")
-	rsuf *regexp.Regexp = regexp.MustCompile("(.html).*")
-)
-
-type RepairRule struct {
-	*xweb.Action
-	repairList    xweb.Mapper `xweb:"/service/jy/repair"`
-	searchID      xweb.Mapper `xweb:"/service/jy/searchID"`
-	searchJyurl   xweb.Mapper `xweb:"/service/jy/searchJyurl"`
-	repairEdit    xweb.Mapper `xweb:"/service/jy/edit"`
-	repairDelete  xweb.Mapper `xweb:"/service/jy/delete"`
-	repairSave    xweb.Mapper `xweb:"/service/jy/save"`
-	repairCreate  xweb.Mapper `xweb:"/service/jy/create"`
-	repairNewSave xweb.Mapper `xweb:"/service/jy/newSave"`
-
-	repairBulk	  xweb.Mapper `xweb:"/service/jy/bulk_repair"`
-	repairImport  xweb.Mapper `xweb:"/service/jy/importData"`
-	repairModify  xweb.Mapper `xweb:"/service/jy/modifySave"`
-	repairRecord  xweb.Mapper `xweb:"/service/jy/modifyRecord"`
-
-	repairPro	  xweb.Mapper `xweb:"/service/jy/pro/repair"`
-}
-
-func (jy *RepairRule) RepairList() {
-	defer qu.Catch()
-	jy.Render("repair/jy_repair.html")
-}
-
-//新增数据
-func (jy *RepairRule) RepairCreate() {
-	defer qu.Catch()
-	jy.T["data"] = map[string]string{
-		"title":      "",
-		"site":       "",
-		"spidercode": "",
-		"href":       "",
-		"channel":    "",
-		"toptype":    "",
-		"subtype":    "",
-		"area":       ""}
-	jy.Render("repair/jy_create.html", &jy.T)
-}
-
-//新增数据
-func (jy *RepairRule) RepairNewSave() {
-	defer qu.Catch()
-	log.Println("新增数据")
-	//mongo新增
-	request_data := GetPostForm(jy.Request)
-	updata := qu.ObjToMap(request_data["data"])
-	reasons := qu.ObjToString(request_data["reasons"])
-	contenthtml := qu.ObjToString(request_data["contenthtml"])
-	detail := qu.ObjToString(request_data["detail"])
-	summary := qu.ObjToString(request_data["summary"])
-	(*updata)["contenthtml"] = contenthtml
-	(*updata)["detail"] = detailClear(detail)
-	if summary != "" {
-		(*updata)["contenthtml"] = summary
-	}
-
-	//处理个别字段
-	if val, ok := (*updata)["comeintime"]; ok {
-		(*updata)["comeintime"] = qu.Int64All(val)
-	} else {
-		curtime := time.Now().Unix()
-		(*updata)["comeintime"] = curtime
-	}
-
-	if val, ok := (*updata)["publishtime"]; ok {
-		(*updata)["publishtime"] = qu.Int64All(val)
-	} else {
-		pt := int64(0)
-		(*updata)["publishtime"] = pt
-	}
-
-	if val, ok := (*updata)["infoformat"]; ok {
-		(*updata)["infoformat"] = qu.IntAll(val)
-	} else {
-		(*updata)["infoformat"] = 1
-	}
-
-	(*updata)["extracttype"] = 0
-
-	delete(*updata, "_id")
-	cur_id := JYMgo.Save(JyCollNameOne, *updata)
-	if cur_id != "" {
-		log.Println("当前新增id:", cur_id)
-
-		//调udp生索引
-		indexNode := *qu.ObjToMap(Sysconfig["indexNode"])
-		param := map[string]interface{}{"coll": JyCollNameOne}
-		by, _ := json.Marshal(map[string]interface{}{
-			"query": map[string]interface{}{
-				"_id": bson.M{
-					"$gte": bson.ObjectIdHex(cur_id),
-					"$lte": bson.ObjectIdHex(cur_id),
-				}},
-			"stype": qu.ObjToString(indexNode["stype"]),
-			"param": param,
-		})
-		addr := &net.UDPAddr{
-			IP:   net.ParseIP(indexNode["addr"].(string)),
-			Port: qu.IntAll(indexNode["port"]),
-		}
-		udptask.Udpclient.WriteUdp(by, mu.OP_TYPE_DATA, addr)
-
-		//日志记录
-		user := jy.GetSession("user").(map[string]interface{})
-		log_data := map[string]interface{}{
-			"s_modifyuser":   user["name"],
-			"s_type":         1,
-			"i_modifytime":   time.Now().Unix(),
-			"s_modifyreason": reasons,
-			"s_backup":       cur_id,
-			"o_oldinfo":      map[string]interface{}{},
-			"o_newinfo":      updata,
-		}
-		Mgo.Save(JyRecord, log_data)
-
-		jy.ServeJson(map[string]interface{}{
-			"rep": true,
-		})
-
-	} else {
-		jy.ServeJson(map[string]interface{}{
-			"rep": false,
-		})
-	}
-
-}
-
-//编辑
-func (jy *RepairRule) RepairEdit() {
-	defer qu.Catch()
-	id := jy.GetString("id")
-	coll := jy.GetString("coll")
-	data, _ := JYMgo.FindById(coll, id, "")
-	//contenthtml detail 单独拿出来
-	detail := qu.ObjToString((*data)["detail"])
-	contenthtml := qu.ObjToString((*data)["contenthtml"])
-	summary := qu.ObjToString((*data)["summary"])
-	jy.T["detail"] = detail
-	jy.T["contenthtml"] = contenthtml
-	jy.T["summary"] = summary
-	delete(*data, "detail")
-	delete(*data, "contenthtml")
-	delete(*data, "summary")
-
-	jy.T["data"] = *data
-	jy.T["coll"] = coll
-
-	jy.Render("repair/jy_edit.html", &jy.T)
-}
-
-//删除
-func (jy *RepairRule) RepairDelete() {
-	defer qu.Catch()
-	id := jy.GetString("_id")
-	coll := jy.GetString("coll")
-	old_data, _ := JYMgo.FindById(coll, id, "") //记录当前表的源数据
-	log.Println(id, coll)
-	set := bson.M{"_id": qu.StringTOBsonId(id)}
-	b := JYMgo.Del(coll, set)
-
-	if !b {
-		jy.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-	} else {
-		//删除es
-		client := elastic.GetEsConn()
-		defer elastic.DestoryEsConn(client)
-
-		_, err := client.Delete().Index(EsIndex).Type(EsType).Id(id).Refresh(true).Do()
-		if err != nil {
-			log.Println("delete es err:", err)
-		}
-
-		//删除redis 指定key
-		jyredis := redis.RedisPool[RedisJYName].Get()
-		defer jyredis.Close()
-		if _, err := jyredis.Do("SELECT", 0); err != nil {
-			log.Println("删除-redis-select-db失败")
-		} else {
-			delName1 := RedisDelKey1 + id
-			if _, err1 := jyredis.Do("DEL", delName1); err1 != nil {
-				log.Println("删除-del-redis-fail:", delName1)
-			}
-			delName2 := RedisDelKey2 + id
-			if _, err2 := jyredis.Do("DEL", delName2); err2 != nil {
-				log.Println("删除-del-redis-fail:", delName2)
-			}
-			delName3 := RedisDelKey3 + id
-			if _, err3 := jyredis.Do("DEL", delName3); err3 != nil {
-				log.Println("删除-del-redis-fail:", delName3)
-			}
-		}
-
-		//日志记录
-		user := jy.GetSession("user").(map[string]interface{})
-		log_data := map[string]interface{}{
-			"s_modifyuser":   user["name"],
-			"s_type":         3,
-			"i_modifytime":   time.Now().Unix(),
-			"s_modifyreason": "",
-			"s_backupid":     id,
-			"o_oldinfo":      old_data,
-			"o_newinfo":      map[string]interface{}{},
-		}
-		Mgo.Save(JyRecord, log_data)
-
-		jy.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-	}
-}
-
-//修改-mongo -es
-func (jy *RepairRule) RepairSave() {
-	defer qu.Catch()
-	if jy.Method() == "POST" {
-		request_data := GetPostForm(jy.Request)
-		updata := qu.ObjToMap(request_data["data"])
-		coll := qu.ObjToString(request_data["coll"])
-		id := qu.ObjToString((*updata)["_id"])
-		old_data, _ := JYMgo.FindById(coll, id, "") //记录当前表的源数据
-		delete(*old_data, "_id")
-		reasons := qu.ObjToString(request_data["reasons"])
-		//contenthtml := qu.ObjToString(request_data["contenthtml"])
-		//detail := qu.ObjToString(request_data["detail"])
-		//summary := qu.ObjToString(request_data["summary"])
-		modifyinfo := qu.ObjToMap(request_data["modifyinfo"])
-		//(*updata)["contenthtml"] = contenthtml
-		//(*updata)["detail"] = detailClear(detail)
-		//变更字段
-		if (*updata)["modifyinfo"] != nil {
-			tmpinfo := (*updata)["modifyinfo"].(map[string]interface{})
-			for k, v := range *modifyinfo{
-				tmpinfo[k] = v
-			}
-			(*updata)["modifyinfo"] = tmpinfo
-		}else {
-			(*updata)["modifyinfo"] = modifyinfo
-		}
-
-		//处理个别字段
-		if val, ok := (*updata)["publishtime"]; ok {
-			(*updata)["publishtime"] = qu.Int64All(val)
-		} else {
-			pt := int64(0)
-			(*updata)["publishtime"] = pt
-		}
-		if val, ok := (*updata)["infoformat"]; ok {
-			(*updata)["infoformat"] = qu.IntAll(val)
-		} else {
-			(*updata)["infoformat"] = 1
-		}
-		(*updata)["extracttype"] = 0
-
-		query := bson.M{
-			"_id": qu.StringTOBsonId(id),
-		}
-		delete(*updata, "_id")
-
-		var set map[string]interface{}
-		if (*modifyinfo)["summary"] == nil {
-			delete(*updata, "summary")
-			set = bson.M {
-				"$set": *updata,
-				"$unset": bson.M{
-					"summary": "",
-				},
-			}
-		}else {
-			set = bson.M {
-				"$set": *updata,
-			}
-		}
-		FormatNumber(*updata)
-		rep := JYMgo.Update(coll, query, set, true, false)
-		qu.Debug("mgo id:" + id + "------", rep)
-		if !rep {
-			jy.ServeJson(map[string]interface{}{
-				"rep": rep,
-			})
-		} else {
-
-			//调udp生索引
-			indexNode := *qu.ObjToMap(Sysconfig["indexNode"])
-			param := map[string]interface{}{"coll": JyCollNameOne}
-			by, _ := json.Marshal(map[string]interface{}{
-				"query": map[string]interface{}{
-					"_id": bson.M{
-						"$gte": bson.ObjectIdHex(id),
-						"$lte": bson.ObjectIdHex(id),
-					}},
-				"stype": qu.ObjToString(indexNode["stype"]),
-				"param": param,
-			})
-			addr := &net.UDPAddr{
-				IP:   net.ParseIP(indexNode["addr"].(string)),
-				Port: qu.IntAll(indexNode["port"]),
-			}
-			udptask.Udpclient.WriteUdp(by, mu.OP_TYPE_DATA, addr)
-
-			//删除redis 指定key
-			jyredis := redis.RedisPool[RedisJYName].Get()
-			defer jyredis.Close()
-			if _, err := jyredis.Do("SELECT", 0); err != nil {
-				log.Println("更新-redis-select-db失败")
-			} else {
-				delName1 := RedisDelKey1 + id
-				if _, err1 := jyredis.Do("DEL", delName1); err1 != nil {
-					log.Println("更新-del-redis-fail:", delName1)
-				}
-				delName2 := RedisDelKey2 + id
-				if _, err2 := jyredis.Do("DEL", delName2); err2 != nil {
-					log.Println("更新-del-redis-fail:", delName2)
-				}
-				delName3 := RedisDelKey3 + id
-				if _, err3 := jyredis.Do("DEL", delName3); err3 != nil {
-					log.Println("更新-del-redis-fail:", delName3)
-				}
-			}
-
-			//日志记录
-			user := jy.GetSession("user").(map[string]interface{})
-			log_data := map[string]interface{}{
-				"s_modifyuser":   user["name"],
-				"s_type":         2,
-				"i_modifytime":   time.Now().Unix(),
-				"s_modifyreason": reasons,
-				"s_backupid":     id,
-				"o_oldinfo":      old_data,
-				"o_newinfo":      updata,
-				"modifyinfo": 	  modifyinfo,
-			}
-			Mgo.Save(JyRecord, log_data)
-
-			jy.ServeJson(map[string]interface{}{
-				"rep": rep,
-			})
-		}
-
-	}
-}
-
-//查询
-func (jy *RepairRule) SearchID() {
-	defer qu.Catch()
-	if jy.Method() == "POST" {
-		id := jy.GetString("_id")
-		//先查one 没有在查two
-		if !bson.IsObjectIdHex(id) {
-			jy.ServeJson(map[string]interface{}{
-				"rep": false,
-				"msg": "id格式不正确",
-			})
-		} else {
-			data_one, rep_one := JYMgo.Find(JyCollNameOne, bson.M{"_id": qu.StringTOBsonId(id)}, nil, nil, false, -1, -1)
-			if !rep_one || len(*data_one) <= 0 {
-				data_two, rep_two := JYMgo.Find(JyCollNameTwo, bson.M{"_id": qu.StringTOBsonId(id)}, nil, nil, false, -1, -1)
-				if !rep_two || len(*data_two) <= 0 {
-					jy.ServeJson(map[string]interface{}{
-						"rep": false,
-						"msg": "未查询到数据",
-					})
-				} else {
-					jy.ServeJson(map[string]interface{}{
-						"orgColl": JyCollNameTwo,
-						"rep":     rep_two,
-						"data":    data_two,
-					})
-				}
-			} else {
-				jy.ServeJson(map[string]interface{}{
-					"orgColl": JyCollNameOne,
-					"rep":     rep_one,
-					"data":    data_one,
-				})
-			}
-		}
-	}
-}
-
-func (jy *RepairRule) SearchJyurl() {
-	defer qu.Catch()
-	if jy.Method() == "POST" {
-
-		jyurl := jy.GetString("jyurl")
-		jyurl = rpre.ReplaceAllString(jyurl, "")
-		jyurl = rsuf.ReplaceAllString(jyurl, "")
-		new_id := qu.CommonDecodeArticle("content", jyurl)[0]
-		log.Println(new_id)
-
-		if !bson.IsObjectIdHex(new_id) {
-			jy.ServeJson(map[string]interface{}{
-				"rep": false,
-				"msg": "href格式不正确",
-			})
-		} else {
-			data_one, rep_one := JYMgo.Find(JyCollNameOne, bson.M{"_id": qu.StringTOBsonId(new_id)}, nil, nil, false, -1, -1)
-			if !rep_one || len(*data_one) <= 0 {
-				data_two, rep_two := JYMgo.Find(JyCollNameTwo, bson.M{"_id": qu.StringTOBsonId(new_id)}, nil, nil, false, -1, -1)
-				if !rep_two || len(*data_two) <= 0 {
-					jy.ServeJson(map[string]interface{}{
-						"rep": false,
-						"msg": "未查询到数据",
-					})
-				} else {
-					jy.ServeJson(map[string]interface{}{
-						"orgColl": JyCollNameTwo,
-						"rep":     rep_two,
-						"data":    data_two,
-					})
-				}
-			} else {
-				jy.ServeJson(map[string]interface{}{
-					"orgColl": JyCollNameOne,
-					"rep":     rep_one,
-					"data":    data_one,
-				})
-			}
-		}
-
-	}
-}
-
-func detailClear(detail string) string {
-	cut := NewCut()
-	new_s := cut.ClearHtml(detail)
-	return new_s
-}
-
-func (jy *RepairRule) RepairBulk()  {
-	defer qu.Catch()
-	jy.Render("repair/jy_bulk.html")
-}
-
-func (jy *RepairRule) RepairRecord() {
-	defer qu.Catch()
-	if jy.Method() == "POST" {
-		start, _ := jy.GetInteger("start")
-		limit, _ := jy.GetInteger("length")
-		draw, _ := jy.GetInteger("draw")
-		searchStr := jy.GetString("search[value]")
-		search := strings.TrimSpace(searchStr)
-		query := bson.M{}
-		if search != "" {
-			query["$or"] = []interface{}{
-				//bson.M{"s_customer": bson.M{"$regex": search}},
-				//bson.M{"s_tagname": bson.M{"$regex": search}},
-			}
-		}
-
-		data, _ := Mgo.Find("jy_modify_log", query, `{"i_modifytime": -1}`, nil, false, start, limit)
-		count := Mgo.Count("jy_modify_log", query)
-		jy.ServeJson(map[string]interface{}{
-			"draw":            draw,
-			"data":            data,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	} else {
-		jy.Render("repair/jy_bulk.html")
-	}
-}
-
-func (jy *RepairRule) RepairImport() {
-	defer qu.Catch()
-	if jy.Method() == "POST" {
-		mf, _, err := jy.GetFile("xlsx")
-		if err == nil {
-			binary, err := ioutil.ReadAll(mf)
-			if err == nil {
-				data, err := ParsJyData(binary)
-				if err == nil {
-					jy.ServeJson(map[string]interface{}{
-						"data": data,
-						"rep":   true,
-					})
-					return
-				}
-			}
-		}
-		jy.ServeJson(map[string]interface{}{
-			"rep": false,
-		})
-	}
-}
-
-func (jy *RepairRule) RepairModify() {
-	defer qu.Catch()
-	if jy.Method() == "POST" {
-		user := jy.GetSession("user").(map[string]interface{})
-		data := GetPostForm(jy.Request)
-		var updata []map[string]interface{}
-		json.Unmarshal([]byte(qu.ObjToString(data["data"])), &updata)
-		var errs []map[string]interface{}
-		for _, tmp := range updata{
-			err := ModifyData(tmp, user)
-			if err != nil {
-				errs = append(errs, err)
-			}
-			time.Sleep(time.Millisecond * 1)
-		}
-
-		if len(errs) > 0 {
-			jy.ServeJson(map[string]interface{}{
-				"rep": false,
-				"data": errs,
-			})
-		}else {
-			jy.ServeJson(map[string]interface{}{
-				"rep": true,
-			})
-		}
-	}
-}
-
-func ModifyData(tmp map[string]interface{}, user map[string]interface{}) (err map[string]interface{}) {
-	id := qu.ObjToString(tmp["_id"])
-	old_data, _ := JYMgo.FindById(JyCollNameOne, id, `{}`)
-	coll := ""
-	if old_data != nil {
-		coll = JyCollNameOne
-	}else {
-		t, _ := JYMgo.FindById(JyCollNameTwo, id, `{}`)
-		if t != nil {
-			return map[string]interface{}{"_id": id, "err": "未找到数据"}
-		}else {
-			old_data = t
-		}
-	}
-	delete(*old_data, "_id")
-	new_data := Copy(*old_data).(map[string]interface{})
-	modifyinfo := make(map[string]interface{})
-	del_data := make(map[string]interface{})
-	for k, v := range tmp{
-		if k == "_id" {
-			continue
-		}
-		if strings.EqualFold(strings.ToUpper(qu.ObjToString(v)), "DEL") {
-			del_data[k] = ""
-			delete(new_data, k)
-		}else if k == "budget" || k == "bidamount" {
-			new_data[k] = qu.Float64All(v)
-		}else if k == "publishtime" || k == "bidopentime" || k == "signaturedate" {
-			new_data[k] = qu.Int64All(v)
-		}else {
-			new_data[k] = v
-		}
-		modifyinfo[k] = "剑鱼维护"
-	}
-	//变更字段
-	if new_data["modifyinfo"] != nil {
-		tmpinfo := new_data["modifyinfo"].(map[string]interface{})
-		for k, v := range modifyinfo{
-			tmpinfo[k] = v
-		}
-		new_data["modifyinfo"] = tmpinfo
-	}else {
-		new_data["modifyinfo"] = modifyinfo
-	}
-
-	if val, ok := new_data["publishtime"]; ok {
-		new_data["publishtime"] = qu.Int64All(val)
-	} else {
-		pt := int64(0)
-		new_data["publishtime"] = pt
-	}
-	if val, ok := new_data["infoformat"]; ok {
-		new_data["infoformat"] = qu.IntAll(val)
-	} else {
-		new_data["infoformat"] = 1
-	}
-	new_data["extracttype"] = 0
-	query := bson.M{
-		"_id": qu.StringTOBsonId(id),
-	}
-	delete(new_data, "_id")
-	var set map[string]interface{}
-	if len(del_data) == 0 {
-		set = bson.M {
-			"$set": new_data,
-		}
-	}else {
-		set = bson.M {
-			"$set": new_data,
-			"$unset": del_data,
-		}
-	}
-	rep := JYMgo.Update(coll, query, set, false, false)
-	if !rep {
-		return map[string]interface{}{"_id": id, "err": "更新失败"}
-	}
-
-	indexNode := *qu.ObjToMap(Sysconfig["indexNode"])
-	param := map[string]interface{}{"coll": JyCollNameOne}
-	by, _ := json.Marshal(map[string]interface{}{
-		"query": map[string]interface{}{
-			"_id": bson.M{
-				"$gte": bson.ObjectIdHex(id),
-				"$lte": bson.ObjectIdHex(id),
-			}},
-		"stype": qu.ObjToString(indexNode["stype"]),
-		"param": param,
-	})
-	addr := &net.UDPAddr{
-		IP:   net.ParseIP(indexNode["addr"].(string)),
-		Port: qu.IntAll(indexNode["port"]),
-	}
-	udptask.Udpclient.WriteUdp(by, mu.OP_TYPE_DATA, addr)
-
-	//删除redis 指定key
-	jyredis := redis.RedisPool[RedisJYName].Get()
-	defer jyredis.Close()
-	if _, err := jyredis.Do("SELECT", 0); err != nil {
-		log.Println("更新-redis-select-db失败")
-	} else {
-		delName1 := RedisDelKey1 + id
-		if _, err1 := jyredis.Do("DEL", delName1); err1 != nil {
-			log.Println("更新-del-redis-fail:", delName1)
-		}
-		delName2 := RedisDelKey2 + id
-		if _, err2 := jyredis.Do("DEL", delName2); err2 != nil {
-			log.Println("更新-del-redis-fail:", delName2)
-		}
-	}
-
-	delete(new_data, "modifyinfo")
-	log_data := map[string]interface{}{
-		"s_modifyuser":   user["name"],
-		"s_type":         2,
-		"i_modifytime":   time.Now().Unix(),
-		"s_modifyreason": "批量修改",
-		"s_backupid":     id,
-		"o_oldinfo":      old_data,
-		"o_newinfo":      new_data,
-		"modifyinfo": 	  modifyinfo,
-	}
-	qu.Debug(log_data)
-	Mgo.Save(JyRecord, log_data)
-	return nil
-}

+ 0 - 189
src/service/tag_rule_service.go

@@ -1,189 +0,0 @@
-package service
-
-import (
-	"encoding/json"
-	"github.com/go-xweb/xweb"
-	"io/ioutil"
-	qu "qfw/util"
-	"strings"
-	"time"
-
-	. "util"
-
-	"gopkg.in/mgo.v2/bson"
-)
-
-/**
- *	标签规则
- */
-
-type TagRule struct {
-	*xweb.Action
-	tagList   xweb.Mapper `xweb:"/service/tag_rule/list"`   //列表
-	tagCreate xweb.Mapper `xweb:"/service/tag_rule/create"` //新建
-	tagDel    xweb.Mapper `xweb:"/service/tag_rule/del"`    //删除
-	tagEdit   xweb.Mapper `xweb:"/service/tag_rule/edit"`   //编辑
-	tagSave   xweb.Mapper `xweb:"/service/tag_rule/save"`   //保存
-	tagImport xweb.Mapper `xweb:"/service/tag_rule/import"` //导入
-	tagSetup  xweb.Mapper `xweb:"/service/tag_rule/setup"`  //启用停用
-}
-
-func (r *TagRule) TagList() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-		start, _ := r.GetInteger("start")
-		limit, _ := r.GetInteger("length")
-		draw, _ := r.GetInteger("draw")
-		searchStr := r.GetString("search[value]")
-		search := strings.TrimSpace(searchStr)
-		query := bson.M{
-			"b_delete": false,
-		}
-		if search != "" {
-			query["$or"] = []interface{}{
-				bson.M{"s_tagname": bson.M{"$regex": search}},
-			}
-		}
-
-		data, _ := Mgo.Find("tagrule", query, `{"i_createtime":-1}`, nil, false, start, limit)
-		count := Mgo.Count("tagrule", query)
-		r.ServeJson(map[string]interface{}{
-			"draw":            draw,
-			"data":            data,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	} else {
-		r.T["tagFieldMap"] = TagFieldMap
-		r.T["taskTypeMap"] = TaskTypeMap
-		r.Render("private/tag_rule_list.html", &r.T)
-	}
-}
-
-func (r *TagRule) TagCreate() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-
-	} else {
-		r.T["tagFieldMap"] = TagFieldMap
-		r.T["taskTypeMap"] = TaskTypeMap
-		r.T["matchTypeMap"] = MatchTypeMap3
-		r.Render("private/tag_rule_create.html", &r.T)
-	}
-}
-
-func (r *TagRule) TagEdit() {
-	defer qu.Catch()
-	id := r.GetString("id")         //标签列表编辑
-	query := bson.M{}
-	query["_id"] = qu.StringTOBsonId(id)
-	data, _ := Mgo.FindOneByField("tagrule", query, `{}`)
-	(*data)["id"] = qu.BsonIdToSId((*data)["_id"])
-	r.T["data"] = *data
-	r.T["tagFieldMap"] = TagFieldMap
-	r.T["taskTypeMap"] = TaskTypeMap
-	r.T["matchTypeMap"] = MatchTypeMap3
-	r.Render("private/tag_rule_edit.html", &r.T)
-}
-
-func (r *TagRule) TagSave() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-		user := r.GetSession("user").(map[string]interface{})
-		data := GetPostForm(r.Request)
-		id := qu.ObjToString(data["id"])
-		delete(data, "id")
-		var oList []map[string]interface{}
-		oListstr := qu.ObjToString(data["o_list"])
-		json.Unmarshal([]byte(oListstr), &oList)
-		data["o_list"] = oList
-		i_createtime := time.Now().Unix()
-		data["i_updatetime"] = i_createtime
-		data["s_updateuser"] = user["name"]
-		if id == "" { //新建
-			data["i_createtime"] = i_createtime
-			data["s_createuser"] = user["name"]
-			data["i_isuse"] = 0
-			data["b_delete"] = false
-		}
-		id, rep := updateDbXf2(id, data)
-		r.ServeJson(map[string]interface{}{
-			"id":        id,
-			"rep":       rep,
-		})
-	}
-}
-
-func (r *TagRule) TagDel() {
-	defer qu.Catch()
-	_id := r.GetString("_id")
-	set := bson.M{
-		"$set": bson.M{
-			"b_delete": true,
-		},
-	}
-	b := Mgo.UpdateById("tagrule", _id, set)
-	r.ServeJson(map[string]interface{}{
-		"rep": b,
-	})
-}
-
-func updateDbXf2(id string, rdata map[string]interface{}) (rid string, rep bool) {
-	defer qu.Catch()
-	if id == "" {
-		rid = Mgo.Save("tagrule", rdata)
-		if rid != "" {
-			rep = true
-		} else {
-			rep = false
-		}
-	} else {
-		rid = id
-		query := bson.M{
-			"_id": qu.StringTOBsonId(id),
-		}
-		rep = Mgo.Update("tagrule", query, bson.M{"$set": rdata}, false, false)
-	}
-	return
-}
-
-func (r *TagRule) TagImport() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-		mf, _, err := r.GetFile("xlsx")
-		if err == nil {
-			binary, err := ioutil.ReadAll(mf)
-			if err == nil {
-				rdata, err := Parsxlsx(binary)
-				if err == nil {
-					r.ServeJson(map[string]interface{}{
-						"rdata": rdata,
-						"id":    "",
-						"rep":   true,
-					})
-					return
-				}
-			}
-		}
-		r.ServeJson(map[string]interface{}{
-			"rep": false,
-		})
-	}
-}
-
-func (r *TagRule) TagSetup() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-		_id := r.GetString("_id")
-		i_isuse, _ := r.GetInteger("i_isuse")
-		set := bson.M{
-			"$set": bson.M{
-				"i_isuse": i_isuse,
-			},
-		}
-		b := Mgo.UpdateById("tagrule", _id, set)
-		r.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-	}
-}

+ 0 - 231
src/service/task_rule.go

@@ -1,231 +0,0 @@
-package service
-
-import (
-	"encoding/json"
-	"log"
-	mu "mfw/util"
-	"net"
-	qu "qfw/util"
-	"strings"
-	"time"
-	. "udptask"
-	. "util"
-
-	"github.com/go-xweb/xweb"
-	"gopkg.in/mgo.v2/bson"
-)
-
-type TaskRule struct {
-	*xweb.Action
-	taskList   xweb.Mapper `xweb:"/service/task/list"`   //任务列表
-	taskCreate xweb.Mapper `xweb:"/service/task/create"` //任务创建
-	taskEdit   xweb.Mapper `xweb:"/service/task/edit"`   //任务编辑
-	taskSave   xweb.Mapper `xweb:"/service/task/save"`   //任务保存
-	taskDelete xweb.Mapper `xweb:"/service/task/delete"` //任务保存
-	taskStart  xweb.Mapper `xweb:"/service/task/start"`  //任务保存
-	taskEnd    xweb.Mapper `xweb:"/service/task/end"`    //任务保存
-}
-
-//展示列表
-func (task *TaskRule) TaskList() {
-	defer qu.Catch()
-	if task.Method() == "POST" {
-		searchStr := task.GetString("search[value]")
-		search := strings.TrimSpace(searchStr)
-		query := bson.M{}
-		if search != "" {
-			query["$or"] = []interface{}{
-				bson.M{"s_taskname": bson.M{"$regex": search}},
-			}
-		}
-		data, _ := Mgo.Find("taskinfo", query, `{"i_createtime":-1}`, nil, false, -1, -1)
-		count := Mgo.Count("taskinfo", query)
-		task.ServeJson(map[string]interface{}{
-			"data":            data,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	} else {
-		task.Render("task/task_list.html")
-	}
-}
-
-//创建
-func (task *TaskRule) TaskCreate() {
-	defer qu.Catch()
-	if task.Method() == "POST" {
-
-	} else {
-		task.T["taskType"] = TaskTypeMap //任务类型
-		task.Render("task/task_create.html")
-	}
-}
-
-//编辑
-func (task *TaskRule) TaskEdit() {
-	defer qu.Catch()
-	log.Println("编辑")
-	id := task.GetString("id")
-	query := bson.M{}
-	query["_id"] = qu.StringTOBsonId(id)
-	data, _ := Mgo.FindOneByField("taskinfo", query, `{}`)
-	(*data)["id"] = qu.BsonIdToSId((*data)["_id"])
-	task.T["data"] = *data
-	task.T["taskType"] = *TaskTypeMap
-	log.Println(*data)
-	log.Println(*TaskTypeMap)
-	task.Render("task/task_edit.html", &task.T)
-}
-
-//保存
-func (task *TaskRule) TaskSave() {
-	defer qu.Catch()
-	if task.Method() == "POST" {
-		user := task.GetSession("user").(map[string]interface{})
-		data := GetPostForm(task.Request)
-
-		id := data["id"].(string)
-		delete(data, "id")
-		curtime := time.Now().Unix()
-		if id == "" { //新建
-			log.Println("新建-数据")
-			data["i_createtime"] = curtime
-			data["s_createuser"] = user["name"]
-			data["i_updatetime"] = curtime
-
-		} else {
-			log.Println("更新-数据", id)
-			data["i_updatetime"] = curtime
-			data["s_updateuser"] = user["name"]
-		}
-		id, rep := saveTaskMongo(id, data)
-		task.ServeJson(map[string]interface{}{
-			"rep": rep,
-		})
-	}
-}
-
-//删除
-func (task *TaskRule) TaskDelete() {
-	defer qu.Catch()
-	_id := task.GetString("_id")
-	set := bson.M{"_id": qu.StringTOBsonId(_id)}
-	b := Mgo.Del("taskinfo", set)
-	task.ServeJson(map[string]interface{}{
-		"rep": b,
-	})
-}
-
-//开始任务
-func (task *TaskRule) TaskStart() {
-	defer qu.Catch()
-	data := GetPostForm(task.Request)
-	id := qu.ObjToString(data["id"])
-	//发送udp 开启
-	by, _ := json.Marshal(map[string]interface{}{
-		"taskid": id,
-		"stype":  "startTask",
-	})
-	addr := &net.UDPAddr{
-		IP:   net.ParseIP(data["addr"].(string)),
-		Port: qu.IntAll(data["port"]),
-	}
-	err := Udpclient.WriteUdp(by, mu.OP_TYPE_DATA, addr)
-	if err != nil {
-		task.ServeJson(map[string]interface{}{
-			"rep": false,
-			"msg": "任务开始失败-udp",
-		})
-	}
-
-	n := 0
-	for {
-		if !IsTaskOK && n < Timeout {
-			time.Sleep(1 * time.Second)
-			n++
-		} else {
-			break
-		}
-	}
-	log.Println("循环结束", IsTaskOK, n, "处理开启post回调")
-	if IsTaskOK {
-		IsTaskOK = false
-		task.ServeJson(map[string]interface{}{
-			"rep": true,
-			"msg": "任务开始成功",
-		})
-	} else {
-		IsTaskOK = false
-		task.ServeJson(map[string]interface{}{
-			"rep": false,
-			"msg": "任务开始失败-超时",
-		})
-	}
-}
-
-//关闭任务
-func (task *TaskRule) TaskEnd() {
-	defer qu.Catch()
-	data := GetPostForm(task.Request)
-	id := qu.ObjToString(data["id"])
-	//发送udp 关闭
-	by, _ := json.Marshal(map[string]interface{}{
-		"taskid": id,
-		"stype":  "stopTask",
-	})
-	addr := &net.UDPAddr{
-		IP:   net.ParseIP(data["addr"].(string)),
-		Port: qu.IntAll(data["port"]),
-	}
-	err := Udpclient.WriteUdp(by, mu.OP_TYPE_DATA, addr)
-	if err != nil {
-		task.ServeJson(map[string]interface{}{
-			"rep": false,
-			"msg": "任务开始失败-udp",
-		})
-	}
-
-	n := 0
-	for {
-		if !IsTaskOK && n < Timeout {
-			time.Sleep(1 * time.Second)
-			n++
-		} else {
-			break
-		}
-	}
-	log.Println("循环结束", IsTaskOK, n, "处理关闭post回调")
-	if IsTaskOK {
-		IsTaskOK = false
-		task.ServeJson(map[string]interface{}{
-			"rep": true,
-			"msg": "任务开始成功",
-		})
-	} else {
-		IsTaskOK = false
-		task.ServeJson(map[string]interface{}{
-			"rep": false,
-			"msg": "任务开始失败-超时",
-		})
-	}
-}
-
-//******方法
-func saveTaskMongo(id string, rdata map[string]interface{}) (rid string, rep bool) {
-	defer qu.Catch()
-	if id == "" {
-		rid = Mgo.Save("taskinfo", rdata)
-		if rid != "" {
-			rep = true
-		} else {
-			rep = false
-		}
-	} else {
-		rid = id
-		query := bson.M{
-			"_id": qu.StringTOBsonId(id),
-		}
-		rep = Mgo.Update("taskinfo", query, bson.M{"$set": rdata}, false, false)
-	}
-	return
-}

+ 0 - 71
src/udptask/udptask.go

@@ -1,71 +0,0 @@
-package udptask
-
-import (
-	"encoding/json"
-	"log"
-	mu "mfw/util"
-	"net"
-	qu "qfw/util"
-	"util"
-
-	"gopkg.in/mgo.v2/bson"
-)
-
-var (
-	Udpclient mu.UdpClient //udp对象
-	IsTaskOK  bool
-	Timeout   = 3
-)
-
-func InitUdp() {
-	updport := util.Sysconfig["udpport"].(string)
-	Udpclient = mu.UdpClient{Local: updport, BufSize: 1024}
-	log.Println("Udp服务监听", updport)
-	Udpclient.Listen(processUdpMsg)
-}
-
-func processUdpMsg(act byte, data []byte, ra *net.UDPAddr) {
-	switch act {
-	case mu.OP_TYPE_DATA://测试接收
-		var rep map[string]interface{}
-		err := json.Unmarshal(data, &rep)
-		log.Println("测试接收:",rep)
-		if err != nil {
-			//go Udpclient.WriteUdp([]byte{}, mu.OP_NOOP, ra) //回应上一个节点
-		} else {
-			//by, _ := json.Marshal(map[string]interface{}{
-			//	"taskid": rep["taskid"],
-			//	"stype":  rep["stype"],
-			//})
-			//go Udpclient.WriteUdp(by, mu.OP_NOOP, ra) //回应上一个节点
-		}
-	case mu.OP_NOOP: //下个节点回应
-		qu.Debug("接收回应:", string(data))
-		var rep map[string]interface{}
-		err := json.Unmarshal(data, &rep)
-		if err != nil { //空数据
-			//
-
-		} else { //正确
-			if qu.ObjToString(rep["stype"]) == "startTask" {
-				updateMgoIsuse("1", qu.ObjToString(rep["taskid"]))
-			} else if rep["stype"] == "stopTask" {
-				updateMgoIsuse("0", qu.ObjToString(rep["taskid"]))
-			} else {
-				log.Println("回应其他:",rep)
-			}
-		}
-	}
-
-}
-
-func updateMgoIsuse(isu string, id string) {
-	set := bson.M{
-		"$set": bson.M{
-			"s_isuse": isu,
-		},
-	}
-	log.Println(id)
-	util.Mgo.UpdateById("taskinfo", id, set)
-	IsTaskOK = true
-}

+ 0 - 47
src/util/config.go

@@ -4,29 +4,17 @@ import (
 	"qfw/mongodb"
 	qu "qfw/util"
 	"qfw/util/elastic"
-	"qfw/util/redis"
 )
 
 var (
 	Sysconfig       map[string]interface{} //配置文件
 	Mgo             *mongodb.MongodbSim
 	MgoCus          *mongodb.MongodbSim //企业服务库
-	JYMgo           *mongodb.MongodbSim
 	MgoEn           *mongodb.MongodbSim
-	JyProMgo        *mongodb.MongodbSim
 	EsIndex, EsType string
 	MgoEnC          string
 	Subday          float64
 	PreviewHref     string //数据预览地址
-	JyCollNameOne   string
-	JyCollNameTwo   string
-	JyRecord        string
-	JyMgoColl       string
-	JyProRecord     string
-	RedisJYName     string
-	RedisDelKey1    string
-	RedisDelKey2    string
-	RedisDelKey3    string
 	CustomerApi     string
 )
 
@@ -74,39 +62,6 @@ func initMgoEn() {
 	MgoEn.InitPool()
 }
 
-func initJYMgo() {
-	jymgo := *qu.ObjToMap(Sysconfig["jymgo"])
-	JYMgo = &mongodb.MongodbSim{
-		MongodbAddr: qu.ObjToString(jymgo["jyaddr"]),
-		Size:        qu.IntAll(jymgo["jydbsize"]),
-		DbName:      qu.ObjToString(jymgo["jydbname"]),
-	}
-	JyCollNameOne = qu.ObjToString(jymgo["jycollname1"])
-	JyCollNameTwo = qu.ObjToString(jymgo["jycollname2"])
-	JyRecord = qu.ObjToString(Sysconfig["jy_info_back"])
-	JyProRecord = qu.ObjToString(Sysconfig["jy_pro_back"])
-	JYMgo.InitPool()
-
-	//项目
-	jypro := *qu.ObjToMap(Sysconfig["jy_pro"])
-	JyProMgo = &mongodb.MongodbSim{
-		MongodbAddr: qu.ObjToString(jypro["mgodb"]),
-		Size:        qu.IntAll(jypro["dbsize"]),
-		DbName:      qu.ObjToString(jypro["dbname"]),
-	}
-	JyMgoColl = qu.ObjToString(jypro["coll"])
-	JyProMgo.InitPool()
-}
-
-func initJYRedis() {
-	jyredis := *qu.ObjToMap(Sysconfig["jyredis"])
-	redis.InitRedisBySize(qu.ObjToString(jyredis["redis_jy"]), 50, 30, 240)
-	RedisJYName = qu.ObjToString(jyredis["redis_jy_name"])
-	RedisDelKey1 = qu.ObjToString(jyredis["redisdelkey1"])
-	RedisDelKey2 = qu.ObjToString(jyredis["redisdelkey2"])
-	RedisDelKey3 = qu.ObjToString(jyredis["redisdelkey3"])
-}
-
 func InitOther() {
 	initCitys()
 	initInfoType()
@@ -117,8 +72,6 @@ func InitOther() {
 	initTaskType()
 	initEs()
 	initMgoEn()
-	initJYMgo()
-	initJYRedis()
 	Subday = qu.Float64All(Sysconfig["subday"])
 	PreviewHref = qu.ObjToString(Sysconfig["preview_href"])
 	initTagField()

+ 0 - 132
src/util/utiltag.go

@@ -59,138 +59,6 @@ func UtilEsSaveData(sdataid string, datas *[]map[string]interface{}) error {
 
 }
 
-func UtilEsFind(tags map[string]interface{}) (error, int64) {
-	defer util.Catch()
-	sdataid := util.ObjToString(tags["s_dataid"])
-	esquery := util.ObjToString(tags["s_esquery"])
-	if len(esquery) < 1 || len(sdataid) < 1 {
-		return errors.New("s_esquery or s_dataid no found"), 0
-	}
-	i_maxnum := util.Int64All(tags["i_maxnum"])
-	if i_maxnum <= 0 {
-		i_maxnum = 100
-	}
-	maths := make([]map[string]string, 0)
-	if orules, ok := tags["o_rules"].([]interface{}); ok {
-		for _, v := range orules {
-			orule, _ := v.(map[string]interface{})
-			maths = append(maths, map[string]string{
-				"s_matchkey": util.ObjToString(orule["s_matchkey"]),
-				"s_keymatch": util.ObjToString(orule["s_keymatch"]),
-			})
-		}
-	} else if orules, ok := tags["o_rules"].([]map[string]interface{}); ok {
-		for _, v := range orules {
-			maths = append(maths, map[string]string{
-				"s_matchkey": util.ObjToString(v["s_matchkey"]),
-				"s_keymatch": util.ObjToString(v["s_keymatch"]),
-			})
-		}
-	} else {
-		return errors.New("o_rules no found"), 0
-	}
-	client := elastic.GetEsConn()
-	defer elastic.DestoryEsConn(client)
-	esquery = esquery[:len(esquery)-1] + `,"size":` + fmt.Sprintf("%d", i_maxnum) + `}`
-	searchResult, err := client.Search(EsIndex).Source(esquery).Do()
-	if err == nil && searchResult.Hits != nil {
-		datas := make([]map[string]interface{}, 0)
-		util.Debug("es查询到的数量:", searchResult.Hits.TotalHits)
-		for _, v := range searchResult.Hits.Hits {
-			item := make(map[string]interface{})
-			if json.Unmarshal(*v.Source, &item) == nil {
-				delete(item,"_id")
-				item["info_id"] = v.Id
-				item["s_dataid"] = sdataid
-				item["s_jyhref"] = fmt.Sprintf(Url, util.CommonEncodeArticle("content", v.Id))
-				item["i_createtime"] = time.Now().Unix()
-				var d *DFA = &DFA{}
-				var analyKeys []string		 //找到的关键词
-				var matchType []string		 //匹配方式
-				for _, math := range maths {
-					fileds := strsToArr(math["s_keymatch"], "field")
-					d.AddWord(strings.Split(math["s_matchkey"], ",")...)
-					mkMap := make(map[string]interface{})
-					tmpMap := make(map[string]interface{})
-					for _, mk := range strings.Split(math["s_matchkey"], ",") {
-						if strings.Contains(mk, "&&") {
-							arr := strings.Split(mk, "&&")
-							for _, s := range arr{
-								if s != "" {
-									tmpMap[s] = mk
-									if b, _ := regexp.MatchString("[A-Z]", s); b {
-										mkMap[strings.ToLower(s)] = s
-										d.AddWord(strings.ToLower(s))
-									}else {
-										d.AddWord(s)
-									}
-								}
-							}
-						}else {
-							if b, _ := regexp.MatchString("[A-Z]", mk); b {
-								mkMap[strings.ToLower(mk)] = mk
-								d.AddWord(strings.ToLower(mk))
-							}else {
-								d.AddWord(mk)
-							}
-						}
-					}
-					for _, filed := range fileds {
-						filed1 := strings.ToLower(util.ObjToString(item[filed]))
-						ddds := d.Analy(filed1)
-						analyKeys = append(analyKeys, ddds...)
-					}
-					if len(analyKeys) > 0 {
-						matchType = append(matchType, strings.Join(fileds, ","))
-						for k, v := range analyKeys{
-							if tmpMap[v] != "" && tmpMap[v] != nil {
-								analyKeys[k] = util.ObjToString(tmpMap[v])
-							}
-						}
-						for _, v1 := range analyKeys{
-							if mkMap[v1] != "" && mkMap[v1] != nil {
-								analyKeys = deleteSlice(analyKeys, v1)
-								analyKeys = append(analyKeys, util.ObjToString(mkMap[v1]))
-							}
-						}
-					}
-					d.Clear()
-				}
-				//去重
-				ssavekey := make(map[string]bool)
-				for _, v := range analyKeys {
-					ssavekey[v] = true
-				}
-				ssavekeys := []string{}
-				for k := range ssavekey {
-					ssavekeys = append(ssavekeys, k)
-				}
-				item["s_matchkey"] = strings.Join(ssavekeys, ",")
-				item["s_matchtype"] = strings.Join(matchType, ",")
-				findwinner := strings.TrimSpace(util.ObjToString(item["winner"]))
-				if findwinner != "" {
-					finddata, _ := MgoEn.FindOne(MgoEnC, bson.M{"company_name": findwinner})
-					if finddata != nil && (*finddata) != nil {
-						item["legal_person"] = util.ObjToString((*finddata)["legal_person"])
-						item["company_email"] = util.ObjToString((*finddata)["company_email"])
-						item["company_phone"] = util.ObjToString((*finddata)["company_phone"])
-						item["qyk"] = finddata
-					}
-				}
-				datas = append(datas, item)
-			}
-		}
-		Mgo.Update("tags", bson.M{"_id": tags["_id"]}, bson.M{
-			"$set": bson.M{
-				"i_estotal": searchResult.Hits.TotalHits,
-			}}, false, false)
-		count := searchResult.Hits.TotalHits
-		return UtilEsSaveData(sdataid, &datas), count
-	} else {
-		util.Debug(err)
-		return err, 0
-	}
-}
 //客户规则
 func UtilEsFind1(tags map[string]interface{}) (error, int64) {
 	defer util.Catch()

+ 0 - 1458
src/web/templates/private/common_rule_create.html

@@ -1,1458 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-{{include "com/modal.html"}}
-<script src="/time/js/angular.min.js"></script>
-<script src="/time/js/wui-date.js"></script>
-<div class="content-wrapper">
-    <section class="content-header">
-        <h1>新建标签
-            <small>
-                <button class="btn btn-primary btn-sm" onclick="importRule()"><i class="fa fa-fw fa-cloud-upload fa-lg"></i>导入关键词</button>
-                <form style="display:none" id='uploadform' method='post'>
-                    <input type='file' name='xlsx' id='file'/>
-                </form>
-                <a class="btn btn-sm btn-success" id="download" onclick="downloades()"><i class="fa fa-fw fa-cloud-download fa-lg"></i>下载查询语句</a>
-                <a class="btn btn-sm btn-instagram" onclick="produceData()"><i class="fa fa-fw fa-database fa-lg"></i>生成数据</a>
-                <button class="btn btn-warning btn-sm" onclick="previewData()"><i class="fa fa-fw fa-eye fa-lg"></i>预览数据</button>
-                <button class="btn btn-danger btn-sm" onclick="archive()"><i class="fa fa-fw fa-save fa-lg"></i>存档</button>
-            </small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/common_rule/list">公共标签列表</a></li>
-            <li><a href="#">新建公共标签</a></li>
-        </ol>
-    </section>
-    <!-- Main content -->
-    <section class="content">
-        <div class="tab-content">
-            <div class="nav-tabs-custom">
-                <ul class="nav nav-tabs edit-step">
-                    <li class="active" data-mode="guide"><a href="#tab_1" data-toggle="tab" aria-expanded="true">通用规则</a></li>
-                    <li data-mode="guide" class=""><a href="#tab_2" data-toggle="tab" aria-expanded="false">关键词规则</a></li>
-                    <button class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" onclick="saveTag()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存标签</button>
-                </ul>
-                <div class="tab-content">
-                    <div class="tab-pane active" id="tab_1">
-                        <form class="form-horizontal">
-                            <div class="box box-primary">
-                                <div class="box-header with-border">
-                                    <i class="fa fa-tag"></i>
-                                    <h3 class="box-title">通用规则</h3>
-                                </div>
-                                <div class="box-body">
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>标签名称</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="tagname" placeholder="标签名称"
-                                                   value="" required>
-                                        </div>
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>标签属性</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="tagfield" placeholder="标签属性"
-                                                   value="" required>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>标签维护人</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="serverperson" placeholder="标签维护人"
-                                                   value="" required>
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">选择省</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple data-live-search="true"
-                                                    id="province"></select>
-                                            <script>
-                                                $('#province').on('hide.bs.select', function () {
-                                                    var arr = $('#province').val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    dataMap["s_area"] = arrStr
-                                                })
-                                            </script>
-                                        </div>
-                                        <label class="col-sm-2 control-label">选择市</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple data-live-search="true"
-                                                    id="city"></select>
-                                            <script>
-                                                $('#city').on('hide.bs.select', function () {
-                                                    var arr = $('#city').val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    dataMap["s_city"] = arrStr
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">选择区/县</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple data-live-search="true"
-                                                    id="district"></select>
-                                            <script>
-                                                $('#district').on('hide.bs.select', function () {
-                                                    var arrStr = "";
-                                                    $('#district option:selected').each(function () {
-                                                        if (arrStr === "") {
-                                                            arrStr = $(this).val().replace(",", "-")
-                                                        } else {
-                                                            arrStr = arrStr + "," + $(this).val().replace(",", "-")
-                                                        }
-                                                    });
-                                                    dataMap["s_district"] = arrStr
-                                                })
-
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">公告类别</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" id="typeSelect">
-                                                <option selected:disabled style="diaplay:none" value=0>请选择</option>
-                                                <option value=1>一级公告类别</option>
-                                                <option value=2>二级公告类别</option>
-                                            </select>
-                                            <script>
-                                                $('#typeSelect').on('changed.bs.select', function () {
-                                                    $("#typeSelectVal").selectpicker("deselectAll");
-                                                    $("#typeSelectVal").empty();
-                                                    if ($(this).val() == 1) {
-                                                        for (var i in topTypeArr) {
-                                                            var opt = document.createElement('option');
-                                                            opt.innerText = topTypeArr[i];
-                                                            opt.value = topTypeArr[i];
-                                                            $('#typeSelectVal')[0].appendChild(opt)
-                                                        }
-                                                    }else if ($(this).val() == 2) {
-                                                        for (var i in subTypeArr) {
-                                                            var opt = document.createElement('option');
-                                                            opt.innerText = subTypeArr[i];
-                                                            opt.value = subTypeArr[i];
-                                                            $('#typeSelectVal')[0].appendChild(opt)
-                                                        }
-                                                    }
-                                                    $("#typeSelectVal").selectpicker("refresh");
-                                                })
-                                            </script>
-                                        </div>
-                                        <label class="col-sm-2 control-label">公告类别选择</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple id="typeSelectVal"></select>
-                                            <script>
-                                                $('#typeSelectVal').on('show.bs.select', function () {
-                                                    if ($('#typeSelect').val() == 0) {
-                                                        showTip("请选择公告类别", 500)
-                                                    }
-                                                })
-                                                $('#typeSelectVal').on('hide.bs.select', function () {
-                                                    var arr = $(this).val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    if ($('#typeSelect').val() == 1) {
-                                                        dataMap["s_toptype"] = arrStr;
-                                                        dataMap["s_subtype"] = "";
-                                                    }else {
-                                                        dataMap["s_toptype"] = "";
-                                                        dataMap["s_subtype"] = arrStr;
-                                                    }
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label ">开始时间</label>
-                                        <div class="col-sm-3">
-                                            <div class="wui-content">
-                                                <div class="wui-area" id="starttime">
-                                                    <wui-date
-                                                            format="yyyy-mm-dd hh:mm:ss"
-                                                            placeholder="请选择或输入开始日期"
-                                                            id="date4"
-                                                            btns="{'ok':'确定','now':'此刻'}"
-                                                            ng-model="date4">
-                                                    </wui-date>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <label class="col-sm-2 control-label ">结束时间</label>
-                                        <div class="col-sm-3">
-                                            <div class="wui-content">
-                                                <div class="wui-area" id="endtime">
-                                                    <wui-date
-                                                            format="yyyy-mm-dd hh:mm:ss"
-                                                            placeholder="请选择或输入结束日期"
-                                                            id="date4"
-                                                            btns="{'ok':'确定','now':'此刻'}"
-                                                            ng-model="date5">
-                                                    </wui-date>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">选择字段</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple id="existFieldSelect"
-                                                    data-actions-box="true"></select>
-                                            <script>
-                                                $('#existFieldSelect').on('hide.bs.select', function () {
-                                                    var arr = $('#existFieldSelect').val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    dataMap["s_existfields"] = arrStr
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">预算限制</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" type="text" id="s_budget_min" placeholder="单位:元/大于">
-                                        </div>
-                                        <label class="col-sm-2" style="text-align: center">___ ___</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" type="text" id="s_budget_max" placeholder="单位:元/小于">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">中标金额限制</label>
-                                        <div class="col-sm-3" id="bidamountDiv">
-                                            <input class="form-control" type="text" id="s_bidamount_min" placeholder="单位:元/大于">
-                                        </div>
-                                        <label class="col-sm-2" style="text-align: center">___ ___</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" type="text" id="s_bidamount_max" placeholder="单位:元/小于">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">全局附加词</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="g_addkey" placeholder="***"
-                                                   value="">
-                                        </div>
-                                        <label class="col-sm-2 control-label">匹配方式</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_addkeymatch" onclick="selectKeyMatch(0)">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">全局排除词</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="g_notkey" placeholder="***"
-                                                   value="">
-                                        </div>
-                                        <label class="col-sm-2 control-label">匹配方式</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_notkeymatch" onclick="selectKeyMatch(1)">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">采购单位行业</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_buyerclass" onclick="selectBuyer(2)">
-                                        </div>
-                                        <label class="col-sm-2 control-label">公告行业</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_scopeclass" onclick="selectScope(3)" placeholder="只能选择二级公告行业类型">
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">预览数据量</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="maxnum" placeholder="默认100条" value="">
-                                        </div>
-                                        <label class="col-sm-2 control-label ">高级字段包</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control" id="extfiledselect" style="border-radius:3px">
-                                                <option value="2">是</option>
-                                                <option value="1">否</option>
-                                            </select>
-                                            <script>
-                                                $('#extfiledselect').on("change", function () {
-                                                    dataMap["i_extfieldstype"] = $('#extfiledselect option:selected').val();
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div id="es_div" class="form-group" style="display: none">
-                                        <label class="col-sm-2 control-label">ES语句</label>
-                                        <div class="col-sm-8">
-                                            <textarea class="form-control" id="estxt" readonly></textarea>
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                        </form>
-                    </div>
-                    <div class="tab-pane" id="tab_2">
-                        <div class="box box-primary">
-                            <div class="box-header with-border">
-                                <i class="fa fa-bookmark"></i>
-                                <h3 class="box-title">关键词规则</h3>
-                                <div style="float: right">
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(4)">关键词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(6)">附加词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(8)">排除词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectBuyer(9)">采购单位行业</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectScope(10)">公告行业</a>
-                                </div>
-                            </div>
-                            <table id="keywords" class="table table-bordered">
-                                <thead>
-                                <div style="margin: 10px 10px 0px;">
-                                    <a class="btn btn-twitter" onclick="add_Rule()">新增</a>
-                                    <a class="btn btn-twitter" onclick="modify_Rule()">修改</a>
-                                    <a class="btn btn-twitter" onclick="del_Rule()">删除</a>
-                                </div>
-                                <tr>
-                                    <th>编号</th>
-                                    <th><input type="checkbox" onclick="allSelect(this)" id="allCheckbox"></th>
-                                    <th>关键词</th>
-                                    <th>匹配方式</th>
-                                    <th>附加词</th>
-                                    <th>匹配方式</th>
-                                    <th>排除词</th>
-                                    <th>匹配方式</th>
-                                    <th>采购单位行业</th>
-                                    <th>公告行业</th>
-                                </tr>
-                                </thead>
-                            </table>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </section>
-</div>
-
-{{include "com/footer.html"}}
-<script>
-    menuActive("/common_rule/list");
-    var state = 1;
-    var app = angular.module('app', ["wui.date"]);       //时间插件
-    var province = {{.T.province}};
-    var cityMap = {{.T.city}};
-    var districtMap = {{.T.district}};
-    var topTypeArr = {{.T.topTypeArr}};
-    var subTypeArr = {{.T.subTypeArr}};
-    var matchTypeMap = {{.T.matchTypeMap}};
-    var existField = {{.T.existField}};
-    var buyerClass = {{.T.buyerClass}};
-    var scopeClass = {{.T.scopeClass}};
-
-    var matchCode = [];     //匹配方式code
-    var matchName = [];     //匹配名字
-    var buyerArr = [];      //采购单位
-    var scopeTopArr = [];       //公告行业一级
-    var scopeSubArr = [];       //公告行业二级
-
-    var keyTableChecked = false;        //关键词表格数据是否有选中
-    var keyTableAllChecked = true;      //表单数据是否被全选中
-    var selectIndex = [];               //选中的编号
-    var setValue = 0;                   // 0:全局附加词,1:全局排除词,2:全局采购单位行业,3:全局公告行业,4: 关键词匹配方式,6:附加词匹配方式,8:排除词匹配方式,9:采购单位,10:公告行业,
-    var o_rules = [];                    //关键词列表
-
-    var s_dataid = "";                  //预览链接加密串
-
-    //表单数据
-    var dataMap = {
-        "id": "",
-        "s_tagname": "",
-        "s_tagfield": "",
-        "s_serverperson": "",
-        "s_area": "",
-        "s_city": "",
-        "s_district": "",
-        "s_toptype": "",
-        "s_subtype": "",
-        "s_esquery": "",
-        "s_globaladdkey": "",
-        "s_globaladdkeymatch": "",
-        "s_globalnotkey": "",
-        "s_globalnotkeymatch": "",
-        "i_maxnum": 100,
-        "i_starttime": 0,
-        "i_endtime": 0,
-        "i_extfieldstype": 2,
-        "i_esquerytype": 1,
-        "i_globaladdkeytype": 0,
-        "i_globalnotkeytype": 0,
-    };
-
-    $(document).ready(function () {
-        for (var i in province) {
-            var provOpt = document.createElement('option');
-            provOpt.innerText = province[i];
-            provOpt.value = province[i];
-            $("#province")[0].appendChild(provOpt);
-        }
-        var optHtml = "";
-        var optGroup = "";
-        for (var i in districtMap) {
-            var opt = document.createElement('option');
-            opt.innerText = i;
-            opt.value = i;
-            $("#city")[0].appendChild(opt);
-            optGroup += '<optgroup label="' + i + '" value="' + i + '">';
-            for (var j in districtMap[i]) {
-                optGroup += '<option value="' + i + "," + districtMap[i][j] + '">' + districtMap[i][j] + '</option>';
-            }
-            optGroup += `</optgroup>`;
-        }
-        optHtml += optGroup;
-        $("#district").append(optHtml);
-
-        $("#province").selectpicker("refresh");
-        $("#city").selectpicker("refresh");
-        $("#district").selectpicker("refresh");
-        $('#province').selectpicker({
-            liveSearch: true,
-        });
-        $('#city').selectpicker({
-            liveSearch: true,
-        });
-        $('#district').selectpicker({
-            liveSearch: true,
-        });
-        for (var i in existField) {
-            var opt = document.createElement('option');
-            opt.innerText = existField[i]["name"];
-            opt.value = existField[i]["code"];
-            $('#existFieldSelect')[0].appendChild(opt)
-        }
-        $("#existFieldSelect").selectpicker("refresh");
-
-        var btnMatchHtml1 = "";
-        var btnMatchHtml2 = "";
-        //匹配方式
-        for (var i in matchTypeMap) {
-            if (i < 5) {
-                btnMatchHtml1 += `<input type="button" class="btn btn-default col-md-pull-2" style="margin-left: 10px;margin-top: 10px" onclick="clickMatchBtn(this)"
-                            code="${matchTypeMap[i]["code"]}" value="${matchTypeMap[i]["name"]}">`;
-            }else {
-                btnMatchHtml2 += `<input type="button" class="btn btn-default col-md-pull-2" style="margin-left: 10px;margin-top: 10px" onclick="clickMatchBtn2(this)"
-                            code="${matchTypeMap[i]["code"]}" value="${matchTypeMap[i]["name"]}">`;
-            }
-        }
-        $("#btnGroupMatch").append(btnMatchHtml1);
-        $("#btnGroupMatch2").append(btnMatchHtml2);
-        var btnBuyerHtml = "";
-        for (var i in buyerClass) {
-            btnBuyerHtml += `<input type="button" class="btn btn-default col-md-2" style="margin-left: 10px;margin-top: 10px" onclick="clickBuyerBtn(this)"
-                             value="${buyerClass[i]}">`;
-        }
-        $("#btnGroupBuyer").append(btnBuyerHtml);
-
-        var btnTopHtml = "";
-        var btnSubHtml = "";
-        for (var i in scopeClass) {
-            var topId = "top_" + i;
-            btnTopHtml += `<input type="button" id="${topId}" disabled class="btn btn-default btn_top" value="${scopeClass[i]["name"]}">`;
-            btnSubHtml += `<div class="btn-group-sub">`;
-            for (var j in scopeClass[i]["child"]) {
-                var sub = scopeClass[i]["child"][j].split("_");
-                btnSubHtml += `<input type="button" class="btn btn-default btn-sub" onclick="btnSubScopeClick(this)" code="${scopeClass[i]["child"][j]}"
-                                index="${i}" value="${sub[1]}">`
-            }
-            btnSubHtml += '</div>'
-        }
-        $("#btnGroupTop").append(btnTopHtml);
-        $("#btnGroupSub").append(btnSubHtml);
-
-        $('#keywords').DataTable({
-            "paging": false,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                this.api().column(0).nodes().each(function (cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null, width: "2.5%"},
-                {"data": "", width: "1%", render: function() {
-                        return `<input type="checkbox" name="ckb-keyid" onclick="singleSelect(this)" style="text-align: center">`
-                    }},
-                {"data": "s_matchkey", width: "10%"},
-                {"data": function (row) {
-                        if (row.s_keymatch) {
-                            return row.s_keymatch
-                        }else {
-                            return ""
-                        }
-                    }, width: "5%"},
-                {"data": "s_addkey", width: "10%"},
-                {"data": function (row) {
-                        if (row.s_addkeymatch) {
-                            return row.s_addkeymatch
-                        }else {
-                            return ""
-                        }
-                    }, width: "5%"},
-                {"data": "s_notkey", width: "10%"},
-                {"data": function (row) {
-                        if (row.s_notkeymatch) {
-                            return row.s_notkeymatch
-                        }else {
-                            return ""
-                        }
-                    }, width: "5%"},
-                {"data": "s_buyerclass", width: "7%", render: function (val) {
-                        if (val == undefined) {
-                            val = ""
-                        }
-                        return val
-                    }},
-                {"data": "s_topscopeclass", width: "5%", render: function (val) {
-                        if (val == undefined) {
-                            val = ""
-                        }
-                        return val
-                    }},
-            ],
-            "columnDefs": [{
-                "targets": [2],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 24) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 24) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }, {
-                "targets": [4],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 24) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 24) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }, {
-                "targets": [6],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 24) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 24) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }]
-        });
-    });
-
-    //全局modal取消按钮
-    function cancelModel() {
-        $('#modal-imp-es').modal("hide");
-        $('#modal-select-match').modal("hide");
-        $('#modal-select-buyer').modal("hide");
-        $('#modal-select-scope').modal("hide");
-        $('#btnGroupMatch').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupMatch2').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupBuyer').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupTop').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupSub').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    //关键词/附加词/排除词匹配方式modal
-    function selectKeyMatch(val) {
-        setValue = val;
-        if (setValue == 0 || setValue == 1) {
-            matchCode.length = 0;
-            matchName.length = 0;
-            $('#modal-select-match').modal("show");
-        }else {
-            if (selectIndex.length > 0 && keyTableChecked) {
-                matchCode.length = 0;
-                matchName.length = 0;
-                $('#modal-select-match').modal("show");
-            }else {
-                alert("请选中关键词")
-            }
-        }
-    }
-    //匹配方式按钮点击事件
-    function clickMatchBtn(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            matchCode.splice($.inArray($(obj).attr("code"), matchCode), 1);
-            matchName.splice($.inArray($(obj).val(), matchName), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            matchCode.push($(obj).attr("code"));
-            matchName.push($(obj).val())
-        }
-
-        $('#btnGroupMatch2 .btn-default').each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    function clickMatchBtn2(obj) {
-        matchCode.length = 0;
-        matchName.length = 0;
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            matchCode.splice($.inArray($(obj).attr("code"), matchCode), 1);
-            matchName.splice($.inArray($(obj).val(), matchName), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            matchCode.push($(obj).attr("code"));
-            matchName.push($(obj).val())
-            $('#btnGroupMatch2 .btn-default').each(function () {
-                if (this != obj) {
-                    $(this).removeClass("active-btn-match");
-                }
-            });
-        }
-
-        $('#btnGroupMatch .btn-default').each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    //匹配方式保存
-    function saveMatch() {
-        $('#btnGroupMatch').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        var matchNameStr = "";
-        var codeStr = "";
-        for (var i in matchName) {
-            if (matchNameStr == "") {
-                matchNameStr = matchName[i];
-            }else {
-                matchNameStr += "," + matchName[i]
-            }
-            if (codeStr == "") {
-                codeStr = matchCode[i]
-            }else {
-                codeStr = codeStr + "," + matchCode[i]
-            }
-        }
-        if (setValue == 0) {
-            $('#s_addkeymatch').val(matchNameStr);
-            dataMap["s_globaladdkeymatch"] = codeStr
-        }else if (setValue == 1) {
-            $('#s_notkeymatch').val(matchNameStr);
-            dataMap["s_globalnotkeymatch"] = codeStr
-        }else {
-            for (var i in selectIndex) {
-                var j = selectIndex[i] - 1;
-                if (setValue == 4) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(3)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_rules[j]["s_keymatch"] = codeStr;
-                    }
-                }else if (setValue == 6) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(5)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_rules[j]["s_addkeymatch"] = codeStr;
-                    }
-                } else if (setValue == 8) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(7)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_rules[j]["s_notkeymatch"] = codeStr;
-                    }
-                }
-            }
-        }
-        $('#modal-select-match').modal("hide");
-        matchName.length = 0;
-        matchCode.length = 0;
-    }
-    //采购单位modal
-    function selectBuyer(val) {
-        setValue = val;
-        if (val == 2) {
-            $('#modal-select-buyer').modal("show");
-        }else {
-            if (keyTableChecked) {
-                $('#modal-select-buyer').modal("show");
-            }else {
-                alert("请选中关键词")
-            }
-        }
-    }
-    //采购单位点击
-    function clickBuyerBtn(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match");
-            buyerArr.splice($.inArray($(obj).val(), buyerArr), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            buyerArr.push($(obj).val())
-        }
-    }
-    function saveBuyer() {
-        $('#btnGroupBuyer').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        var buyerStr = "";
-        for (var i in buyerArr) {
-            if ("" === buyerStr) {
-                buyerStr = buyerArr[i];
-            }else {
-                buyerStr += "," + buyerArr[i]
-            }
-        }
-        if (setValue == 2) {
-            $('#s_buyerclass').val(buyerStr);
-            $('#s_buyerclass').attr('title', buyerStr);
-            dataMap["s_globalbuyerclass"] = buyerStr;
-        }else {
-            for (var i in selectIndex) {
-                var j = selectIndex[i] - 1;
-                //采购单位
-                $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(9)").html(buyerStr);
-                o_rules[j]["s_buyerclass"] = buyerStr;
-            }
-        }
-        $('#modal-select-buyer').modal("hide");
-        buyerArr.length = 0;
-    }
-    //公告行业modal
-    function selectScope(val) {
-        setValue = val;
-        if (val == 3) {
-            $('#modal-select-scope').modal("show");
-        }else {
-            if (keyTableChecked) {
-                $('#modal-select-scope').modal("show");
-            }else {
-                alert("请选中关键词")
-            }
-        }
-    }
-    //公告行业二级点击
-    function btnSubScopeClick(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match");
-            scopeSubArr.splice($.inArray($(obj).val(), scopeSubArr), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            var topid = "#top_" + $(obj).attr("index");
-            $(topid).removeClass("active-btn-match");
-            scopeSubArr.push($(obj).attr("code"))
-        }
-    }
-    function saveScope() {
-        $('#btnGroupTop').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupSub').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        var scopeStr = "";
-        var topStr = "";
-        var subStr = "";
-        for (var i in scopeTopArr) {
-            if ("" == scopeStr) {
-                scopeStr = scopeTopArr[i];
-            }else {
-                scopeStr += "," + scopeTopArr[i]
-            }
-            if (topStr == "") {
-                topStr = scopeTopArr[i]
-            } else {
-                topStr = topStr + "," + scopeTopArr[i]
-            }
-        }
-        for (var i in scopeSubArr) {
-            if ("" == scopeStr) {
-                scopeStr = scopeSubArr[i];
-            }else {
-                scopeStr += "," + scopeSubArr[i]
-            }
-            if (subStr == "") {
-                subStr = scopeSubArr[i]
-            } else {
-                subStr = subStr + "," + scopeSubArr[i]
-            }
-        }
-        if (setValue == 3) {
-            $('#s_scopeclass').val(scopeStr);
-            $('#s_scopeclass').attr('title', scopeStr);
-            dataMap["s_globaltopscopeclass"] = topStr;
-            dataMap["s_globalsubscopeclass"] = subStr;
-        }else {
-            for (var i in selectIndex) {
-                var j = selectIndex[i] - 1;
-                $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(10)").html(scopeStr);
-                o_rules[j]["s_topscopeclass"] = topStr;
-                o_rules[j]["s_subscopeclass"] = subStr;
-            }
-        }
-        $('#modal-select-scope').modal("hide");
-        scopeTopArr.length = 0;
-        scopeSubArr.length = 0;
-    }
-    //页面添加附加词、排除词
-    function addkeyWord(rdata) {
-        o_rules = o_rules.concat(rdata["o_rules"]);
-        $('#g_addkey').attr("value", rdata["s_globaladdkey"]);
-        $('#g_notkey').attr("value", rdata["s_globalnotkey"]);
-        dataMap["s_globaladdkey"] = rdata["s_globaladdkey"];
-        dataMap["s_globalnotkey"] = rdata["s_globalnotkey"];
-
-        $('#keywords').dataTable().fnClearTable();
-        $('#keywords').dataTable().fnAddData(rdata["o_rules"]);
-    }
-    //表格全选
-    function allSelect(obj) {
-        if ($(obj).is(':checked')) {
-            keyTableChecked = true;
-            keyTableAllChecked = true;
-            $('input[name="ckb-keyid"]').each(function () {
-                this.checked = true;
-                selectIndex.push($(this).parents("tr").index() + 1);
-            })
-        }else {
-            selectIndex.length = 0;
-            keyTableChecked = false;
-            keyTableAllChecked = false;
-            $('input[name="ckb-keyid"]').each(function () {
-                this.checked = false;
-            })
-        }
-    }
-    //表格单个选中
-    function singleSelect(obj) {
-        var tag = true;
-        selectIndex.length = 0;
-        $('input[name="ckb-keyid"]').each(function () {
-            if (this.checked) {
-                keyTableChecked = true;
-                selectIndex.push($(this).parents("tr").index() + 1);
-            }else {
-                tag = false
-            }
-        });
-        if (tag) {
-            keyTableAllChecked = true;
-            $('#allCheckbox').prop("checked", true);
-        }else {
-            keyTableAllChecked = false;
-            $('#allCheckbox').prop("checked", false);
-        }
-    }
-    //保存标签
-    function saveTag() {
-        let obj = checkArea(dataMap.s_area, dataMap.s_city, dataMap.s_district);
-        if (!obj.flag) {
-            let msg = "选择的" + obj.v1 + "和" + obj.v2 + "生成es语句时会产生错误,请重新选择其中一个";
-            showMsg(msg);
-            return
-        }
-        //通用规则采购单位行业和关键词中的采购单位行业只能存在一个
-        if (o_rules.length > 0) {
-            let tag = false;
-            for (var i in o_rules) {
-                if (o_rules[i].s_buyerclass) {
-                    tag = true
-                }
-            }
-            if (tag && dataMap.s_globalbuyerclass) {
-                showMsg("保存失败,采购单位行业在通用规则和关键词规则中不能同时存在!")
-                return;
-            }
-        }
-        //关键词、附加词、排除词存在,则必须有相应的匹配方式
-        if (dataMap.s_globaladdkey && !dataMap.s_globaladdkeymatch) {
-            showMsg("保存失败,全局附加词必须有对应的匹配方式!")
-            return;
-        }
-        if (dataMap.s_globalnotkey && !dataMap.s_globalnotkeymatch) {
-            showMsg("保存失败,全局排除词必须有对应的匹配方式!")
-            return;
-        }
-        if (o_rules.length > 0) {
-            for (const i in o_rules) {
-                if (o_rules[i].s_matchkey && !o_rules[i].s_keymatch) {
-                    showMsg("保存失败,关键词规则中有关键词未对应匹配方式!")
-                    return;
-                }
-                if (o_rules[i].s_addkey && !o_rules[i].s_addkeymatch) {
-                    showMsg("保存失败,关键词规则中有附加词未对应匹配方式!")
-                    return;
-                }
-                if (o_rules[i].s_notkey && !o_rules[i].s_notkeymatch) {
-                    showMsg("保存失败,关键词规则中有排除词未对应匹配方式!")
-                    return;
-                }
-            }
-        }
-        dataMap["s_tagname"] = $('#tagname').val();
-        dataMap["s_tagfield"] = $('#tagfield').val();
-        dataMap["s_serverperson"] = $('#serverperson').val();
-        dataMap["s_globaladdkey"] = $('#g_addkey').val();
-        dataMap["s_globalnotkey"] = $('#g_notkey').val();
-        if (dataMap["s_tagname"] == "" || dataMap.s_tagfield == "" || dataMap.s_serverperson == "") {
-            alert("请填写必须字段!");
-            return
-        }
-        if ($('#starttime').find("input").val() != "") {
-            var start = $('#starttime').find("input").val();
-            start = new Date(start).getTime() / 1000;
-            dataMap["i_starttime"] = start;
-        }
-        if ($('#endtime').find("input").val() != "") {
-            var end = $('#endtime').find("input").val();
-            end = new Date(end).getTime() / 1000;
-            dataMap["i_endtime"] = end;
-        }
-        var budget = "";
-        if ($('#s_budget_min').val() != "") {
-            budget = "大于" + $('#s_budget_min').val()
-        }
-        if ($('#s_budget_max').val() != "") {
-            if (budget == "") {
-                budget = "小于" + $('#s_budget_max').val()
-            }else {
-                budget = budget + ",小于" + $('#s_budget_max').val()
-            }
-        }
-        dataMap["s_budgetlimit"] = budget;
-        var bidamount = "";
-        if ($('#s_bidamount_min').val() != "") {
-            bidamount = "大于" + $('#s_bidamount_min').val()
-        }
-        if ($('#s_bidamount_max').val() != "") {
-            if (bidamount == "") {
-                bidamount = "小于" + $('#s_bidamount_max').val()
-            }else {
-                bidamount = bidamount + ",小于" + $('#s_bidamount_max').val()
-            }
-        }
-        dataMap["s_bidamountlimit"] = bidamount;
-        if ($('#maxnum').val() !== "") {
-            dataMap["i_maxnum"] = $('#maxnum').val();
-        }
-        if (dataMap.s_globaladdkeymatch.indexOf("1") > -1 || dataMap.s_globaladdkeymatch.indexOf("2") > -1 || dataMap.s_globaladdkeymatch.indexOf("3") > -1 ||
-            dataMap.s_globaladdkeymatch.indexOf("4") > -1 || dataMap.s_globaladdkeymatch.indexOf("5") > -1) {
-            dataMap["i_globaladdkeytype"] = 1
-        }else if (dataMap.s_globaladdkeymatch.indexOf("6") > -1 || dataMap.s_globaladdkeymatch.indexOf("7") > -1 ||
-            dataMap.s_globaladdkeymatch.indexOf("8") > -1 || dataMap.s_globaladdkeymatch.indexOf("9") > -1) {
-            dataMap["i_globaladdkeytype"] = 2
-        }else {
-            dataMap["i_globaladdkeytype"] = 0
-        }
-        if (dataMap.s_globalnotkeymatch.indexOf("1") > -1 || dataMap.s_globalnotkeymatch.indexOf("2") > -1 || dataMap.s_globalnotkeymatch.indexOf("3") > -1 ||
-            dataMap.s_globalnotkeymatch.indexOf("4") > -1 || dataMap.s_globalnotkeymatch.indexOf("5") > -1) {
-            dataMap["i_globalnotkeytype"] = 1
-        }else if (dataMap.s_globalnotkeymatch.indexOf("6") > -1 || dataMap.s_globalnotkeymatch.indexOf("7") > -1 ||
-            dataMap.s_globalnotkeymatch.indexOf("8") > -1 || dataMap.s_globalnotkeymatch.indexOf("9") > -1) {
-            dataMap["i_globalnotkeytype"] = 2
-        }else {
-            dataMap["i_globalnotkeytype"] = 0
-        }
-        dataMap["o_rules"] = JSON.stringify(o_rules);
-        $.ajax({
-            url: "/service/common_rule/save",
-             type: 'POST',
-             data: dataMap,
-             success: function (r) {
-                 if (r.rep && r.id) {
-                    dataMap["id"]= r.id;
-                    dataMap["s_dataid"] = r.s_dataid;
-                     $('#es_div').show();
-                     $('#estxt').val(r.s_esquery);
-                    state = 2;
-                    showTip("保存成功",1000);
-                 } else {
-                    showTip("保存失败",1000);
-                 }
-             }
-         })
-    }
-
-    //导入标签
-    function importRule() {
-        $("#file").click();
-    }
-    $(function() {
-        $("#uploadform").find("input").change(function () {
-            var val = $(this).val() ? $(this).val() : "";
-            if (val.indexOf(".xlsx") < 0) {
-                showMsg("文件格式非法", function () {
-                });
-            } else {
-                var myform = new FormData();
-                myform.append('xlsx', $("#file")[0].files[0]);
-                $.ajax({
-                    url: "/service/rule/import",
-                    type: 'POST',
-                    data: myform,
-                    async: false,
-                    contentType: false,//不要设置Content-Type请求头
-                    processData: false,// 使数据不做处理
-                    success: function (r) {
-                        if (r.rep) {
-                           // dataMap["id"] = r.id;
-                            addkeyWord(r.rdata);
-                            s_dataid = r.s_dataid;
-                            showTip("导入成功",1000);
-                        } else {
-                            showTip("导入失败",1000);
-                        }
-                    }
-                })
-            }
-        })
-    });
-    //生成数据
-    function produceData() {
-        if (dataMap.id == undefined || dataMap.id == "") {
-            alert("请先保存标签");
-            return
-        }
-        com.maskShow("正在生成数据...");
-        $.ajax({
-            url:"/service/common_rule/produce",
-            type:"post",
-            data: {"id": dataMap.id},
-            success:function(r){
-                com.maskHide();
-                if(r.rep){
-                    dataMap.i_estotal = r.count
-                    showTip("数据生成成功", 1000);
-                }else{
-                    showTip("数据生成失败",1000);
-                }
-            }
-        })
-    }
-    //预览数据
-    function previewData() {
-        if (state == 2) {
-            myDataTable = $('#previewData').DataTable({
-                "destroy": true,
-                "paging": true,
-                "lengthChange": false,
-                "searching": false,
-                "ordering": false,
-                "info": true,
-                "autoWidth": true,
-                "serverSide": true,
-                "ajax": {
-                    url: "/service/common_rule/preview",
-                    type: "post",
-                    data: {"s_dataid": dataMap.s_dataid},
-                },
-                "language": {
-                    "url": "/dist/js/dataTables.chinese.lang"
-                },
-                "fnDrawCallback": function () {
-                    $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-                    $('#dataTable-btn').click(function (e) {
-                        var redirectpage = 0
-                        if ($("#changePage").val() && $("#changePage").val() > 0) {
-                            var redirectpage = $("#changePage").val() - 1;
-                        }
-                        myDataTable.page(redirectpage).draw(false);
-                    });
-                    this.api().column(0).nodes().each(function (cell, i) {
-                        cell.innerHTML = i + 1;
-                    });
-                },
-                "columns": [
-                    {"data": null, width: "2%"},
-                    {"data": function (row) {
-                            if (row.s_matchkey) {
-                                return row.s_matchkey
-                            } else {
-                                return ""
-                            }
-                        }, width: "8%"},
-                    {"data": function (row) {
-                            if (row.area) {
-                                return row.area
-                            } else {
-                                return ""
-                            }
-                        }, width: "4%"},
-                    {"data": function (row) {
-                            if (row.city) {
-                                return row.city
-                            } else {
-                                return ""
-                            }
-                        }, width: "4%"},
-                    {"data": function (row) {
-                            if (row.s_jyhref) {
-                                if (row.title.length > 36) {
-                                    var str = row.title.substring(0, 36) + "..."
-                                } else {
-                                    var str = row.title
-                                }
-                                tmp = '<a class="" target="_blank" href=' + row.s_jyhref + '>' + str + '</a>';
-                                return tmp
-                            } else {
-                                return row.title
-                            }
-                        }, width: "5%"},
-                    {"data": function (row) {
-                            if (row.subtype) {
-                                return row.subtype
-                            } else {
-                                return ""
-                            }
-                        }, width: "4%"},
-                    {"data": function (row) {
-                            var str = com.trimStr(row.detail);
-                            if (str.length > 14) {
-                                return str.substring(0, 14) + "..."
-                            } else {
-                                return str
-                            }
-                        }, width: "5%"},
-                    {"data": function (row) {
-                            var dt = new Date();
-                            dt.setTime(parseInt(row.publishtime) * 1000);
-                            return dt.format("yyyy-MM-dd")
-                        }, width: "4%"},
-                    {"data": function (row) {
-                            if (row.href) {
-                                var shref = row.href;
-                                tmp = '<a class="" target="_blank" href=' + shref + '>公告地址</a>';
-                                return tmp
-                            } else {
-                                return ""
-                            }
-                        }, width: "5%"},
-                    {"data": function (row) {
-                            if (row.projectcode) {
-                                return row.projectcode
-                            }else {
-                                return ""
-                            }
-                        }, width: "5%"},
-                    {"data": "projectname", width: "5%"},
-                    {"data": function (row) {
-                            if (row.projectscope) {
-                                if (row.projectscope.length > 14) {
-                                    return row.projectscope.substring(0, 14) + "..."
-                                } else {
-                                    return row.projectscope
-                                }
-                            }
-                            return ""
-                        }, width: "3%"},
-                    {"data": function (row) {
-                            if (row.budget == undefined) {
-                                return ""
-                            } else {
-                                return row.budget
-                            }
-                        }, width: "3%"},
-                    {"data": function (row) {
-                            if (row.bidamount == undefined) {
-                                return ""
-                            } else {
-                                return row.bidamount
-                            }
-                        }, width: "3%"},
-                    {"data": "bidopentime", width: "3%", render: function (val) {
-                            if (val) {
-                                var dt = new Date();
-                                dt.setTime(parseInt(val) * 1000);
-                                return dt.format("yyyy-MM-dd")
-                            } else {
-                                return ""
-                            }
-                        }},
-                    {"data": "buyer", width: "3%", render: function (val) {
-                            if (val == undefined) {
-                                val = ""
-                            }
-                            return val
-                        }},
-                    {"data": function (row) {
-                            if (row.buyerperson) {
-                                return row.buyerperson
-                            } else {
-                                return ""
-                            }
-                        }, width: "4%"
-                    },
-                    {"data": function (row) {
-                            if (row.buyertel) {
-                                return row.buyertel
-                            } else {
-                                return ""
-                            }
-                        }, width: "4%"
-                    },
-                    {"data": "agency", width: "5%", render: function (val) {
-                            if (val == undefined) {
-                                val = ""
-                            }
-                            return val
-                        }
-                    },
-                    {"data": "winner", width: "3%", render: function (val) {
-                            if (val == undefined) {
-                                val = ""
-                            }
-                            return val
-                        }
-                    },
-                    {"data": function (row) {
-                            if (row.winnerperson) {
-                                return row.winnerperson
-                            } else {
-                                return ""
-                            }
-                        }, width: "4%"
-                    },
-                    {"data": function (row) {
-                            if (row.winnertel) {
-                                return row.winnertel
-                            } else {
-                                return ""
-                            }
-                        }, width: "4%"
-                    },
-                    {"data": function (row) {
-                            if (row.legal_person) {
-                                return row.legal_person
-                            } else {
-                                return ""
-                            }
-                        }, width: "4%"
-                    },
-                    {"data": function (row) {
-                            if (row.company_phone) {
-                                return row.company_phone
-                            } else {
-                                return ""
-                            }
-                        }, width: "4%"
-                    },
-                    {"data": function (row) {
-                            if (row.company_email) {
-                                return row.company_email
-                            } else {
-                                return ""
-                            }
-                        }, width: "4%"
-                    },
-                ]
-            });
-            $('#modal-preview').modal("show");
-            if (dataMap.i_extfieldstype == 1) {
-                var str = "标准字段包 " + dataMap.i_maxnum + "/" + dataMap.i_estotal;
-                $('#dataCount').html(str)
-            } else {
-                var str = "高级字段包 " + dataMap.i_maxnum + "/" + dataMap.i_estotal;
-                $('#dataCount').html(str)
-            }
-        }else {
-            alert("请先保存标签");
-        }
-    }
-    
-    //下载es
-    function downloades(){
-      if(state==1){
-        alert("请先保存标签")
-      }else{
-        $("#download").attr("href","/service/common_rule/exportes?id="+dataMap["id"])
-      }
-    }
-    
-    //存档
-    function archive(){
-      if(state == 1){
-        alert("请先保存标签");
-        return
-      }else{
-        showConfirm("是否存档?", function() {
-          $.ajax({
-              url:"/service/rule/archive",
-              type:"post",
-              data:{"_id":dataMap["id"]},
-              success:function(r){
-                if(r.rep){
-                  showTip("存档成功",1000);
-                  //ttable.ajax.reload();
-                }else{
-                  showTip("存档失败",1000);
-                }
-              }
-          })
-        });
-      }
-    }
-
-    var key_flag = -1;      // 0:新增,1:修改
-    //关键词表格新增
-    function add_Rule() {
-        key_flag = 0;
-        $('#keyword_txt').val("");
-        $('#addword_txt').val("");
-        $('#notword_txt').val("");
-        $('#modal-add-keyword').modal("show");
-    }
-    //关键词修改
-    function modify_Rule(){
-        if (selectIndex.length == 1) {
-            key_flag = 1;
-            var index = selectIndex[0] - 1;
-            $('#modal-add-keyword').modal("show");
-            $('#keyword_txt').val(o_rules[index].s_matchkey);
-            $('#addword_txt').val(o_rules[index].s_addkey);
-            $('#notword_txt').val(o_rules[index].s_notkey);
-        }else {
-            showTip("请选中需要修改的关键词,且只能选中一条", 1000)
-        }
-
-    }
-    function saveKeyword() {
-        var key = $('#keyword_txt').val();
-        var addkey = $('#addword_txt').val();
-        var notkey = $('#notword_txt').val();
-        if (key != "") {
-            var rule = {};
-            rule["s_matchkey"] = key.replace(",", ",");
-            if (addkey != "") rule["s_addkey"] = addkey.replace(",", ",");
-            if (notkey != "") rule["s_notkey"] = notkey.replace(",", ",");
-            $('#modal-add-keyword').modal('hide');
-            if (key_flag == 1) {
-                var index = selectIndex[0] - 1;
-                o_rules.splice(index, 1, rule)
-            }else {
-                o_rules.push(rule)
-            }
-            $('#keywords').dataTable().fnClearTable();
-            $('#keywords').dataTable().fnAddData(o_rules);
-        }else {
-            showTip("关键词不能为空", 500)
-        }
-    }
-    //关键词删除
-    function del_Rule() {
-        if (keyTableChecked && selectIndex.length > 0) {
-            showConfirm("确定删除?", function() {
-                var tmp = []
-                for (var i in selectIndex) {
-                    var j = selectIndex[i] - 1;
-                    tmp.push(j)
-                }
-                o_rules = deleteArrayVal(o_rules, tmp)
-                $('#keywords').dataTable().fnClearTable();
-                $('#keywords').dataTable().fnAddData(o_rules);
-
-                keyTableChecked = false;
-                if (o_rules.length == 0) {
-                    $('#allCheckbox').prop("checked", false);
-                    $('#keywords').dataTable().fnClearTable();
-                }
-            })
-        }else {
-            showTip("请选中需要删除的关键词", 500)
-        }
-    }
-    function checkArea(area, city, district) {
-        let flag = true;
-        let v1 = "";
-        let v2 = ""
-        if (area == "" && city == "" && district == "") {
-            flag = true
-        }
-        if (city != "" && area != "") {
-            var areaArr = area.split(",");
-            var cityArr = city.split(",");
-            for (var i in areaArr) {
-                if (cityMap[areaArr[i]] != undefined) {
-                    for (var j in cityArr) {
-                        if ($.inArray(cityArr[j], cityMap[areaArr[i]]) > -1) {
-                            flag = false;
-                            v1 = areaArr[i];
-                            v2 = cityArr[j]
-                        }
-                    }
-                }
-            }
-            return {flag: flag, v1: v1, v2: v2}
-        }
-        if (city != "" && district != "") {
-            var cityArr = city.split(",");
-            var districtArr = district.split(",");
-            for (var i in cityArr) {
-                if (districtMap[cityArr[i]] != undefined) {
-                    for (var j in districtArr) {
-                        let dis = districtArr[j].split("-")[1];
-                        if ($.inArray(dis, districtMap[cityArr[i]]) > -1) {
-                            flag = false;
-                            v1 = cityArr[i];
-                            v2 = districtArr[j]
-                        }
-                    }
-                }
-            }
-            return {flag: flag, v1: v1, v2: v2}
-        }
-        return {flag: flag, v1: v1, v2: v2}
-    }
-</script>

+ 0 - 1581
src/web/templates/private/common_rule_edit.html

@@ -1,1581 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-{{include "com/modal.html"}}
-<script src="/time/js/angular.min.js"></script>
-<script src="/time/js/wui-date.js"></script>
-<div class="content-wrapper">
-    <section class="content-header">
-        <h1>编辑标签
-            <small>
-                <button class="btn btn-primary btn-sm" onclick="importRule()"><i class="fa fa-fw fa-cloud-upload fa-lg"></i>导入关键词</button>
-                <form style="display:none" id='uploadform' method='post'>
-                    <input type='file' name='xlsx' id='file'/>
-                </form>
-                <a class="btn btn-sm btn-success" id="download" onclick="downloades()"><i class="fa fa-fw fa-cloud-download fa-lg"></i>下载查询语句</a>
-                <a class="btn btn-sm btn-instagram" onclick="produceData()"><i class="fa fa-fw fa-database fa-lg"></i>生成数据</a>
-                <button class="btn btn-warning btn-sm" onclick="previewData()"><i class="fa fa-fw fa-eye fa-lg"></i>预览数据</button>
-                <button class="btn btn-danger btn-sm" onclick="archive()"><i class="fa fa-fw fa-save fa-lg"></i>存档</button>
-            </small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/common_rule/list"> 公共标签列表</a></li>
-            <li><a href="#"> 编辑公共标签</a></li>
-        </ol>
-    </section>
-    <!-- Main content -->
-    <section class="content">
-        <div class="tab-content">
-            <div class="nav-tabs-custom">
-                <ul class="nav nav-tabs edit-step">
-                    <li class="active" data-mode="guide"><a href="#tab_1" data-toggle="tab" aria-expanded="true">通用规则</a></li>
-                    <li data-mode="guide" class=""><a href="#tab_2" data-toggle="tab" aria-expanded="false">关键词规则</a></li>
-                    <button class="btn btn-primary btn-sm" style="float: right;margin-top: 4px;margin-right: 10px"
-                            onclick="saveTag()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存标签
-                    </button>
-                </ul>
-                <div class="tab-content">
-                    <div class="tab-pane active" id="tab_1">
-                        <form class="form-horizontal">
-                            <div class="box box-primary">
-                                <div class="box-header with-border">
-                                    <i class="fa fa-tag"></i>
-                                    <h3 class="box-title">通用规则</h3>
-                                </div>
-                                <div class="box-body">
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>标签名称</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="tagname" placeholder="标签名称"
-                                                   value="{{.T.data.s_tagname}}">
-                                        </div>
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>标签属性</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="tagfield" disabled
-                                                   placeholder="标签属性" value="{{.T.data.s_tagfield}}">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>标签维护人</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="serverperson" placeholder="标签维护人"
-                                                   value="{{.T.data.s_serverperson}}" required>
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">选择省</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple data-live-search="true"
-                                                    id="province"></select>
-                                            <script>
-                                                $('#province').on('hide.bs.select', function () {
-                                                    var arr = $('#province').val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    dataMap["s_area"] = arrStr
-                                                })
-                                            </script>
-                                        </div>
-                                        <label class="col-sm-2 control-label">选择市</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple data-live-search="true"
-                                                    id="city"></select>
-                                            <script>
-                                                $('#city').on('hide.bs.select', function () {
-                                                    var arr = $('#city').val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    dataMap["s_city"] = arrStr
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">选择区/县</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple data-live-search="true"
-                                                    id="district"></select>
-                                            <script>
-                                                $('#district').on('hide.bs.select', function () {
-                                                    var arrStr = "";
-                                                    $('#district option:selected').each(function () {
-                                                        if (arrStr === "") {
-                                                            arrStr = $(this).val().replace(",", "-")
-                                                        } else {
-                                                            arrStr = arrStr + "," + $(this).val().replace(",", "-")
-                                                        }
-                                                    });
-                                                    dataMap["s_district"] = arrStr
-                                                })
-
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">公告类别</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" id="typeSelect">
-                                                <option selected:disabled style="diaplay:none" value=0>请选择</option>
-                                                <option value=1>一级公告类别</option>
-                                                <option value=2>二级公告类别</option>
-                                            </select>
-                                            <script>
-                                                $('#typeSelect').on('changed.bs.select', function () {
-                                                    $("#typeSelectVal").selectpicker("deselectAll");
-                                                    $("#typeSelectVal").empty();
-                                                    if ($(this).val() == 1) {
-                                                        for (var i in topTypeArr) {
-                                                            var opt = document.createElement('option');
-                                                            opt.innerText = topTypeArr[i];
-                                                            opt.value = topTypeArr[i];
-                                                            $('#typeSelectVal')[0].appendChild(opt)
-                                                        }
-                                                    }else if ($(this).val() == 2) {
-                                                        for (var i in subTypeArr) {
-                                                            var opt = document.createElement('option');
-                                                            opt.innerText = subTypeArr[i];
-                                                            opt.value = subTypeArr[i];
-                                                            $('#typeSelectVal')[0].appendChild(opt)
-                                                        }
-                                                    }
-                                                    $("#typeSelectVal").selectpicker("refresh");
-                                                })
-                                            </script>
-                                        </div>
-                                        <label class="col-sm-2 control-label">公告类别选择</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple id="typeSelectVal"></select>
-                                            <script>
-                                                $('#typeSelectVal').on('show.bs.select', function () {
-                                                    if ($('#typeSelect').val() == 0) {
-                                                        showTip("请选择公告类别", 500)
-                                                    }
-                                                })
-                                                $('#typeSelectVal').on('hide.bs.select', function () {
-                                                    var arr = $(this).val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    if ($('#typeSelect').val() == 1) {
-                                                        dataMap["s_toptype"] = arrStr;
-                                                        dataMap["s_subtype"] = "";
-                                                    }else {
-                                                        dataMap["s_toptype"] = "";
-                                                        dataMap["s_subtype"] = arrStr;
-                                                    }
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label ">开始时间</label>
-                                        <div class="col-sm-3">
-                                            <div class="wui-content">
-                                                <div class="wui-area" id="starttime">
-                                                    <wui-date
-                                                            format="yyyy-mm-dd hh:mm:ss"
-                                                            placeholder="请选择或输入开始日期"
-                                                            id="date4"
-                                                            btns="{'ok':'确定','now':'此刻'}"
-                                                            ng-model="date4">
-                                                    </wui-date>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <label class="col-sm-2 control-label ">结束时间</label>
-                                        <div class="col-sm-3">
-                                            <div class="wui-content">
-                                                <div class="wui-area" id="endtime">
-                                                    <wui-date
-                                                            format="yyyy-mm-dd hh:mm:ss"
-                                                            placeholder="请选择或输入结束日期"
-                                                            id="date4"
-                                                            btns="{'ok':'确定','now':'此刻'}"
-                                                            ng-model="date5">
-                                                    </wui-date>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">选择字段</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple id="existFieldSelect"
-                                                    data-actions-box="true"></select>
-                                            <script>
-                                                $('#existFieldSelect').on('hide.bs.select', function () {
-                                                    var arr = $(this).val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    dataMap["s_existfields"] = arrStr
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">预算限制</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" type="text" id="s_budget_min" placeholder="单位:元/大于" onkeyup="limitNum(this)">
-                                        </div>
-                                        <label class="col-sm-2" style="text-align: center">___ ___</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" type="text" id="s_budget_max" placeholder="单位:元/小于" onkeyup="limitNum(this)">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">中标金额限制</label>
-                                        <div class="col-sm-3" id="bidamountDiv">
-                                            <input class="form-control" type="text" id="s_bidamount_min" placeholder="单位:元/大于" onkeyup="limitNum(this)">
-                                        </div>
-                                        <label class="col-sm-2" style="text-align: center">___ ___</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" type="text" id="s_bidamount_max" placeholder="单位:元/小于" onkeyup="limitNum(this)">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">全局附加词</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="g_addkey"
-                                                   value="{{.T.data.s_globaladdkey}}">
-                                        </div>
-                                        <label class="col-sm-2 control-label">匹配方式</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_addkeymatch" onclick="selectKeyMatch(0)" placeholder="只能选择二级公告行业类型">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label for="spiderChannel" class="col-sm-2 control-label">全局排除词</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="g_notkey"
-                                                   value="{{.T.data.s_globalnotkey}}">
-                                        </div>
-                                        <label class="col-sm-2 control-label">匹配方式</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_notkeymatch" onclick="selectKeyMatch(1)">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">采购单位行业</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_buyerclass" onclick="selectBuyer(2)" value="{{.T.data.s_globalbuyerclass}}">
-                                        </div>
-                                        <label class="col-sm-2 control-label">公告行业</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_scopeclass" onclick="selectScope(3)">
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">预览数据量</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="maxnum"
-                                                   value="{{.T.data.i_maxnum}}">
-                                        </div>
-                                        <label class="col-sm-2 control-label ">高级字段包</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control" id="extfiledselect" style="border-radius:3px">
-                                                <option value="1">否</option>
-                                                <option value="2">是</option>
-                                            </select>
-                                            <script>
-                                                $('#extfiledselect').on("change", function () {
-                                                    dataMap["i_extfieldstype"] = $('#extfiledselect option:selected').val();
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div id="es_div" class="form-group">
-                                        <label class="col-sm-2 control-label">ES语句</label>
-                                        <div class="col-sm-8">
-                                            <textarea class="form-control" id="estxt" readonly></textarea>
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                        </form>
-                    </div>
-                    <div class="tab-pane" id="tab_2">
-                        <div class="box box-primary">
-                            <div class="box-header with-border">
-                                <i class="fa fa-bookmark"></i>
-                                <h3 class="box-title">关键词规则</h3>
-                                <div style="float: right">
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(4)">关键词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(6)">附加词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(8)">排除词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectBuyer(9)">采购单位行业</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectScope(10)">公告行业</a>
-                                </div>
-                            </div>
-                            <table id="keywords" class="table table-bordered">
-                                <thead>
-                                <div style="margin: 10px 10px 0px;">
-                                    <a class="btn btn-twitter" onclick="add_Rule()">新增</a>
-                                    <a class="btn btn-twitter" onclick="modify_Rule()">修改</a>
-                                    <a class="btn btn-twitter" onclick="del_Rule()">删除</a>
-                                </div>
-                                <tr>
-                                    <th>编号</th>
-                                    <th><input type="checkbox" onclick="allSelect(this)" id="allCheckbox"></th>
-                                    <th>关键词</th>
-                                    <th>匹配方式</th>
-                                    <th>附加词</th>
-                                    <th>匹配方式</th>
-                                    <th>排除词</th>
-                                    <th>匹配方式</th>
-                                    <th>采购单位行业</th>
-                                    <th>公告行业</th>
-                                </tr>
-                                </thead>
-                            </table>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </section>
-</div>
-
-{{include "com/footer.html"}}
-<script>
-    menuActive("/common_rule/list");
-    var dataMap = {{.T.data}};
-    var o_rules = {{.T.data.o_rules}};
-    var app = angular.module('app', ["wui.date"]);       //时间插件
-    var province = {{.T.province}};
-    var cityMap = {{.T.city}};
-    var districtMap = {{.T.district}};
-    var topTypeArr = {{.T.topTypeArr}};
-    var subTypeArr = {{.T.subTypeArr}};
-    var matchTypeMap = {{.T.matchTypeMap}};
-    var existField = {{.T.existField}};
-    var buyerClass = {{.T.buyerClass}};
-    var scopeClass = {{.T.scopeClass}};
-
-    var matchCode = [];     //匹配方式code
-    var matchName = [];     //匹配名字
-    var buyerArr = [];      //采购单位
-    var scopeTopArr = [];       //公告行业一级
-    var scopeSubArr = [];       //公告行业二级
-
-    var keyTableChecked = false;        //关键词表格数据是否有选中
-    var keyTableAllChecked = true;      //表单数据是否被全选中
-    var selectIndex = [];               //选中的编号
-    var setValue = 0;                   //4: 关键词匹配方式,6:附加词匹配方式,8:排除词匹配方式,9:采购单位,10:公告行业, 2:全局采购单位行业, 3:全局公告行业
-    var state = 1;
-    $(document).ready(function () {
-        var name1 = {{(session "user").name}};
-        if (name1 != dataMap.s_updateuser) {
-            showTip("上次修改人员是" + dataMap.s_updateuser, 1000)
-        }
-        $('#extfiledselect').val(dataMap.i_extfieldstype);
-        $('#estxt').val(dataMap.s_esquery);
-        if (dataMap.s_budgetlimit && dataMap.s_budgetlimit != "") {
-            if (dataMap.s_budgetlimit.indexOf("大于") != -1 && dataMap.s_budgetlimit.indexOf("小于") != -1) {
-                var arr = dataMap.s_budgetlimit.split(",");
-                $('#s_budget_min').val(arr[0].replace("大于", ""));
-                $('#s_budget_max').val(arr[1].replace("小于", ""))
-            }else if (dataMap.s_budgetlimit.indexOf("大于") != -1) {
-                $('#s_budget_min').val(dataMap.s_budgetlimit.replace("大于", ""))
-            }else if (dataMap.s_budgetlimit.indexOf("小于") != -1) {
-                $('#s_budget_max').val(dataMap.s_budgetlimit.replace("小于", ""))
-            }
-        }
-        if (dataMap.s_bidamountlimit && dataMap.s_bidamountlimit != "") {
-            if (dataMap.s_bidamountlimit.indexOf("大于") != -1 && dataMap.s_bidamountlimit.indexOf("小于") != -1) {
-                var arr = dataMap.s_bidamountlimit.split(",");
-                $('#s_bidamount_min').val(arr[0].replace("大于", ""));
-                $('#s_bidamount_max').val(arr[1].replace("小于", ""))
-            }else if (dataMap.s_bidamountlimit.indexOf("大于") != -1) {
-                $('#s_bidamount_min').val(dataMap.s_bidamountlimit.replace("大于", ""))
-            }else if (dataMap.s_bidamountlimit.indexOf("小于") != -1) {
-                $('#s_bidamount_max').val(dataMap.s_bidamountlimit.replace("小于", ""))
-            }
-        }
-        if (dataMap.i_starttime > 0) {
-            var dt = new Date();
-            dt.setTime(parseInt(dataMap.i_starttime) * 1000);
-            $('#starttime').find("input").val(dt.format("yyyy-MM-dd hh:mm:ss"));
-        }
-        if (dataMap.i_endtime > 0) {
-            var dt = new Date();
-            dt.setTime(parseInt(dataMap.i_endtime) * 1000);
-            $('#endtime').find("input").val(dt.format("yyyy-MM-dd hh:mm:ss"));
-        }
-        if (dataMap.s_globaltopscopeclass && dataMap.s_globalsubscopeclass && dataMap.s_globaltopscopeclass != "" && dataMap.s_globalsubscopeclass != "") {
-            $('#s_scopeclass').val(dataMap.s_globaltopscopeclass+","+dataMap.s_globalsubscopeclass)
-        }else if (dataMap.s_globaltopscopeclass && dataMap.s_globaltopscopeclass != "") {
-            $('#s_scopeclass').val(dataMap.s_globaltopscopeclass)
-        }else if (dataMap.s_globalsubscopeclass && dataMap.s_globalsubscopeclass != "") {
-            $('#s_scopeclass').val(dataMap.s_globalsubscopeclass)
-        }
-        for (var i in province) {
-            var provOpt = document.createElement('option');
-            provOpt.innerText = province[i];
-            provOpt.value = province[i];
-            if (dataMap.s_area.indexOf(province[i]) != -1) {
-                provOpt.selected = true
-            }
-            $("#province")[0].appendChild(provOpt);
-        }
-        var optHtml = "";
-        var optGroup = "";
-        for (var i in districtMap) {
-            var opt = document.createElement('option');
-            opt.innerText = i;
-            opt.value = i;
-            if (dataMap.s_city.indexOf(i) != -1) {
-                opt.selected = true
-            }
-            $("#city")[0].appendChild(opt);
-            optGroup += '<optgroup label="' + i + '" value="' + i + '">';
-            for (var j in districtMap[i]) {
-                if (dataMap.s_district.indexOf(districtMap[i][j]) != -1) {
-                    optGroup += '<option selected value="' + i + "," + districtMap[i][j] + '">' + districtMap[i][j] + '</option>';
-                } else {
-                    optGroup += '<option value="' + i + "," + districtMap[i][j] + '">' + districtMap[i][j] + '</option>';
-                }
-            }
-            optGroup += `</optgroup>`;
-        }
-        optHtml += optGroup;
-        $("#district").append(optHtml);
-
-        $("#province").selectpicker("refresh");
-        $("#city").selectpicker("refresh");
-        $("#district").selectpicker("refresh");
-
-        if (dataMap.s_toptype != "") {
-            $("#typeSelect").val(1);
-            for (var i in topTypeArr) {
-                var opt = document.createElement('option');
-                opt.innerText = topTypeArr[i];
-                opt.value = topTypeArr[i];
-                if (dataMap.s_toptype.indexOf(topTypeArr[i]) > -1) {
-                    opt.selected = true
-                }
-                $('#typeSelectVal')[0].appendChild(opt)
-            }
-            $("#typeSelectVal").selectpicker("refresh");
-        }else if (dataMap.s_subtype != "") {
-            $("#typeSelect").val(2);
-            for (var i in subTypeArr) {
-                var opt = document.createElement('option');
-                opt.innerText = subTypeArr[i];
-                opt.value = subTypeArr[i];
-                if (dataMap.s_subtype.indexOf(subTypeArr[i]) > -1) {
-                    opt.selected = true
-                }
-                $('#typeSelectVal')[0].appendChild(opt)
-            }
-            $("#typeSelectVal").selectpicker("refresh");
-        }
-
-        for (var i in existField) {
-            var opt = document.createElement('option');
-            opt.innerText = existField[i]["name"];
-            opt.value = existField[i]["code"];
-            if (dataMap.s_existfields && dataMap.s_existfields.indexOf(existField[i]["code"]) != -1) {
-                opt.selected = true
-            }
-            $('#existFieldSelect')[0].appendChild(opt)
-        }
-        $("#infoType").selectpicker("refresh");
-        $("#existFieldSelect").selectpicker("refresh");
-
-        var btnMatchHtml1 = "";
-        var btnMatchHtml2 = "";
-        var addMatchName = "";
-        var notMatchName = "";
-        for (var i in matchTypeMap) {
-            if (i < 5) {
-                btnMatchHtml1 += `<input type="button" class="btn btn-default col-md-pull-2" style="margin-left: 10px;margin-top: 10px" onclick="clickMatchBtn(this)"
-                            code="${matchTypeMap[i]["code"]}" value="${matchTypeMap[i]["name"]}">`;
-            }else {
-                btnMatchHtml2 += `<input type="button" class="btn btn-default col-md-pull-2" style="margin-left: 10px;margin-top: 10px" onclick="clickMatchBtn2(this)"
-                            code="${matchTypeMap[i]["code"]}" value="${matchTypeMap[i]["name"]}">`;
-            }
-            if (dataMap.s_globaladdkeymatch.indexOf(matchTypeMap[i]["code"]) > -1) {
-                if (addMatchName == "") {
-                    addMatchName = matchTypeMap[i]["name"]
-                }else {
-                    addMatchName = addMatchName + "," + matchTypeMap[i]["name"]
-                }
-            }
-            if (dataMap.s_globalnotkeymatch.indexOf(matchTypeMap[i]["code"]) > -1) {
-                if (notMatchName == "") {
-                    notMatchName = matchTypeMap[i]["name"]
-                }else {
-                    notMatchName = notMatchName + "," + matchTypeMap[i]["name"]
-                }
-            }
-        }
-
-        $("#btnGroupMatch").append(btnMatchHtml1);
-        $("#btnGroupMatch2").append(btnMatchHtml2);
-        if (addMatchName != "") $('#s_addkeymatch').val(addMatchName);
-        if (notMatchName != "") $('#s_notkeymatch').val(notMatchName);
-        var btnBuyerHtml = "";
-        for (var i in buyerClass) {
-            btnBuyerHtml += `<input type="button" class="btn btn-default col-md-2" style="margin-left: 10px;margin-top: 10px" onclick="clickBuyerBtn(this)"
-                             value="${buyerClass[i]}">`;
-        }
-        $("#btnGroupBuyer").append(btnBuyerHtml);
-
-        var btnTopHtml = "";
-        var btnSubHtml = "";
-        for (var i in scopeClass) {
-            var topId = "top_" + i;
-            btnTopHtml += `<input type="button" id="${topId}" disabled class="btn btn-default btn_top" value="${scopeClass[i]["name"]}">`;
-            btnSubHtml += `<div class="btn-group-sub">`;
-            for (var j in scopeClass[i]["child"]) {
-                var sub = scopeClass[i]["child"][j].split("_");
-                btnSubHtml += `<input type="button" class="btn btn-default btn-sub" onclick="btnSubScopeClick(this)" code="${scopeClass[i]["child"][j]}"
-                                index="${i}" value="${sub[1]}">`
-            }
-            btnSubHtml += '</div>'
-        }
-        $("#btnGroupTop").append(btnTopHtml);
-        $("#btnGroupSub").append(btnSubHtml);
-
-        $('#keywords').DataTable({
-            "paging": false,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                this.api().column(0).nodes().each(function (cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "data": dataMap.o_rules,
-            "columns": [
-                {"data": null, width: "2%"},
-                {"data": "", width: "1%", render: function() {
-                        return `<input type="checkbox" name="ckb-keyid" onclick="singleSelect(this)" style="text-align: center">`
-                    }},
-                {"data": "s_matchkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_keymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-                {"data": "s_addkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_addkeymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-                {"data": "s_notkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_notkeymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-                {"data": "s_buyerclass", width: "7%", render: function (val) {
-                        if (val == undefined) {
-                            val = ""
-                        }
-                        return val
-                    }},
-                {"data": function (row) {
-                        var str = "";
-                        if (row.s_topscopeclass) {
-                            str = row.s_topscopeclass
-                        }
-                        if (row.s_subscopeclass) {
-                            if (str != "") {
-                                str = str + "," + row.s_subscopeclass
-                            }else {
-                                str = row.s_subscopeclass
-                            }
-                        }
-                        return str
-                    }, width: "5%"},
-            ],
-            "columnDefs": [{
-                "targets": [2],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 24) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 24) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }, {
-                "targets": [4],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 24) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 24) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }, {
-                "targets": [6],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 24) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 24) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }]
-        });
-    });
-
-    $('#province').selectpicker({
-        liveSearch: true,
-    });
-    $('#city').selectpicker({
-        liveSearch: true,
-    });
-    $('#district').selectpicker({
-        liveSearch: true,
-    });
-
-    //全局modal取消按钮
-    function cancelModel() {
-        $('#modal-imp-es').modal("hide");
-        $('#modal-select-match').modal("hide");
-        $('#modal-select-buyer').modal("hide");
-        $('#modal-select-scope').modal("hide");
-        $('#btnGroupMatch').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupBuyer').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupTop').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupSub').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    //选择公告类别
-    function selectType(obj) {
-        var val = obj.options[obj.selectedIndex].value;
-        $('#infoType').empty();
-        if (val === "1") {
-            for (var i in topTypeArr) {
-                var typeOpt = document.createElement('option');
-                typeOpt.innerText = topTypeArr[i];
-                typeOpt.value = topTypeArr[i];
-                $('#infoType')[0].appendChild(typeOpt)
-            }
-        } else {
-            for (var i in subTypeArr) {
-                var opt = document.createElement('option');
-                opt.innerText = subTypeArr[i];
-                opt.value = subTypeArr[i];
-                $('#infoType')[0].appendChild(opt);
-            }
-        }
-        $('#infoType').selectpicker("deselectAll")
-        $('#infoType').selectpicker("refresh");
-    }
-    //关键词/附加词/排除词匹配方式modal
-    function selectKeyMatch(val) {
-        setValue = val;
-        if (setValue == 0 || setValue == 1) {
-            matchCode.length = 0;
-            matchName.length = 0;
-            $('#modal-select-match').modal("show");
-        }else {
-            if (selectIndex.length > 0 && keyTableChecked) {
-                matchCode.length = 0;
-                matchName.length = 0;
-                $('#modal-select-match').modal("show");
-            }else {
-                alert("请选中关键词")
-            }
-        }
-    }
-    //匹配方式按钮点击事件
-    function clickMatchBtn(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            matchCode.splice($.inArray($(obj).attr("code"), matchCode), 1);
-            matchName.splice($.inArray($(obj).val(), matchName), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            matchCode.push($(obj).attr("code"));
-            matchName.push($(obj).val())
-        }
-
-        $('#btnGroupMatch2 .btn-default').each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    function clickMatchBtn2(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            matchCode.splice($.inArray($(obj).attr("code"), matchCode), 1);
-            matchName.splice($.inArray($(obj).val(), matchName), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            matchCode.push($(obj).attr("code"));
-            matchName.push($(obj).val())
-            $('#btnGroupMatch2 .btn-default').each(function () {
-                if (this != obj) {
-                    $(this).removeClass("active-btn-match");
-                }
-            });
-        }
-
-        $('#btnGroupMatch .btn-default').each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    //匹配方式保存
-    function saveMatch() {
-        $('#btnGroupMatch').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#modal-select-match').modal("hide");
-        var matchNameStr = "";
-        var codeStr = "";
-        for (var i in matchName) {
-            if (matchNameStr == "") {
-                matchNameStr = matchName[i];
-            } else {
-                matchNameStr += "," + matchName[i]
-            }
-            if (codeStr == "") {
-                codeStr = matchCode[i]
-            } else {
-                codeStr = codeStr + "," + matchCode[i]
-            }
-        }
-        if (setValue == 0) {
-            $('#s_addkeymatch').val(matchNameStr);
-            dataMap["s_globaladdkeymatch"] = codeStr
-        }else if (setValue == 1) {
-            $('#s_notkeymatch').val(matchNameStr);
-            dataMap["s_globalnotkeymatch"] = codeStr
-        }else {
-            for (var i in selectIndex) {
-                var j = selectIndex[i] - 1;
-                if (setValue == 4) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(3)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_rules[j]["s_keymatch"] = codeStr;
-                    }
-                }else if (setValue == 6) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(5)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_rules[j]["s_addkeymatch"] = codeStr;
-                    }
-                } else if (setValue == 8) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(7)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_rules[j]["s_notkeymatch"] = codeStr;
-                    }
-                }
-            }
-        }
-        $('#modal-select-match').modal("hide");
-        matchName.length = 0;
-        matchCode.length = 0;
-    }
-    //采购单位modal
-    function selectBuyer(val) {
-        setValue = val;
-        if (val == 2) {
-            $('#modal-select-buyer').modal("show");
-        }else {
-            if (keyTableChecked) {
-                $('#modal-select-buyer').modal("show");
-            }else {
-                alert("请选中关键词")
-            }
-        }
-    }
-    //采购单位点击
-    function clickBuyerBtn(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            buyerArr.splice($.inArray($(obj).val(), buyerArr), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            buyerArr.push($(obj).val())
-        }
-    }
-    function saveBuyer() {
-        $('#btnGroupBuyer').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#modal-select-buyer').modal("hide");
-        var buyerStr = "";
-        for (var i in buyerArr) {
-            if ("" === buyerStr) {
-                buyerStr = buyerArr[i];
-            } else {
-                buyerStr += "," + buyerArr[i]
-            }
-        }
-        if (setValue == 2) {
-            $('#s_buyerclass').val(buyerStr);
-            $('#s_buyerclass').attr('title', buyerStr);
-            dataMap["s_globalbuyerclass"] = buyerStr;
-        }else {
-            for (var i in selectIndex) {
-                var j = selectIndex[i] - 1;
-                //采购单位
-                $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(9)").html(buyerStr);
-                o_rules[j]["s_buyerclass"] = buyerStr;
-            }
-        }
-        $('#modal-select-buyer').modal("hide");
-        buyerArr.length = 0;
-    }
-    //公告行业modal
-    function selectScope(val) {
-        setValue = val;
-        if (val == 3) {
-            $('#modal-select-scope').modal("show");
-        }else {
-            if (keyTableChecked) {
-                $('#modal-select-scope').modal("show");
-            }else {
-                alert("请选中关键词")
-            }
-        }
-    }
-    //公告行业二级点击
-    function btnSubScopeClick(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            scopeSubArr.splice($.inArray($(obj).val(), scopeSubArr), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            var topid = "#top_" + $(obj).attr("index");
-            $(topid).removeClass("active-btn-match");
-            scopeSubArr.push($(obj).attr("code"))
-        }
-    }
-    function saveScope() {
-        $('#btnGroupTop').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupSub').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        var scopeStr = "";
-        var topStr = "";
-        var subStr = "";
-        for (var i in scopeTopArr) {
-            if ("" == scopeStr) {
-                scopeStr = scopeTopArr[i];
-            } else {
-                scopeStr += "," + scopeTopArr[i]
-            }
-            if (topStr == "") {
-                topStr = scopeTopArr[i]
-            } else {
-                topStr = topStr + "," + scopeTopArr[i]
-            }
-        }
-        for (var i in scopeSubArr) {
-            if ("" == scopeStr) {
-                scopeStr = scopeSubArr[i];
-            } else {
-                scopeStr += "," + scopeSubArr[i]
-            }
-            if (subStr == "") {
-                subStr = scopeSubArr[i]
-            } else {
-                subStr = subStr + "," + scopeSubArr[i]
-            }
-        }
-        if (setValue == 3) {
-            $('#s_scopeclass').val(scopeStr);
-            $('#s_scopeclass').attr('title', scopeStr);
-            dataMap["s_globaltopscopeclass"] = topStr;
-            dataMap["s_globalsubscopeclass"] = subStr;
-        }else {
-            for (var i in selectIndex) {
-                var j = selectIndex[i] - 1;
-                $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(10)").html(scopeStr);
-                o_rules[j]["s_topscopeclass"] = topStr;
-                o_rules[j]["s_subscopeclass"] = subStr;
-            }
-        }
-        $('#modal-select-scope').modal("hide");
-        scopeTopArr.length = 0;
-        scopeSubArr.length = 0;
-    }
-    //页面添加附加词、排除词
-    function addkeyWord(rdata) {
-        o_rules = rdata["o_rules"];
-        $('#g_addkey').attr("value", rdata["s_globaladdkey"]);
-        $('#g_notkey').attr("value", rdata["s_globalnotkey"]);
-        dataMap["s_globaladdkey"] = rdata["s_globaladdkey"];
-        dataMap["s_globalnotkey"] = rdata["s_globalnotkey"];
-
-        $('#keywords').dataTable().fnClearTable();
-        $('#keywords').dataTable().fnAddData(rdata["o_rules"]);
-    }
-    //表格全选
-    function allSelect(obj) {
-        if ($(obj).is(':checked')) {
-            keyTableChecked = true;
-            keyTableAllChecked = true;
-            $('input[name="ckb-keyid"]').each(function () {
-                this.checked = true;
-                selectIndex.push($(this).parents("tr").index() + 1);
-            })
-        } else {
-            selectIndex.length = 0;
-            keyTableChecked = false;
-            keyTableAllChecked = false;
-            $('input[name="ckb-keyid"]').each(function () {
-                this.checked = false;
-            })
-        }
-    }
-    //表格单个选中
-    function singleSelect(obj) {
-        var tag = true;
-        selectIndex.length = 0;
-        $('input[name="ckb-keyid"]').each(function () {
-            if (this.checked) {
-                keyTableChecked = true;
-                selectIndex.push($(this).parents("tr").index() + 1);
-            }else {
-                tag = false
-            }
-        });
-        if (tag) {
-            keyTableAllChecked = true;
-            $('#allCheckbox').prop("checked", true);
-        } else {
-            keyTableAllChecked = false;
-            $('#allCheckbox').prop("checked", false);
-        }
-    }
-    function saveTag() {
-        let obj = checkArea(dataMap.s_area, dataMap.s_city, dataMap.s_district);
-        if (!obj.flag) {
-            let msg = "选择的" + obj.v1 + "和" + obj.v2 + "生成es语句时会产生错误,请重新选择其中一个";
-            showMsg(msg);
-            return
-        }
-        //通用规则采购单位行业和关键词中的采购单位行业只能存在一个
-        if (o_rules.length > 0) {
-            let tag = false;
-            for (var i in o_rules) {
-                if (o_rules[i].s_buyerclass) {
-                    tag = true
-                }
-            }
-            if (tag && dataMap.s_globalbuyerclass) {
-                showMsg("保存失败,采购单位行业在通用规则和关键词规则中不能同时存在!")
-                return;
-            }
-        }
-        //关键词、附加词、排除词存在,则必须有相应的匹配方式
-        if (dataMap.s_globaladdkey && !dataMap.s_globaladdkeymatch) {
-            showMsg("保存失败,全局附加词必须有对应的匹配方式!")
-            return;
-        }
-        if (dataMap.s_globalnotkey && !dataMap.s_globalnotkeymatch) {
-            showMsg("保存失败,全局排除词必须有对应的匹配方式!")
-            return;
-        }
-        if (o_rules.length > 0) {
-            for (const i in o_rules) {
-                if (o_rules[i].s_matchkey && !o_rules[i].s_keymatch) {
-                    showMsg("保存失败,关键词规则中有关键词未对应匹配方式!")
-                    return;
-                }
-                if (o_rules[i].s_addkey && !o_rules[i].s_addkeymatch) {
-                    showMsg("保存失败,关键词规则中有附加词未对应匹配方式!")
-                    return;
-                }
-                if (o_rules[i].s_notkey && !o_rules[i].s_notkeymatch) {
-                    showMsg("保存失败,关键词规则中有排除词未对应匹配方式!")
-                    return;
-                }
-            }
-        }
-        dataMap["s_tagname"] = $('#tagname').val();
-        dataMap["s_tagfield"] = $('#tagfield').val();
-        dataMap["s_serverperson"] = $('#serverperson').val();
-        dataMap["s_globaladdkey"] = $('#g_addkey').val();
-        dataMap["s_globalnotkey"] = $('#g_notkey').val();
-        if (dataMap["s_tagname"] == "" || dataMap["s_tagfield"] == "" || dataMap["s_serverperson"] == "") {
-            alert("请填写必须字段!");
-            return
-        }
-        if ($('#starttime').find("input").val() != "") {
-            var start = $('#starttime').find("input").val();
-            start = new Date(start).getTime() / 1000;
-            dataMap["i_starttime"] = start;
-        }
-        if ($('#endtime').find("input").val() != "") {
-            var end = $('#endtime').find("input").val();
-            end = new Date(end).getTime() / 1000;
-            dataMap["i_endtime"] = end;
-        }
-        var budget = "";
-        if ($('#s_budget_min').val() != "") {
-            budget = "大于" + $('#s_budget_min').val()
-        }
-        if ($('#s_budget_max').val() != "") {
-            if (budget == "") {
-                budget = "小于" + $('#s_budget_max').val()
-            }else {
-                budget = budget + ",小于" + $('#s_budget_max').val()
-            }
-        }
-        dataMap["s_budgetlimit"] = budget;
-        var bidamount = "";
-        if ($('#s_bidamount_min').val() != "") {
-            bidamount = "大于" + $('#s_bidamount_min').val()
-        }
-        if ($('#s_bidamount_max').val() != "") {
-            if (bidamount == "") {
-                bidamount = "小于" + $('#s_bidamount_max').val()
-            }else {
-                bidamount = bidamount + ",小于" + $('#s_bidamount_max').val()
-            }
-        }
-        dataMap["s_bidamountlimit"] = bidamount;
-        if ($('#maxnum').val() !== "") {
-            dataMap["i_maxnum"] = $('#maxnum').val();
-        }
-        if (dataMap.s_globaladdkeymatch.indexOf("1") > -1 || dataMap.s_globaladdkeymatch.indexOf("2") > -1 || dataMap.s_globaladdkeymatch.indexOf("3") > -1 ||
-            dataMap.s_globaladdkeymatch.indexOf("4") > -1 || dataMap.s_globaladdkeymatch.indexOf("5") > -1) {
-            dataMap["i_globaladdkeytype"] = 1
-        }else if (dataMap.s_globaladdkeymatch.indexOf("6") > -1 || dataMap.s_globaladdkeymatch.indexOf("7") > -1 ||
-            dataMap.s_globaladdkeymatch.indexOf("8") > -1 || dataMap.s_globaladdkeymatch.indexOf("9") > -1) {
-            dataMap["i_globaladdkeytype"] = 2
-        }else {
-            dataMap["i_globaladdkeytype"] = 0
-        }
-        if (dataMap.s_globalnotkeymatch.indexOf("1") > -1 || dataMap.s_globalnotkeymatch.indexOf("2") > -1 || dataMap.s_globalnotkeymatch.indexOf("3") > -1 ||
-            dataMap.s_globalnotkeymatch.indexOf("4") > -1 || dataMap.s_globalnotkeymatch.indexOf("5") > -1) {
-            dataMap["i_globalnotkeytype"] = 1
-        }else if (dataMap.s_globalnotkeymatch.indexOf("6") > -1 || dataMap.s_globalnotkeymatch.indexOf("7") > -1 ||
-            dataMap.s_globalnotkeymatch.indexOf("8") > -1 || dataMap.s_globalnotkeymatch.indexOf("9") > -1) {
-            dataMap["i_globalnotkeytype"] = 2
-        }else {
-            dataMap["i_globalnotkeytype"] = 0
-        }
-        dataMap["o_rules"] = JSON.stringify(o_rules);
-        $.ajax({
-            url: "/service/common_rule/save",
-            type: 'POST',
-            data: dataMap,
-            success: function (r) {
-                if (r.rep && r.id) {
-                    $('#estxt').val(r.s_esquery);
-                    state = 2;
-                    showTip("保存成功",1000);
-                } else {
-                    showTip("保存失败",1000);
-                }
-            }
-        })
-    }
-
-    //生成数据
-    function produceData() {
-        com.maskShow("正在生成数据...");
-        $.ajax({
-            url: "/service/common_rule/produce",
-            type: "post",
-            data: {"id": dataMap.id},
-            success: function (r) {
-                com.maskHide();
-                if (r.rep) {
-                    dataMap.i_estotal = r.count
-                    showTip("数据生成成功", 1000);
-                } else {
-                    showTip("数据生成失败", 1000);
-                }
-            }
-        })
-    }
-
-    //预览数据
-    function previewData() {
-        myDataTable = $('#previewData').DataTable({
-            "destroy": true,
-            "paging": true,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": true,
-            "autoWidth": true,
-            "serverSide": true,
-            "ajax": {
-                url: "/service/common_rule/preview",
-                type: "post",
-                data: {"s_dataid": dataMap.s_dataid},
-            },
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-                $('#dataTable-btn').click(function (e) {
-                    var redirectpage = 0
-                    if ($("#changePage").val() && $("#changePage").val() > 0) {
-                        var redirectpage = $("#changePage").val() - 1;
-                    }
-                    myDataTable.page(redirectpage).draw(false);
-                });
-                this.api().column(0).nodes().each(function (cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null, width: "2%"},
-                {"data": function (row) {
-                        if (row.s_matchkey) {
-                            return row.s_matchkey
-                        } else {
-                            return ""
-                        }
-                    }, width: "8%"},
-                {"data": function (row) {
-                        if (row.area) {
-                            return row.area
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"},
-                {"data": function (row) {
-                        if (row.city) {
-                            return row.city
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"},
-                {"data": function (row) {
-                        if (row.s_jyhref) {
-                            if (row.title.length > 36) {
-                                var str = row.title.substring(0, 36) + "..."
-                            } else {
-                                var str = row.title
-                            }
-                            tmp = '<a class="" target="_blank" href=' + row.s_jyhref + '>' + str + '</a>';
-                            return tmp
-                        } else {
-                            return row.title
-                        }
-                    }, width: "5%"},
-                {"data": function (row) {
-                        if (row.subtype) {
-                            return row.subtype
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"},
-                {"data": function (row) {
-                        var str = com.trimStr(row.detail);
-                        if (str.length > 14) {
-                            return str.substring(0, 14) + "..."
-                        } else {
-                            return str
-                        }
-                    }, width: "5%"},
-                {"data": function (row) {
-                        var dt = new Date();
-                        dt.setTime(parseInt(row.publishtime) * 1000);
-                        return dt.format("yyyy-MM-dd")
-                    }, width: "4%"},
-                {"data": function (row) {
-                        if (row.href) {
-                            var shref = row.href;
-                            tmp = '<a class="" target="_blank" href=' + shref + '>公告地址</a>';
-                            return tmp
-                        } else {
-                            return ""
-                        }
-                    }, width: "5%"},
-                {"data": function (row) {
-                        if (row.projectcode) {
-                            return row.projectcode
-                        }else {
-                            return ""
-                        }
-                    }, width: "5%"},
-                {"data": "projectname", width: "5%"},
-                {"data": function (row) {
-                        if (row.projectscope) {
-                            if (row.projectscope.length > 14) {
-                                return row.projectscope.substring(0, 14) + "..."
-                            } else {
-                                return row.projectscope
-                            }
-                        }
-                        return ""
-                    }, width: "3%"},
-                {"data": function (row) {
-                        if (row.budget == undefined) {
-                            return ""
-                        } else {
-                            return row.budget
-                        }
-                    }, width: "3%"},
-                {"data": function (row) {
-                        if (row.bidamount == undefined) {
-                            return ""
-                        } else {
-                            return row.bidamount
-                        }
-                    }, width: "3%"},
-                {"data": "bidopentime", width: "3%", render: function (val) {
-                        if (val) {
-                            var dt = new Date();
-                            dt.setTime(parseInt(val) * 1000);
-                            return dt.format("yyyy-MM-dd")
-                        } else {
-                            return ""
-                        }
-                    }},
-                {"data": "buyer", width: "3%", render: function (val) {
-                        if (val == undefined) {
-                            val = ""
-                        }
-                        return val
-                    }},
-                {"data": function (row) {
-                        if (row.buyerperson) {
-                            return row.buyerperson
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"
-                },
-                {"data": function (row) {
-                        if (row.buyertel) {
-                            return row.buyertel
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"
-                },
-                {"data": "agency", width: "5%", render: function (val) {
-                        if (val == undefined) {
-                            val = ""
-                        }
-                        return val
-                    }
-                },
-                {"data": "winner", width: "3%", render: function (val) {
-                        if (val == undefined) {
-                            val = ""
-                        }
-                        return val
-                    }
-                },
-                {"data": function (row) {
-                        if (row.winnerperson) {
-                            return row.winnerperson
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"
-                },
-                {"data": function (row) {
-                        if (row.winnertel) {
-                            return row.winnertel
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"
-                },
-                {"data": function (row) {
-                        if (row.legal_person) {
-                            return row.legal_person
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"
-                },
-                {"data": function (row) {
-                        if (row.company_phone) {
-                            return row.company_phone
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"
-                },
-                {"data": function (row) {
-                        if (row.company_email) {
-                            return row.company_email
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"
-                },
-            ]
-        });
-        $('#modal-preview').modal("show");
-        if (dataMap.i_extfieldstype == 1) {
-            var str = "标准字段包 " + dataMap.i_maxnum + "/" + dataMap.i_estotal;
-            $('#dataCount').html(str)
-        } else {
-            var str = "高级字段包 " + dataMap.i_maxnum + "/" + dataMap.i_estotal;
-            $('#dataCount').html(str)
-        }
-    }
-
-    //导入标签
-    function importRule() {
-        $("#file").click();
-    }
-
-    $(function () {
-        $("#uploadform").find("input").change(function () {
-            var val = $(this).val() ? $(this).val() : "";
-            if (val.indexOf(".xlsx") < 0) {
-                showMsg("文件格式非法", function () {
-                });
-            } else {
-                var myform = new FormData();
-                myform.append('xlsx', $("#file")[0].files[0]);
-                $.ajax({
-                    url: "/service/rule/import",
-                    type: 'POST',
-                    data: myform,
-                    async: false,
-                    contentType: false,//不要设置Content-Type请求头
-                    processData: false,// 使数据不做处理
-                    success: function (r) {
-                        if (r.rep) {
-                            // dataMap["id"] = r.id;
-                            addkeyWord(r.rdata);
-                            showTip("导入成功", 1000)
-                        } else {
-                            showTip("导入失败", 1000)
-                        }
-                    }
-                })
-            }
-        })
-    })
-
-    //下载es
-    function downloades() {
-        if (state == 1) {
-            alert("请先保存标签")
-        } else {
-            $("#download").attr("href", "/service/common_rule/exportes?id={{.T.data.id}}")
-        }
-    }
-
-    //存档
-    function archive() {
-        showConfirm("是否存档?", function () {
-            $.ajax({
-                url: "/service/rule/archive",
-                type: "post",
-                data: {"_id": dataMap["id"]},
-                success: function (r) {
-                    if (r.rep) {
-                        showTip("存档成功", 1000);
-                    } else {
-                        showTip("存档失败", 1000);
-                    }
-                }
-            })
-        });
-    }
-
-    var key_flag = -1;      // 0:新增,1:修改
-    //关键词表格新增
-    function add_Rule() {
-        key_flag = 0;
-        $('#keyword_txt').val("");
-        $('#addword_txt').val("");
-        $('#notword_txt').val("");
-        $('#modal-add-keyword').modal("show");
-    }
-    //关键词修改
-    function modify_Rule(){
-        if (selectIndex.length == 1) {
-            key_flag = 1;
-            var index = selectIndex[0] - 1;
-            $('#modal-add-keyword').modal("show");
-            $('#keyword_txt').val(o_rules[index].s_matchkey);
-            $('#addword_txt').val(o_rules[index].s_addkey);
-            $('#notword_txt').val(o_rules[index].s_notkey);
-        }else {
-            showTip("请选中需要修改的关键词,且只能选中一条", 1000)
-        }
-
-    }
-    function saveKeyword() {
-        var key = $('#keyword_txt').val();
-        var addkey = $('#addword_txt').val();
-        var notkey = $('#notword_txt').val();
-        if (key != "") {
-            var rule = {};
-            rule["s_matchkey"] = key.replace(",", ",");
-            if (addkey != "") rule["s_addkey"] = addkey.replace(",", ",");
-            if (notkey != "") rule["s_notkey"] = notkey.replace(",", ",");
-            $('#modal-add-keyword').modal('hide');
-            if (key_flag == 1) {
-                var index = selectIndex[0] - 1;
-                o_rules.splice(index, 1, rule)
-            }else {
-                o_rules.push(rule)
-            }
-            $('#keywords').dataTable().fnClearTable();
-            $('#keywords').dataTable().fnAddData(o_rules);
-        }else {
-            showTip("关键词不能为空", 500)
-        }
-    }
-    //关键词删除
-    function del_Rule() {
-        if (keyTableChecked && selectIndex.length > 0) {
-            showConfirm("确定删除?", function() {
-                var tmp = []
-                for (var i in selectIndex) {
-                    var j = selectIndex[i] - 1;
-                    tmp.push(j)
-                }
-                o_rules = deleteArrayVal(o_rules, tmp)
-                $('#keywords').dataTable().fnClearTable();
-                $('#keywords').dataTable().fnAddData(o_rules);
-
-                keyTableChecked = false;
-                if (o_rules.length == 0) {
-                    $('#allCheckbox').prop("checked", false);
-                    $('#keywords').dataTable().fnClearTable();
-                }
-            })
-        }else {
-            showTip("请选中需要删除的关键词", 500)
-        }
-    }
-    function checkArea(area, city, district) {
-        let flag = true;
-        let v1 = "";
-        let v2 = ""
-        if (area == "" && city == "" && district == "") {
-            flag = true
-        }
-        if (city != "" && area != "") {
-            var areaArr = area.split(",");
-            var cityArr = city.split(",");
-            for (var i in areaArr) {
-                if (cityMap[areaArr[i]] != undefined) {
-                    for (var j in cityArr) {
-                        if ($.inArray(cityArr[j], cityMap[areaArr[i]]) > -1) {
-                            flag = false;
-                            v1 = areaArr[i];
-                            v2 = cityArr[j]
-                        }
-                    }
-                }
-            }
-            return {flag: flag, v1: v1, v2: v2}
-        }
-        if (city != "" && district != "") {
-            var cityArr = city.split(",");
-            var districtArr = district.split(",");
-            for (var i in cityArr) {
-                if (districtMap[cityArr[i]] != undefined) {
-                    for (var j in districtArr) {
-                        let dis = districtArr[j].split("-")[1];
-                        if ($.inArray(dis, districtMap[cityArr[i]]) > -1) {
-                            flag = false;
-                            v1 = cityArr[i];
-                            v2 = districtArr[j]
-                        }
-                    }
-                }
-            }
-            return {flag: flag, v1: v1, v2: v2}
-        }
-        return {flag: flag, v1: v1, v2: v2}
-    }
-</script>

+ 0 - 184
src/web/templates/private/common_rule_list.html

@@ -1,184 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-<div class="content-wrapper">
-    <section class="content-header">
-        <h1>
-            <small><a href="/service/common_rule/create" class="btn btn-primary opr">新增标签</a></small>
-        </h1>
-        <ol class="breadcrumb">
-          <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-          <li><a href="/service/common_rule/list"> 公共标签列表</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>
-                                <th>功能</th>
-                                <th>查看</th>
-                            </tr>
-                            </thead>
-                        </table>
-                    </div>
-                    <!-- /.box-body -->
-                </div>
-                <!-- /.box -->
-            </div>
-        </div>
-    </section>
-</div>
-<div class="modal fade" id="modal-preview-href" tabindex="-1" role="dialog" aria-hidden="true">
-    <div class="modal-dialog">
-        <div class="modal-content">
-            <div class="modal-header">
-                <div class="modal-header">
-                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-                    <div class="edit-form">
-                        <div class="edit-info">
-                            <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span>
-                            <span class="info">链接地址</span>
-                        </div>
-                        <a id="preview-href" target="_blank" style="word-wrap: break-word"></a>
-                    </div>
-                </div>
-            </div>
-            <div class="modal-footer">
-                <input type="button" id="copy" data-clipboard-target="#preview-href" class="btn btn-primary saveBtn" value="复制">
-                <input type="button" onclick="cancelModel()" class="btn btn-default" value="取消">
-            </div>
-        </div>
-    </div><!-- /.modal -->
-</div>
-
-{{include "com/footer.html"}}
-<script>
-    menuActive("/common_rule/list");
-    $(function () {
-        ttable = $('#dataTable').DataTable({
-            "paging": true,
-            "lengthChange": false,
-            "searching": true,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "serverSide": true,
-            "ajax": {
-                "url": "/service/common_rule/list",
-                "type": "post",
-                "data": {}
-            },
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-                $('#dataTable-btn').click(function (e) {
-                    var redirectpage = 0
-                    if ($("#changePage").val() && $("#changePage").val() > 0) {
-                        var redirectpage = $("#changePage").val() - 1;
-                    }
-                    ttable.page(redirectpage).draw(false);
-                });
-                this.api().column(0).nodes().each(function(cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null,width:"5%"},
-                {"data": "s_tagname"},
-                {"data": "s_tagfield"},
-                {"data": "s_serverperson", width: "10%"},
-                {"data": "i_updatetime",width:"9%", render: function (val) {
-                  var dt = new Date();
-                  dt.setTime(parseInt(val) * 1000);
-                  return dt.format("yyyy-MM-dd")
-                }},
-                {"data": "_id", width:"11%",render: function (val, a, row, pos) {
-                    var s = [val, row.s_dataid];
-                      tmp = '<div>' +
-                          '<a class="btn btn-sm btn-primary" href="/service/common_rule/edit?id='+val+'">编辑</a>'+
-                          '<a class="btn btn-sm btn-danger" onclick="del(\''+s+'\')">删除</a>'+
-                          '</div>';
-                      return tmp
-                }},
-                {"data": "_id", width:"15%",render: function (val, a, row, pos) {
-                    var s = [val, row.s_dataid];
-                      tmp = '<div>' +
-                          '<a class="btn btn-sm btn-primary" href="/service/common_rule/downloadrule?id='+val+'">导出标签</a>'+
-                          '<a class="btn btn-sm btn-warning" onclick="archive(\'' + val + '\')">存档</a>'+
-                          '</div>';
-                      return tmp
-                }},
-                {"data": "_id",width:"15%", render: function (val, a, row, pos) {
-                  tmp = '<div xmlns="http://www.w3.org/1999/html">' +
-                       '<button class="btn btn-sm btn-instagram" onclick="preview(\'' + row.s_dataid + '\')">链接地址</button>'+
-                      '<a class="btn btn-sm btn-success" href="/service/rule/history?tagid='+val+'">变更历史</a>'+
-                      '</div>';
-                  return tmp
-                }}
-            ]
-        });
-    });
-    function del(s){
-        showConfirm("确定删除?", function() {
-            $.ajax({
-                url:"/service/common_rule/del",
-                type:"post",
-                data:{"_id": s.split(",")[0], "s_dataid": s.split(",")[1]},
-                success:function(r){
-                  if(r.rep){
-                    ttable.ajax.reload();
-                  }else{
-                    alert("删除失败");
-                  }
-                }
-            })
-        });
-    }
-    function archive(_id){
-        showConfirm("是否存档?", function() {
-            $.ajax({
-                url:"/service/common_rule/archive",
-                type:"post",
-                data:{"_id":_id},
-                success:function(r){
-                  if(r.rep){
-                    showTip("存档成功",1000);
-                  }else{
-                    showTip("存档失败",1000);
-                  }
-                }
-            })
-        });
-    }
-    function preview(s_dataid) {
-        var href = {{.T.preview_href}} + "?type=common"+"&key=" + s_dataid;
-        $('#preview-href').html(href);
-        $('#preview-href').attr("href", href);
-        $('#modal-preview-href').modal("show")
-    }
-    function cancelModel() {
-        $('#modal-preview-href').modal("hide");
-    }
-    var clipboard = new ClipboardJS('#copy');
-    clipboard.on('success', function () {
-        alert("复制成功!")
-    });
-    clipboard.on('error', function () {
-        alert("复制失败!")
-    });
-</script>

+ 0 - 1562
src/web/templates/private/rule_create.html

@@ -1,1562 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-{{include "com/modal.html"}}
-<script src="/time/js/angular.min.js"></script>
-<script src="/time/js/wui-date.js"></script>
-<div class="content-wrapper">
-    <section class="content-header">
-        <h1>新建标签
-            <small>
-                <button class="btn btn-warning btn-sm" onclick="importcomrule()"><i class="fa fa-fw fa-upload fa-lg"></i>导入通用标签</button>
-                <button class="btn btn-primary btn-sm" onclick="importRule()"><i class="fa fa-fw fa-cloud-upload fa-lg"></i>导入关键词</button>
-                <form style="display:none" id='uploadform' method='post'>
-                    <input type='file' name='xlsx' id='file'/>
-                </form>
-                <button class="btn btn-info btn-sm" onclick="importEs()"><i class="fa fa-fw fa-cloud-upload fa-lg"></i>导入es</button>
-                <a class="btn btn-sm btn-success" id="download" onclick="downloades()"><i class="fa fa-fw fa-cloud-download fa-lg"></i>下载es</a>
-                <a class="btn btn-sm btn-instagram" onclick="produceData()"><i class="fa fa-fw fa-database fa-lg"></i>生成数据</a>
-                <button class="btn btn-warning btn-sm" onclick="previewData()"><i class="fa fa-fw fa-eye fa-lg"></i>预览</button>
-                <button class="btn btn-danger btn-sm" onclick="archive()"><i class="fa fa-fw fa-save fa-lg"></i>存档</button>
-            </small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/rule/list">私有标签列表</a></li>
-            <li><a href="#">新建私有标签</a></li>
-        </ol>
-    </section>
-    <!-- Main content -->
-    <section class="content">
-        <div class="tab-content">
-            <div class="nav-tabs-custom">
-                <ul class="nav nav-tabs edit-step">
-                    <li class="active" data-mode="guide"><a href="#tab_1" data-toggle="tab" aria-expanded="true">通用规则</a></li>
-                    <li data-mode="guide" class=""><a href="#tab_2" data-toggle="tab" aria-expanded="false">关键词规则</a></li>
-                    <button class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" onclick="saveTag()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存标签</button>
-                </ul>
-                <div class="tab-content">
-                    <div class="tab-pane active" id="tab_1">
-                        <form class="form-horizontal">
-                            <div class="box box-primary">
-                                <div class="box-header with-border">
-                                    <i class="fa fa-tag"></i>
-                                    <h3 class="box-title">通用规则</h3>
-                                </div>
-                                <div class="box-body">
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>客户名称</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="customer"
-                                                   placeholder="客户名称" required>
-                                        </div>
-                                        <label class="col-sm-2 control-label">客户联系人</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="customername" placeholder="客户联系人姓名"
-                                                   value="">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>销售经理</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="salename" placeholder="销售经理"
-                                                   value="">
-                                        </div>
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>售前支持</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="serverperson" placeholder="售前支持人员"
-                                                   value="">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>标签名称</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="tagname" placeholder="标签名称"
-                                                   value="" required>
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">选择省</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple data-live-search="true"
-                                                    id="province"></select>
-                                            <script>
-                                                $('#province').on('hide.bs.select', function () {
-                                                    var arr = $('#province').val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    dataMap["s_area"] = arrStr
-                                                })
-                                            </script>
-                                        </div>
-                                        <label class="col-sm-2 control-label">选择市</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple data-live-search="true"
-                                                    id="city"></select>
-                                            <script>
-                                                $('#city').on('hide.bs.select', function () {
-                                                    var arr = $('#city').val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    dataMap["s_city"] = arrStr
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">选择区/县</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple data-live-search="true"
-                                                    id="district"></select>
-                                            <script>
-                                                $('#district').on('hide.bs.select', function () {
-                                                    var arrStr = "";
-                                                    $('#district option:selected').each(function () {
-                                                        if (arrStr === "") {
-                                                            arrStr = $(this).val()
-                                                        } else {
-                                                            arrStr = arrStr + "," + $(this).val()
-                                                        }
-                                                    });
-                                                    dataMap["s_district"] = arrStr
-                                                })
-
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">公告类别</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" id="typeSelect">
-                                                <option selected:disabled style="diaplay:none" value=0>请选择</option>
-                                                <option value=1>一级公告类别</option>
-                                                <option value=2>二级公告类别</option>
-                                            </select>
-                                            <script>
-                                                $('#typeSelect').on('changed.bs.select', function () {
-                                                    $("#typeSelectVal").selectpicker("deselectAll");
-                                                    $("#typeSelectVal").empty();
-                                                    if ($(this).val() == 1) {
-                                                        for (var i in topTypeArr) {
-                                                            var opt = document.createElement('option');
-                                                            opt.innerText = topTypeArr[i];
-                                                            opt.value = topTypeArr[i];
-                                                            $('#typeSelectVal')[0].appendChild(opt)
-                                                        }
-                                                    }else if ($(this).val() == 2) {
-                                                        for (var i in subTypeArr) {
-                                                            var opt = document.createElement('option');
-                                                            opt.innerText = subTypeArr[i];
-                                                            opt.value = subTypeArr[i];
-                                                            $('#typeSelectVal')[0].appendChild(opt)
-                                                        }
-                                                    }
-                                                    $("#typeSelectVal").selectpicker("refresh");
-                                                })
-                                            </script>
-                                        </div>
-                                        <label class="col-sm-2 control-label">公告类别选择</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple id="typeSelectVal"></select>
-                                            <script>
-                                                $('#typeSelectVal').on('show.bs.select', function () {
-                                                    if ($('#typeSelect').val() == 0) {
-                                                        showTip("请选择公告类别", 500)
-                                                    }
-                                                })
-                                                $('#typeSelectVal').on('hide.bs.select', function () {
-                                                    var arr = $(this).val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    if ($('#typeSelect').val() == 1) {
-                                                        dataMap["s_toptype"] = arrStr;
-                                                        dataMap["s_subtype"] = "";
-                                                    }else {
-                                                        dataMap["s_toptype"] = "";
-                                                        dataMap["s_subtype"] = arrStr;
-                                                    }
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label ">开始时间</label>
-                                        <div class="col-sm-3">
-                                            <div class="wui-content">
-                                                <div class="wui-area" id="starttime">
-                                                    <wui-date
-                                                            format="yyyy-mm-dd hh:mm:ss"
-                                                            placeholder="请选择或输入开始日期"
-                                                            id="date4"
-                                                            btns="{'ok':'确定','now':'此刻'}"
-                                                            ng-model="date4">
-                                                    </wui-date>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <label class="col-sm-2 control-label ">结束时间</label>
-                                        <div class="col-sm-3">
-                                            <div class="wui-content">
-                                                <div class="wui-area" id="endtime">
-                                                    <wui-date
-                                                            format="yyyy-mm-dd hh:mm:ss"
-                                                            placeholder="请选择或输入结束日期"
-                                                            id="date4"
-                                                            btns="{'ok':'确定','now':'此刻'}"
-                                                            ng-model="date5">
-                                                    </wui-date>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">选择字段</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple id="existFieldSelect"
-                                                    data-actions-box="true"></select>
-                                            <script>
-                                                $('#existFieldSelect').on('hide.bs.select', function () {
-                                                    var arr = $('#existFieldSelect').val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    dataMap["s_existfields"] = arrStr
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">预算限制</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" type="text" id="s_budget_min" placeholder="单位:元/大于">
-                                        </div>
-                                        <label class="col-sm-2" style="text-align: center">___ ___</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" type="text" id="s_budget_max" placeholder="单位:元/小于">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">中标金额限制</label>
-                                        <div class="col-sm-3" id="bidamountDiv">
-                                            <input class="form-control" type="text" id="s_bidamount_min" placeholder="单位:元/大于">
-                                        </div>
-                                        <label class="col-sm-2" style="text-align: center">___ ___</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" type="text" id="s_bidamount_max" placeholder="单位:元/小于">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">全局附加词</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="g_addkey" placeholder="***"
-                                                   value="">
-                                        </div>
-                                        <label class="col-sm-2 control-label">匹配方式</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_addkeymatch" onclick="selectKeyMatch(0)">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label for="spiderChannel" class="col-sm-2 control-label">全局排除词</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="g_notkey" placeholder="***"
-                                                   value="">
-                                        </div>
-                                        <label class="col-sm-2 control-label">匹配方式</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_notkeymatch" onclick="selectKeyMatch(1)">
-                                        </div>
-                                    </div>
-                                     <div class="form-group">
-                                        <label class="col-sm-2 control-label">全局清理词</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="s_globalclearkey" placeholder="***"
-                                                   value="">
-                                        </div>
-                                         <label class="col-sm-2 control-label">匹配方式</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_globalclearkeymatch" onclick="selectKeyMatch(13)">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">采购单位行业</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_buyerclass" onclick="selectBuyer(2)">
-                                        </div>
-                                        <label class="col-sm-2 control-label">公告行业</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_scopeclass" onclick="selectScope(3)">
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">预览数据量</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="maxnum" placeholder="默认100条" value="">
-                                        </div>
-                                        <label class="col-sm-2 control-label ">高级字段包</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control" id="extfiledselect" style="border-radius:3px">
-                                                <option value="2">是</option>
-                                                <option value="1">否</option>
-                                            </select>
-                                            <script>
-                                                $('#extfiledselect').on("change", function () {
-                                                    dataMap["i_extfieldstype"] = $('#extfiledselect option:selected').val();
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div id="es_div" class="form-group" style="display: none">
-                                        <label class="col-sm-2 control-label">ES语句</label>
-                                        <div class="col-sm-8">
-                                            <textarea class="form-control" id="estxt" readonly></textarea>
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                        </form>
-                    </div>
-                    <div class="tab-pane" id="tab_2">
-                        <div class="box box-primary">
-                            <div class="box-header with-border">
-                                <i class="fa fa-bookmark"></i>
-                                <h3 class="box-title">关键词规则</h3>
-                                <div style="float: right">
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(4)">关键词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(6)">附加词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(8)">排除词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectBuyer(9)">采购单位行业</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectScope(10)">公告行业</a>
-                                </div>
-                            </div>
-                            <table id="keywords" class="table table-bordered">
-                                <thead>
-                                <div style="margin: 10px 10px 0px;">
-                                    <a class="btn btn-twitter" onclick="add_Rule()">新增</a>
-                                    <a class="btn btn-twitter" onclick="modify_Rule()">修改</a>
-                                    <a class="btn btn-twitter" onclick="del_Rule()">删除</a>
-                                </div>
-                                <tr>
-                                    <th>编号</th>
-                                    <th><input type="checkbox" onclick="allSelect(this)" id="allCheckbox"></th>
-                                    <th>关键词</th>
-                                    <th>匹配方式</th>
-                                    <th>附加词</th>
-                                    <th>匹配方式</th>
-                                    <th>排除词</th>
-                                    <th>匹配方式</th>
-                                    <th>采购单位行业</th>
-                                    <th>公告行业</th>
-                                </tr>
-                                </thead>
-                            </table>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </section>
-</div>
-
-{{include "com/footer.html"}}
-<script>
-    menuActive("/service/rule/list");
-    var state = 1;
-    var clearkeyMatchArr = ["detail","title"];
-    var app = angular.module('app', ["wui.date"]);       //时间插件
-    var province = {{.T.province}};
-    var cityMap = {{.T.city}};
-    var districtMap = {{.T.district}};
-    var topTypeArr = {{.T.topTypeArr}};
-    var subTypeArr = {{.T.subTypeArr}};
-    var matchTypeMap = {{.T.matchTypeMap}};
-    var matchTypeMap2 = {{.T.matchTypeMap2}};
-    var existField = {{.T.existField}};
-    var buyerClass = {{.T.buyerClass}};
-    var scopeClass = {{.T.scopeClass}};
-
-    var matchCode = [];     //匹配方式code
-    var matchName = [];     //匹配名字
-    var buyerArr = [];      //采购单位
-    var scopeTopArr = [];       //公告行业一级
-    var scopeSubArr = [];       //公告行业二级
-
-    var keyTableChecked = false;        //关键词表格数据是否有选中
-    var keyTableAllChecked = true;      //表单数据是否被全选中
-    var selectIndex = [];               //选中的编号
-    var setValue = 0;                   // 4: 关键词匹配方式,6:附加词匹配方式,8:排除词匹配方式,9:采购单位,10:公告行业, 2:全局采购单位行业, 3:全局公告行业, 13:全局清理词
-    var o_rules = [];                    //关键词列表
-
-    var s_dataid = "";                  //预览链接加密串
-
-    //表单数据
-    var dataMap = {
-        "id": "",
-        "s_customer": "",
-        "s_tagname": "",
-        "s_salesperson": "",
-        "s_customername": "",
-        "s_area": "",
-        "s_city": "",
-        "s_district": "",
-        "s_toptype": "",
-        "s_subtype": "",
-        "s_esquery": "",
-        "s_globaladdkey": "",
-        "s_globaladdkeymatch": "",
-        "s_globalnotkey": "",
-        "s_globalnotkeymatch": "",
-        "i_maxnum": 100,
-        "i_starttime": 0,
-        "i_endtime": 0,
-        "i_extfieldstype": 2,
-        "i_esquerytype": 1,
-    };
-
-    $(document).ready(function () {
-        //省
-        for (var i in province) {
-            var provOpt = document.createElement('option');
-            provOpt.innerText = province[i];
-            provOpt.value = province[i];
-            $("#province")[0].appendChild(provOpt);
-        }
-        var optHtml = "";
-        var optGroup = "";
-        for (var i in districtMap) {
-            var opt = document.createElement('option');
-            opt.innerText = i;
-            opt.value = i;
-            $("#city")[0].appendChild(opt);
-            optGroup += '<optgroup label="' + i + '" value="' + i + '">';
-            for (var j in districtMap[i]) {
-                optGroup += '<option value="' + i + "-" + districtMap[i][j] + '">' + districtMap[i][j] + '</option>';
-            }
-            optGroup += `</optgroup>`;
-        }
-        optHtml += optGroup;
-        $("#district").append(optHtml);
-
-        $("#province").selectpicker("refresh");
-        $("#city").selectpicker("refresh");
-        $("#district").selectpicker("refresh");
-
-        for (var i in existField) {
-            var opt = document.createElement('option');
-            opt.innerText = existField[i]["name"];
-            opt.value = existField[i]["code"];
-            $('#existFieldSelect')[0].appendChild(opt)
-        }
-        $("#existFieldSelect").selectpicker("refresh");
-        var btnMatchHtml1 = "";
-        var btnMatchHtml2 = "";
-        for (var i in matchTypeMap) {
-            if (i < 5) {
-                btnMatchHtml1 += `<input type="button" class="btn btn-default col-md-pull-2" style="margin-left: 10px;margin-top: 10px" onclick="clickMatchBtn(this)"
-                            code="${matchTypeMap[i]["code"]}" value="${matchTypeMap[i]["name"]}">`;
-            }else {
-                btnMatchHtml2 += `<input type="button" class="btn btn-default col-md-pull-2" style="margin-left: 10px;margin-top: 10px" onclick="clickMatchBtn2(this)"
-                            code="${matchTypeMap[i]["code"]}" value="${matchTypeMap[i]["name"]}">`;
-            }
-        }
-        $("#btnGroupMatch").append(btnMatchHtml1);
-        $("#btnGroupMatch2").append(btnMatchHtml2);
-        var btnBuyerHtml = "";
-        for (var i in buyerClass) {
-            btnBuyerHtml += `<input type="button" class="btn btn-default col-md-2" style="margin-left: 10px;margin-top: 10px" onclick="clickBuyerBtn(this)"
-                             value="${buyerClass[i]}">`;
-        }
-        $("#btnGroupBuyer").append(btnBuyerHtml);
-
-        var btnTopHtml = "";
-        var btnSubHtml = "";
-        for (var i in scopeClass) {
-            var topId = "top_" + i;
-            btnTopHtml += `<input type="button" id="${topId}" class="btn btn-default btn_top" onclick="btnTopScopeClick(this)" value="${scopeClass[i]["name"]}">`;
-            btnSubHtml += `<div class="btn-group-sub">`;
-            for (var j in scopeClass[i]["child"]) {
-                var sub = scopeClass[i]["child"][j].split("_");
-                btnSubHtml += `<input type="button" class="btn btn-default btn-sub" onclick="btnSubScopeClick(this)" code="${scopeClass[i]["child"][j]}"
-                                index="${i}" value="${sub[1]}">`
-            }
-            btnSubHtml += '</div>'
-        }
-        $("#btnGroupTop").append(btnTopHtml);
-        $("#btnGroupSub").append(btnSubHtml);
-
-        $('#keywords').DataTable({
-            "paging": false,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                this.api().column(0).nodes().each(function (cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null, width: "2%"},
-                {"data": "", width: "1%", render: function() {
-                        return `<input type="checkbox" name="ckb-keyid" onclick="singleSelect(this)" style="text-align: center">`
-                    }},
-                {"data": "s_matchkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_keymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-                {"data": "s_addkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_addkeymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-                {"data": "s_notkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_notkeymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-                {"data": "s_buyerclass", width: "7%", render: function (val) {
-                        if (val == undefined) {
-                            val = ""
-                        }
-                        return val
-                    }},
-                {"data": "s_topscopeclass", width: "5%", render: function (val) {
-                        if (val == undefined) {
-                            val = ""
-                        }
-                        return val
-                    }},
-            ],
-            "columnDefs": [{
-                "targets": [2],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 24) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 24) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }, {
-                "targets": [4],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 24) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 24) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }, {
-                "targets": [6],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 24) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 24) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }]
-        });
-    });
-
-    $('#province').selectpicker({
-        liveSearch: true,
-    });
-    $('#city').selectpicker({
-        liveSearch: true,
-    });
-    $('#district').selectpicker({
-        liveSearch: true,
-    });
-    //全局modal取消按钮
-    function cancelModel() {
-        $('#modal-imp-es').modal("hide");
-        $('#modal-select-match').modal("hide");
-        $('#modal-select-buyer').modal("hide");
-        $('#modal-select-scope').modal("hide");
-        $('#btnGroupMatch').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupMatch2').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupBuyer').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupTop').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupSub').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    //导入es语句modal
-    function importEs() {
-        $("#modal-imp-es").modal("show");
-    }
-    //保存es语句
-    function saveEs() {
-        var esStr = $("#es_json").val();
-        try {
-            if (typeof JSON.parse(esStr) == "object") {
-                $('#modal-imp-es').modal("hide");
-                $('#es_div').show();
-                dataMap["s_esquery"] = esStr;
-                $('#estxt').val(esStr);
-                dataMap["i_esquerytype"] = 2;
-            }
-        } catch (e) {
-            showMsg("json格式有误")
-        }
-    }
-    //关键词/附加词/排除词匹配方式modal
-    function selectKeyMatch(val) {
-        setValue = val;
-        if (setValue == 0 || setValue == 1 || setValue == 13) {
-            matchCode.length = 0;
-            matchName.length = 0;
-            $('#modal-select-match').modal("show");
-        }else {
-            if (selectIndex.length > 0 && keyTableChecked) {
-                matchCode.length = 0;
-                matchName.length = 0;
-                $('#modal-select-match').modal("show");
-            }else {
-                alert("请选中关键词")
-            }
-        }
-    }
-    //匹配方式按钮点击事件
-    function clickMatchBtn(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            matchCode.splice($.inArray($(obj).attr("code"), matchCode), 1);
-            matchName.splice($.inArray($(obj).val(), matchName), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            matchCode.push($(obj).attr("code"));
-            matchName.push($(obj).val())
-        }
-
-        $('#btnGroupMatch2 .btn-default').each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    function clickMatchBtn2(obj) {
-        matchCode.length = 0;
-        matchName.length = 0;
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            matchCode.splice($.inArray($(obj).attr("code"), matchCode), 1);
-            matchName.splice($.inArray($(obj).val(), matchName), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            matchCode.push($(obj).attr("code"));
-            matchName.push($(obj).val())
-            $('#btnGroupMatch2 .btn-default').each(function () {
-                if (this != obj) {
-                    $(this).removeClass("active-btn-match");
-                }
-            });
-        }
-
-        $('#btnGroupMatch .btn-default').each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    //匹配方式保存
-    function saveMatch() {
-        $('#btnGroupMatch').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupMatch2').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        var matchNameStr = "";
-        var codeStr = "";
-        for (var i in matchName) {
-            if (matchNameStr == "") {
-                matchNameStr = matchName[i];
-            }else {
-                matchNameStr += "," + matchName[i]
-            }
-            if (codeStr == "") {
-                codeStr = matchCode[i]
-            }else {
-                codeStr = codeStr + "," + matchCode[i]
-            }
-        }
-        if (setValue == 0) {
-            $('#s_addkeymatch').val(matchNameStr);
-            dataMap["s_globaladdkeymatch"] = codeStr
-        }else if (setValue == 1) {
-            $('#s_notkeymatch').val(matchNameStr);
-            dataMap["s_globalnotkeymatch"] = codeStr
-        }else if (setValue == 13){
-            $('#s_globalclearkeymatch').val(matchNameStr);
-            dataMap["s_globalclearkeymatch"] = codeStr
-        }else {
-            for (var i in selectIndex) {
-                var j = selectIndex[i] - 1;
-                if (setValue == 4) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(3)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_rules[j]["s_keymatch"] = codeStr;
-                    }
-                }else if (setValue == 6) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(5)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_rules[j]["s_addkeymatch"] = codeStr;
-                    }
-                } else if (setValue == 8) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(7)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_rules[j]["s_notkeymatch"] = codeStr;
-                    }
-                }
-            }
-        }
-        $('#modal-select-match').modal("hide");
-        matchName.length = 0;
-        matchCode.length = 0;
-    }
-    //采购单位modal
-    function selectBuyer(val) {
-        setValue = val;
-        if (val == 2) {
-            $('#modal-select-buyer').modal("show");
-        }else {
-            if (keyTableChecked) {
-                $('#modal-select-buyer').modal("show");
-            }else {
-                alert("请选中关键词")
-            }
-        }
-    }
-    //采购单位点击
-    function clickBuyerBtn(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            buyerArr.splice($.inArray($(obj).val(), buyerArr), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            buyerArr.push($(obj).val())
-        }
-    }
-    function saveBuyer() {
-        $('#btnGroupBuyer').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        var buyerStr = "";
-        for (var i in buyerArr) {
-            if ("" === buyerStr) {
-                buyerStr = buyerArr[i];
-            }else {
-                buyerStr += "," + buyerArr[i]
-            }
-        }
-        if (setValue == 2) {
-            $('#s_buyerclass').val(buyerStr);
-            $('#s_buyerclass').attr('title', buyerStr);
-            dataMap["s_globalbuyerclass"] = buyerStr;
-        }else {
-            for (var i in selectIndex) {
-                var j = selectIndex[i] - 1;
-                //采购单位
-                $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(9)").html(buyerStr);
-                o_rules[j]["s_buyerclass"] = buyerStr;
-            }
-        }
-        $('#modal-select-buyer').modal("hide");
-        buyerArr.length = 0;
-    }
-    //公告行业modal
-    function selectScope(val) {
-        setValue = val;
-        if (val == 3) {
-            $('#modal-select-scope').modal("show");
-        }else {
-            if (keyTableChecked) {
-                $('#modal-select-scope').modal("show");
-            }else {
-                alert("请选中关键词")
-            }
-        }
-    }
-    //公告行业一级点击
-    function btnTopScopeClick(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match");
-            scopeTopArr.splice($.inArray($(obj).val(), scopeTopArr), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            scopeTopArr.push($(obj).val())
-        }
-
-        //选择一级行业,取消掉所选择的所有二级行业
-        if (scopeSubArr.length > 0) {
-            $('#btnGroupSub .btn-default').each(function () {
-                $(this).removeClass("active-btn-match");
-            });
-            scopeSubArr.length = 0
-        }
-    }
-    //公告行业二级点击
-    function btnSubScopeClick(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            scopeSubArr.splice($.inArray($(obj).val(), scopeSubArr), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            var topid = "#top_" + $(obj).attr("index");
-            $(topid).removeClass("active-btn-match");
-            scopeSubArr.push($(obj).attr("code"))
-        }
-
-        //选择二级行业,取消掉所选择的所有一级行业
-        if (scopeTopArr.length > 0) {
-            $('#btnGroupTop .btn-default').each(function () {
-                $(this).removeClass("active-btn-match");
-            });
-            scopeTopArr.length = 0
-        }
-    }
-    function saveScope() {
-        $('#btnGroupTop').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupSub').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        var scopeStr = "";
-        var topStr = "";
-        var subStr = "";
-        for (var i in scopeTopArr) {
-            if ("" == scopeStr) {
-                scopeStr = scopeTopArr[i];
-            }else {
-                scopeStr += "," + scopeTopArr[i]
-            }
-            if (topStr == "") {
-                topStr = scopeTopArr[i]
-            } else {
-                topStr = topStr + "," + scopeTopArr[i]
-            }
-        }
-        for (var i in scopeSubArr) {
-            if ("" == scopeStr) {
-                scopeStr = scopeSubArr[i];
-            }else {
-                scopeStr += "," + scopeSubArr[i]
-            }
-            if (subStr == "") {
-                subStr = scopeSubArr[i]
-            } else {
-                subStr = subStr + "," + scopeSubArr[i]
-            }
-        }
-        if (setValue == 3) {
-            $('#s_scopeclass').val(scopeStr);
-            $('#s_scopeclass').attr('title', scopeStr);
-            dataMap["s_globaltopscopeclass"] = topStr;
-            dataMap["s_globalsubscopeclass"] = subStr;
-        }else {
-            for (var i in selectIndex) {
-                var j = selectIndex[i] - 1;
-                $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(10)").html(scopeStr);
-                o_rules[j]["s_topscopeclass"] = topStr;
-                o_rules[j]["s_subscopeclass"] = subStr;
-            }
-        }
-        $('#modal-select-scope').modal("hide");
-        scopeTopArr.length = 0;
-        scopeSubArr.length = 0;
-    }
-    //页面添加附加词、排除词
-    function addkeyWord(rdata) {
-        o_rules = rdata["o_rules"];
-        $('#g_addkey').attr("value", rdata["s_globaladdkey"]);
-        $('#g_notkey').attr("value", rdata["s_globalnotkey"]);
-        $('#s_globalclearkey').attr("value", rdata["s_globalclearkey"]);
-        dataMap["s_globalclearkey"] = rdata["s_globalclearkey"];
-        dataMap["s_globaladdkey"] = rdata["s_globaladdkey"];
-        dataMap["s_globalnotkey"] = rdata["s_globalnotkey"];
-
-        $('#keywords').dataTable().fnClearTable();
-        $('#keywords').dataTable().fnAddData(rdata["o_rules"]);
-
-    }
-    //表格全选
-    function allSelect(obj) {
-        if ($(obj).is(':checked')) {
-            keyTableChecked = true;
-            keyTableAllChecked = true;
-            $('input[name="ckb-keyid"]').each(function () {
-                this.checked = true;
-                selectIndex.push($(this).parents("tr").index() + 1);
-            })
-        }else {
-            selectIndex.length = 0;
-            keyTableChecked = false;
-            keyTableAllChecked = false;
-            $('input[name="ckb-keyid"]').each(function () {
-                this.checked = false;
-            })
-        }
-    }
-    //表格单个选中
-    function singleSelect(obj) {
-        var tag = true;
-        selectIndex.length = 0;
-        $('input[name="ckb-keyid"]').each(function () {
-            if (this.checked) {
-                keyTableChecked = true;
-                selectIndex.push($(this).parents("tr").index() + 1);
-            }else {
-                tag = false
-            }
-        });
-        if (tag) {
-            keyTableAllChecked = true;
-            $('#allCheckbox').prop("checked", true);
-        }else {
-            keyTableAllChecked = false;
-            $('#allCheckbox').prop("checked", false);
-        }
-    }
-    //保存标签
-    function saveTag() {
-        let obj = checkArea(dataMap.s_area, dataMap.s_city, dataMap.s_district);
-        if (!obj.flag) {
-            let msg = "选择的" + obj.v1 + "和" + obj.v2 + "生成es语句时会产生错误,请重新选择其中一个";
-            showMsg(msg);
-            return
-        }
-        //通用规则采购单位行业和关键词中的采购单位行业只能存在一个
-        if (o_rules.length > 0) {
-            let tag = false;
-            for (var i in o_rules) {
-                if (o_rules[i].s_buyerclass) {
-                    tag = true
-                }
-            }
-            if (tag && dataMap.s_globalbuyerclass) {
-                showMsg("保存失败,采购单位行业在通用规则和关键词规则中不能同时存在!")
-                return;
-            }
-        }
-        //关键词、附加词、排除词存在,则必须有相应的匹配方式
-        if (dataMap.s_globaladdkey && !dataMap.s_globaladdkeymatch) {
-            showMsg("保存失败,全局附加词必须有对应的匹配方式!")
-            return;
-        }
-        if (dataMap.s_globalnotkey && !dataMap.s_globalnotkeymatch) {
-            showMsg("保存失败,全局附加词必须有对应的匹配方式!")
-            return;
-        }
-        if (dataMap.s_globalclearkey && !dataMap.s_globalclearkeymatch) {
-            showMsg("保存失败,全局清理词说必须有对应的匹配方式!")
-            return;
-        }
-        if (o_rules.length > 0) {
-            for (const i in o_rules) {
-                if (o_rules[i].s_matchkey && !o_rules[i].s_keymatch) {
-                    showMsg("保存失败,关键词规则中有关键词未对应匹配方式!")
-                    return;
-                }
-                if (o_rules[i].s_addkey && !o_rules[i].s_addkeymatch) {
-                    showMsg("保存失败,关键词规则中有附加词未对应匹配方式!")
-                    return;
-                }
-                if (o_rules[i].s_notkey && !o_rules[i].s_notkeymatch) {
-                    showMsg("保存失败,关键词规则中有排除词未对应匹配方式!")
-                    return;
-                }
-            }
-        }
-        dataMap["s_customer"] = $('#customer').val();
-        dataMap["s_tagname"] = $('#tagname').val();
-        dataMap["s_salesperson"] = $('#salename').val();
-        dataMap["s_serverperson"] = $("#serverperson").val();
-        dataMap["s_customername"] = $("#customername").val();
-        dataMap["s_globaladdkey"] = $('#g_addkey').val();
-        dataMap["s_globalnotkey"] = $('#g_notkey').val();
-        dataMap["s_globalclearkey"] = $('#s_globalclearkey').val();
-        if (dataMap["s_customer"] == "" || dataMap["s_tagname"] == "" || dataMap["s_salesperson"] == "" || dataMap["s_serverperson"] == "") {
-            alert("请填写必须字段!")
-            return
-        }
-        if ($('#starttime').find("input").val() != "") {
-            var start = $('#starttime').find("input").val();
-            start = new Date(start).getTime() / 1000;
-            dataMap["i_starttime"] = start;
-        }
-        if ($('#endtime').find("input").val() != "") {
-            var end = $('#endtime').find("input").val();
-            end = new Date(end).getTime() / 1000;
-            dataMap["i_endtime"] = end;
-        }
-        var budget = "";
-        if ($('#s_budget_min').val() != "") {
-            budget = "大于" + $('#s_budget_min').val()
-        }
-        if ($('#s_budget_max').val() != "") {
-            if (budget == "") {
-                budget = "小于" + $('#s_budget_max').val()
-            }else {
-                budget = budget + ",小于" + $('#s_budget_max').val()
-            }
-        }
-        dataMap["s_budgetlimit"] = budget
-        var bidamount = "";
-        if ($('#s_bidamount_min').val() != "") {
-            bidamount = "大于" + $('#s_bidamount_min').val()
-        }
-        if ($('#s_bidamount_max').val() != "") {
-            if (bidamount == "") {
-                bidamount = "小于" + $('#s_bidamount_max').val()
-            }else {
-                bidamount = bidamount + ",小于" + $('#s_bidamount_max').val()
-            }
-        }
-        dataMap["s_bidamountlimit"] = bidamount
-        if ($('#maxnum').val() !== "") {
-            dataMap["i_maxnum"] = $('#maxnum').val();
-        }
-        if (dataMap.s_globaladdkeymatch.indexOf("1") > -1 || dataMap.s_globaladdkeymatch.indexOf("2") > -1 || dataMap.s_globaladdkeymatch.indexOf("3") > -1 ||
-            dataMap.s_globaladdkeymatch.indexOf("4") > -1 || dataMap.s_globaladdkeymatch.indexOf("5") > -1) {
-            dataMap["i_globaladdkeytype"] = 1
-        }else if (dataMap.s_globaladdkeymatch.indexOf("6") > -1 || dataMap.s_globaladdkeymatch.indexOf("7") > -1 ||
-            dataMap.s_globaladdkeymatch.indexOf("8") > -1 || dataMap.s_globaladdkeymatch.indexOf("9") > -1) {
-            dataMap["i_globaladdkeytype"] = 2
-        }else {
-            dataMap["i_globaladdkeytype"] = 0
-        }
-        if (dataMap.s_globalnotkeymatch.indexOf("1") > -1 || dataMap.s_globalnotkeymatch.indexOf("2") > -1 || dataMap.s_globalnotkeymatch.indexOf("3") > -1 ||
-            dataMap.s_globalnotkeymatch.indexOf("4") > -1 || dataMap.s_globalnotkeymatch.indexOf("5") > -1) {
-            dataMap["i_globalnotkeytype"] = 1
-        }else if (dataMap.s_globalnotkeymatch.indexOf("6") > -1 || dataMap.s_globalnotkeymatch.indexOf("7") > -1 ||
-            dataMap.s_globalnotkeymatch.indexOf("8") > -1 || dataMap.s_globalnotkeymatch.indexOf("9") > -1) {
-            dataMap["i_globalnotkeytype"] = 2
-        }else {
-            dataMap["i_globalnotkeytype"] = 0
-        }
-        dataMap["o_rules"] = JSON.stringify(o_rules);
-        $.ajax({
-            url: "/service/rule/save",
-             type: 'POST',
-             data: dataMap,
-             success: function (r) {
-                 if (r.rep && r.id) {
-                    dataMap["id"]= r.id;
-                    dataMap["s_dataid"] = r.s_dataid;
-                     $('#es_div').show();
-                     $('#estxt').val(r.s_esquery);
-                    state = 2;
-                    showTip("保存成功",1000);
-                 } else {
-                    showTip("保存失败",1000);
-                 }
-             }
-         })
-    }
-
-    //导入标签
-    function importRule() {
-        $("#file").click();
-    }
-    $(function() {
-        $("#uploadform").find("input").change(function () {
-            var val = $(this).val() ? $(this).val() : "";
-            if (val.indexOf(".xlsx") < 0) {
-                showMsg("文件格式非法", function () {
-                });
-            } else {
-                var myform = new FormData();
-                myform.append('xlsx', $("#file")[0].files[0]);
-                $.ajax({
-                    url: "/service/rule/import",
-                    type: 'POST',
-                    data: myform,
-                    async: false,
-                    contentType: false,//不要设置Content-Type请求头
-                    processData: false,// 使数据不做处理
-                    success: function (r) {
-                        if (r.rep) {
-                           // dataMap["id"] = r.id;
-                            addkeyWord(r.rdata);
-                            s_dataid = r.s_dataid;
-                            showTip("导入成功",1000);
-                        } else {
-                            showTip("导入失败",1000);
-                        }
-                    }
-                })
-            }
-        })
-    });
-    //生成数据
-    function produceData() {
-        if (dataMap.id == undefined || dataMap.id == "") {
-            alert("请先保存标签");
-            return
-        }
-        com.maskShow("正在生成数据...");
-        $.ajax({
-            url:"/service/rule/produce",
-            type:"post",
-            data: {"id": dataMap.id},
-            success:function(r){
-                com.maskHide();
-                if(r.rep){
-                    dataMap.i_estotal = r.count
-                    showTip("数据生成成功", 1000);
-                }else{
-                    showTip("数据生成失败",1000);
-                }
-            }
-        })
-    }
-    //预览数据
-    function previewData() {
-        if (state == 2) {
-           myDataTable = $('#previewData').DataTable({
-                "destroy": true,
-                "paging": true,
-                "lengthChange": false,
-                "searching": false,
-                "ordering": false,
-                "info": true,
-                "autoWidth": true,
-                "serverSide": true,
-                "ajax": {
-                    url: "/service/rule/preview",
-                    type: "post",
-                    data: {"s_dataid": dataMap.s_dataid},
-                },
-                "language": {
-                    "url": "/dist/js/dataTables.chinese.lang"
-                },
-                "fnDrawCallback": function () {
-                    $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-                    $('#dataTable-btn').click(function (e) {
-                        var redirectpage = 0;
-                        if ($("#changePage").val() && $("#changePage").val() > 0) {
-                            var redirectpage = $("#changePage").val() - 1;
-                        }
-                        myDataTable.page(redirectpage).draw(false);
-                    });
-                    this.api().column(0).nodes().each(function (cell, i) {
-                        cell.innerHTML = i + 1;
-                    });
-                },
-                "columns": [
-                    {"data": null, width: "2%"},
-                    {"data": function(row) {
-                            if (row.s_matchkey) {
-                                return row.s_matchkey
-                            }else {
-                                return ""
-                            }
-                        }, width: "8%"},
-                    {"data": function(row) {
-                            if (row.area) {
-                                return row.area
-                            }else {
-                                return ""
-                            }
-                        }, width: "4%"},
-                    {"data": function(row) {
-                            if (row.city) {
-                                return row.city
-                            }else {
-                                return ""
-                            }
-                        }, width: "4%"},
-                    {"data": function (row) {
-                            if (row.s_jyhref) {
-                                tmp = '<a class="" target="_blank" href='+row.s_jyhref+'>'+row.title+'</a>';
-                                return tmp
-                            }else {
-                                return row.title
-                            }
-                        }, width: "5%"},
-                    {"data": function(row) {
-                            if (row.subtype) {
-                                return row.subtype
-                            }else {
-                                return ""
-                            }
-                        }, width: "4%"},
-                    {"data": function (row) {
-                            var str = com.trimStr(row.detail);
-                            if (str.length > 14) {
-                                return str.substring(0, 14) + "..."
-                            }else {
-                                return str
-                            }
-                        }, width: "5%"},
-                    {"data": function(row) {
-                            var dt = new Date();
-                            dt.setTime(parseInt(row.publishtime)*1000);
-                            return dt.format("yyyy-MM-dd")
-                        }, width: "4%"},
-                    {"data": function (row) {
-                            if (row.href) {
-                                var shref = row.href;
-                                tmp = '<a class="" target="_blank" href='+shref+'>公告地址</a>';
-                                return tmp
-                            }else {
-                                return ""
-                            }
-                        }, width: "5%"},
-                    {"data": function (row) {
-                            if (row.projectscope) {
-                                if (row.projectscope.length > 14) {
-                                    return row.projectscope.substring(0, 14) + "..."
-                                } else {
-                                    return row.projectscope
-                                }
-                            }
-                            return ""
-                        }, width: "5%"},
-                    {"data": "projectname", width: "5%"},
-                    {"data": function (row) {
-                            if (row.projectscope) {
-                                return row.projectscope
-                            }
-                            return ""
-                        }, width: "3%"},
-                    {"data": function (row) {
-                            if (row.budget == undefined) {
-                                return ""
-                            }else {
-                                return row.budget
-                            }
-                        }, width: "3%"},
-                    {"data": function (row) {
-                            if (row.bidamount == undefined) {
-                                return ""
-                            }else {
-                                return row.bidamount
-                            }
-                        }, width: "3%"},
-                    {"data": "bidopentime", width: "3%", render: function (val) {
-                            if (val) {
-                                var dt = new Date();
-                                dt.setTime(parseInt(val)*1000);
-                                return dt.format("yyyy-MM-dd")
-                            }else {
-                                return ""
-                            }
-                        }},
-                    {"data": "buyer", width: "3%", render: function (val) {
-                            if (val == undefined) {
-                                val = ""
-                            }
-                            return val
-                        }},
-                    {"data": function (row) {
-                            if (row.buyerperson) {
-                                return row.buyerperson
-                            }else {
-                                return ""
-                            }
-                        }, width: "4%"},
-                    {"data": function (row) {
-                            if (row.buyertel) {
-                                return row.buyertel
-                            }else {
-                                return ""
-                            }
-                        }, width: "4%"},
-                    {"data": "agency", width: "5%", render: function (val) {
-                            if (val == undefined) {
-                                val = ""
-                            }
-                            return val
-                        }},
-                    {"data": "winner", width: "3%", render: function (val) {
-                            if (val == undefined) {
-                                val = ""
-                            }
-                            return val
-                        }},
-                    {"data": function (row) {
-                            if (row.winnerperson) {
-                                return row.winnerperson
-                            }else {
-                                return ""
-                            }
-                        }, width: "4%"},
-                    {"data": function (row) {
-                            if (row.winnertel) {
-                                return row.winnertel
-                            }else {
-                                return ""
-                            }
-                        }, width: "4%"},
-                    {"data": function (row) {
-                            if (row.legal_person) {
-                                return row.legal_person
-                            }else {
-                                return ""
-                            }
-                        }, width: "4%"},
-                    {"data": function (row) {
-                            if (row.company_phone) {
-                                return row.company_phone
-                            }else {
-                                return ""
-                            }
-                        }, width: "4%"},
-                    {"data": function (row) {
-                            if (row.company_email) {
-                                return row.company_email
-                            }else {
-                                return ""
-                            }
-                        }, width: "4%"},
-                ]
-            });
-            $('#modal-preview').modal("show");
-            if (dataMap.i_extfieldstype == 1) {
-                var str = "标准字段包 " + dataMap.i_maxnum + "/" + dataMap.i_estotal;
-                $('#dataCount').html(str)
-            } else {
-                var str = "高级字段包 " + dataMap.i_maxnum + "/" + dataMap.i_estotal;
-                $('#dataCount').html(str)
-            }
-        }else {
-            alert("请先保存标签");
-        }
-    }
-    
-    //下载es
-    function downloades(){
-      if(state==1){
-        alert("请先保存标签")
-      }else{
-        $("#download").attr("href","/service/rule/exportes?id="+dataMap["id"])
-      }
-    }
-    
-    //存档
-    function archive(){
-      if(state == 1){
-        alert("请先保存标签");
-        return
-      }else{
-        showConfirm("是否存档?", function() {
-          $.ajax({
-              url:"/service/rule/archive",
-              type:"post",
-              data:{"_id":dataMap["id"]},
-              success:function(r){
-                if(r.rep){
-                  showTip("存档成功",1000);
-                  //ttable.ajax.reload();
-                }else{
-                  showTip("存档失败",1000);
-                }
-              }
-          })
-        });
-      }
-    }
-
-    var key_flag = -1;      // 0:新增,1:修改
-    //关键词表格新增
-    function add_Rule() {
-        key_flag = 0;
-        $('#keyword_txt').val("");
-        $('#addword_txt').val("");
-        $('#notword_txt').val("");
-        $('#modal-add-keyword').modal("show");
-    }
-    //关键词修改
-    function modify_Rule(){
-        if (selectIndex.length == 1) {
-            key_flag = 1;
-            var index = selectIndex[0] - 1;
-            $('#modal-add-keyword').modal("show");
-            $('#keyword_txt').val(o_rules[index].s_matchkey);
-            $('#addword_txt').val(o_rules[index].s_addkey);
-            $('#notword_txt').val(o_rules[index].s_notkey);
-        }else {
-            showTip("请选中需要修改的关键词,且只能选中一条", 1000)
-        }
-
-    }
-    function saveKeyword() {
-        var key = $('#keyword_txt').val();
-        var addkey = $('#addword_txt').val();
-        var notkey = $('#notword_txt').val();
-        if (key != "") {
-            var rule = {};
-            rule["s_matchkey"] = key.replace(",", ",");
-            if (addkey != "") rule["s_addkey"] = addkey.replace(",", ",");
-            if (notkey != "") rule["s_notkey"] = notkey.replace(",", ",");
-            $('#modal-add-keyword').modal('hide');
-            if (key_flag == 1) {
-                var index = selectIndex[0] - 1;
-                o_rules.splice(index, 1, rule)
-            }else {
-                o_rules.push(rule)
-            }
-            $('#keywords').dataTable().fnClearTable();
-            $('#keywords').dataTable().fnAddData(o_rules);
-        }else {
-            showTip("关键词不能为空", 500)
-        }
-    }
-    //关键词删除
-    function del_Rule() {
-        if (keyTableChecked && selectIndex.length > 0) {
-            showConfirm("确定删除?", function() {
-                var tmp = []
-                for (var i in selectIndex) {
-                    var j = selectIndex[i] - 1;
-                    tmp.push(j)
-                }
-                o_rules = deleteArrayVal(o_rules, tmp)
-                $('#keywords').dataTable().fnClearTable();
-                $('#keywords').dataTable().fnAddData(o_rules);
-
-                keyTableChecked = false;
-                if (o_rules.length == 0) {
-                    $('#allCheckbox').prop("checked", false);
-                    $('#keywords').dataTable().fnClearTable();
-                }
-            })
-        }else {
-            showTip("请选中需要删除的关键词", 500)
-        }
-    }
-
-    function checkArea(area, city, district) {
-        let flag = true;
-        let v1 = "";
-        let v2 = ""
-        if (area == "" && city == "" && district == "") {
-            flag = true
-        }
-        if (city != "" && area != "") {
-            var areaArr = area.split(",");
-            var cityArr = city.split(",");
-            for (var i in areaArr) {
-                if (cityMap[areaArr[i]] != undefined) {
-                    for (var j in cityArr) {
-                        if ($.inArray(cityArr[j], cityMap[areaArr[i]]) > -1) {
-                            flag = false;
-                            v1 = areaArr[i];
-                            v2 = cityArr[j]
-                        }
-                    }
-                }
-            }
-            return {flag: flag, v1: v1, v2: v2}
-        }
-        if (city != "" && district != "") {
-            var cityArr = city.split(",");
-            var districtArr = district.split(",");
-            for (var i in cityArr) {
-                if (districtMap[cityArr[i]] != undefined) {
-                    for (var j in districtArr) {
-                        let dis = districtArr[j].split("-")[1];
-                        if ($.inArray(dis, districtMap[cityArr[i]]) > -1) {
-                            flag = false;
-                            v1 = cityArr[i];
-                            v2 = districtArr[j]
-                        }
-                    }
-                }
-            }
-            return {flag: flag, v1: v1, v2: v2}
-        }
-        return {flag: flag, v1: v1, v2: v2}
-    }
-</script>

+ 0 - 1708
src/web/templates/private/rule_edit.html

@@ -1,1708 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-{{include "com/modal.html"}}
-<script src="/time/js/angular.min.js"></script>
-<script src="/time/js/wui-date.js"></script>
-<div class="content-wrapper">
-    <section class="content-header">
-        <h1>编辑标签
-            <small>
-                <button class="btn btn-warning btn-sm" onclick="importcomrule()"><i class="fa fa-fw fa-upload fa-lg"></i>导入通用标签</button>
-                <button class="btn btn-primary btn-sm" onclick="importRule()"><i class="fa fa-fw fa-cloud-upload fa-lg"></i>导入关键词</button>
-                <form style="display:none" id='uploadform' method='post'>
-                    <input type='file' name='xlsx' id='file'/>
-                </form>
-                <button class="btn btn-info btn-sm" onclick="importEs()"><i class="fa fa-fw fa-cloud-upload fa-lg"></i>导入es
-                </button>
-                <a class="btn btn-sm btn-success" id="download" onclick="downloades()"><i
-                            class="fa fa-fw fa-cloud-download fa-lg"></i>下载es</a>
-                <a class="btn btn-sm btn-instagram" onclick="produceData()"><i class="fa fa-fw fa-database fa-lg"></i>生成数据</a>
-                <button class="btn btn-warning btn-sm" onclick="previewData()"><i class="fa fa-fw fa-eye fa-lg"></i>预览
-                </button>
-                <button class="btn btn-danger btn-sm" onclick="archive()"><i class="fa fa-fw fa-save fa-lg"></i>存档
-                </button>
-            </small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/rule/list">私有标签列表</a></li>
-            <li><a href="#">编辑私有标签</a></li>
-        </ol>
-    </section>
-    <!-- Main content -->
-    <section class="content">
-        <div class="tab-content">
-            <div class="nav-tabs-custom">
-                <ul class="nav nav-tabs edit-step">
-                    <li class="active" data-mode="guide"><a href="#tab_1" data-toggle="tab" aria-expanded="true">通用规则</a></li>
-                    <li data-mode="guide" class=""><a href="#tab_2" data-toggle="tab" aria-expanded="false">关键词规则</a></li>
-                    <button class="btn btn-primary btn-sm" style="float: right;margin-top: 4px;margin-right: 10px"
-                            onclick="saveTag()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存标签
-                    </button>
-                </ul>
-                <div class="tab-content">
-                    <div class="tab-pane active" id="tab_1">
-                        <form class="form-horizontal">
-                            <div class="box box-primary">
-                                <div class="box-header with-border">
-                                    <i class="fa fa-tag"></i>
-                                    <h3 class="box-title">通用规则</h3>
-                                </div>
-                                <div class="box-body">
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>客户名称</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="customer"
-                                                   placeholder="客户名称" value="{{.T.data.s_customer}}">
-                                        </div>
-                                        <label class="col-sm-2 control-label">客户联系人</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="customername" placeholder="客户联系人姓名"
-                                                   value="{{.T.data.s_customername}}">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>销售经理</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="salename" placeholder="销售经理"
-                                                   value="{{.T.data.s_salesperson}}">
-                                        </div>
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>售前支持</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="serverperson" placeholder="售前支持人员"
-                                                   value="{{.T.data.s_serverperson}}">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>标签名称</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="tagname" placeholder="标签名称"
-                                                   value="{{.T.data.s_tagname}}">
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">选择省</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple data-live-search="true"
-                                                    id="province"></select>
-                                            <script>
-                                                $('#province').on('hide.bs.select', function () {
-                                                    var arr = $('#province').val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    dataMap["s_area"] = arrStr
-                                                })
-                                            </script>
-                                        </div>
-                                        <label class="col-sm-2 control-label">选择市</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple data-live-search="true"
-                                                    id="city"></select>
-                                            <script>
-                                                $('#city').on('hide.bs.select', function () {
-                                                    var arr = $('#city').val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    dataMap["s_city"] = arrStr
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">选择区/县</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple data-live-search="true"
-                                                    id="district"></select>
-                                            <script>
-                                                $('#district').on('hide.bs.select', function () {
-                                                    var arrStr = "";
-                                                    $('#district option:selected').each(function () {
-                                                        if (arrStr === "") {
-                                                            arrStr = $(this).val()
-                                                        } else {
-                                                            arrStr = arrStr + "," + $(this).val()
-                                                        }
-                                                    });
-                                                    dataMap["s_district"] = arrStr
-                                                })
-
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">公告类别</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" id="typeSelect">
-                                                <option selected:disabled style="diaplay:none" value=0>请选择</option>
-                                                <option value=1>一级公告类别</option>
-                                                <option value=2>二级公告类别</option>
-                                            </select>
-                                            <script>
-                                                $('#typeSelect').on('changed.bs.select', function () {
-                                                    $("#typeSelectVal").selectpicker("deselectAll");
-                                                    $("#typeSelectVal").empty();
-                                                    if ($(this).val() == 1) {
-                                                        for (var i in topTypeArr) {
-                                                            var opt = document.createElement('option');
-                                                            opt.innerText = topTypeArr[i];
-                                                            opt.value = topTypeArr[i];
-                                                            $('#typeSelectVal')[0].appendChild(opt)
-                                                        }
-                                                    }else if ($(this).val() == 2) {
-                                                        for (var i in subTypeArr) {
-                                                            var opt = document.createElement('option');
-                                                            opt.innerText = subTypeArr[i];
-                                                            opt.value = subTypeArr[i];
-                                                            $('#typeSelectVal')[0].appendChild(opt)
-                                                        }
-                                                    }
-                                                    $("#typeSelectVal").selectpicker("refresh");
-                                                })
-                                            </script>
-                                        </div>
-                                        <label class="col-sm-2 control-label">公告类别选择</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple id="typeSelectVal"></select>
-                                            <script>
-                                                $('#typeSelectVal').on('show.bs.select', function () {
-                                                    if ($('#typeSelect').val() == 0) {
-                                                        showTip("请选择公告类别", 500)
-                                                    }
-                                                })
-                                                $('#typeSelectVal').on('hide.bs.select', function () {
-                                                    var arr = $(this).val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    if ($('#typeSelect').val() == 1) {
-                                                        dataMap["s_toptype"] = arrStr;
-                                                        dataMap["s_subtype"] = "";
-                                                    }else {
-                                                        dataMap["s_toptype"] = "";
-                                                        dataMap["s_subtype"] = arrStr;
-                                                    }
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label ">开始时间</label>
-                                        <div class="col-sm-3">
-                                            <div class="wui-content">
-                                                <div class="wui-area" id="starttime">
-                                                    <wui-date
-                                                            format="yyyy-mm-dd hh:mm:ss"
-                                                            placeholder="请选择或输入开始日期"
-                                                            id="date4"
-                                                            btns="{'ok':'确定','now':'此刻'}"
-                                                            ng-model="date4">
-                                                    </wui-date>
-                                                </div>
-                                            </div>
-                                        </div>
-                                        <label class="col-sm-2 control-label ">结束时间</label>
-                                        <div class="col-sm-3">
-                                            <div class="wui-content">
-                                                <div class="wui-area" id="endtime">
-                                                    <wui-date
-                                                            format="yyyy-mm-dd hh:mm:ss"
-                                                            placeholder="请选择或输入结束日期"
-                                                            id="date4"
-                                                            btns="{'ok':'确定','now':'此刻'}"
-                                                            ng-model="date5">
-                                                    </wui-date>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">选择字段</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple id="existFieldSelect"
-                                                    data-actions-box="true"></select>
-                                            <script>
-                                                $('#existFieldSelect').on('hide.bs.select', function () {
-                                                    var arr = $(this).val();
-                                                    var arrStr = "";
-                                                    for (var i in arr) {
-                                                        if (arrStr === "") {
-                                                            arrStr = arr[i]
-                                                        } else {
-                                                            arrStr = arrStr + "," + arr[i]
-                                                        }
-                                                    }
-                                                    dataMap["s_existfields"] = arrStr
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">预算限制</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" type="text" id="s_budget_min" placeholder="单位:元/大于" onkeyup="limitNum(this)">
-                                        </div>
-                                        <label class="col-sm-2" style="text-align: center">___ ___</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" type="text" id="s_budget_max" placeholder="单位:元/小于" onkeyup="limitNum(this)">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">中标金额限制</label>
-                                        <div class="col-sm-3" id="bidamountDiv">
-                                            <input class="form-control" type="text" id="s_bidamount_min" placeholder="单位:元/大于" onkeyup="limitNum(this)">
-                                        </div>
-                                        <label class="col-sm-2" style="text-align: center">___ ___</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" type="text" id="s_bidamount_max" placeholder="单位:元/小于" onkeyup="limitNum(this)">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">全局附加词</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="g_addkey"
-                                                   value="{{.T.data.s_globaladdkey}}">
-                                        </div>
-                                        <label class="col-sm-2 control-label">匹配方式</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_addkeymatch" onclick="selectKeyMatch(0)">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label for="spiderChannel" class="col-sm-2 control-label">全局排除词</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="g_notkey"
-                                                   value="{{.T.data.s_globalnotkey}}">
-                                        </div>
-                                        <label class="col-sm-2 control-label">匹配方式</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_notkeymatch" onclick="selectKeyMatch(1)">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">全局清理词</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="s_globalclearkey" placeholder="***"
-                                                   value={{.T.data.s_globalclearkey}}>
-                                        </div>
-                                        <label class="col-sm-2 control-label">匹配方式</label>
-                                         <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_globalclearkeymatch" onclick="selectKeyMatch(13)">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">采购单位行业</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_buyerclass" onclick="selectBuyer(2)" value="{{.T.data.s_globalbuyerclass}}">
-                                        </div>
-                                        <label class="col-sm-2 control-label">公告行业</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_scopeclass" onclick="selectScope(3)">
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">预览数据量</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="maxnum"
-                                                   value="{{.T.data.i_maxnum}}">
-                                        </div>
-                                        <label class="col-sm-2 control-label ">高级字段包</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control" id="extfiledselect" style="border-radius:3px">
-                                                <option value="1">否</option>
-                                                <option value="2">是</option>
-                                            </select>
-                                            <script>
-                                                $('#extfiledselect').on("change", function () {
-                                                    dataMap["i_extfieldstype"] = $('#extfiledselect option:selected').val();
-                                                })
-                                            </script>
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div id="es_div" class="form-group">
-                                        <label class="col-sm-2 control-label">ES语句</label>
-                                        <div class="col-sm-8">
-                                            <textarea class="form-control" id="estxt" readonly></textarea>
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                        </form>
-                    </div>
-                    <div class="tab-pane" id="tab_2">
-                        <div class="box box-primary">
-                            <div class="box-header with-border">
-                                <i class="fa fa-bookmark"></i>
-                                <h3 class="box-title">关键词规则</h3>
-                                <div style="float: right">
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(4)">关键词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(6)">附加词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(8)">排除词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectBuyer(9)">采购单位行业</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectScope(10)">公告行业</a>
-                                </div>
-                            </div>
-                            <table id="keywords" class="table table-bordered">
-                                <thead>
-                                <div style="margin: 10px 10px 0px;">
-                                    <a class="btn btn-twitter" onclick="add_Rule()">新增</a>
-                                    <a class="btn btn-twitter" onclick="modify_Rule()">修改</a>
-                                    <a class="btn btn-twitter" onclick="del_Rule()">删除</a>
-                                </div>
-                                <tr>
-                                    <th>编号</th>
-                                    <th><input type="checkbox" onclick="allSelect(this)" id="allCheckbox"></th>
-                                    <th>关键词</th>
-                                    <th>匹配方式</th>
-                                    <th>附加词</th>
-                                    <th>匹配方式</th>
-                                    <th>排除词</th>
-                                    <th>匹配方式</th>
-                                    <th>采购单位行业</th>
-                                    <th>公告行业</th>
-                                </tr>
-                                </thead>
-                            </table>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </section>
-</div>
-
-{{include "com/footer.html"}}
-<script>
-    menuActive("/service/rule/list");
-    var clearkeyMatchArr = ["detail","title"];
-    var dataMap = {{.T.data}};
-    var o_rules = {{.T.data.o_rules}};
-    var app = angular.module('app', ["wui.date"]);       //时间插件
-    var province = {{.T.province}};
-    var cityMap = {{.T.city}};
-    var districtMap = {{.T.district}};
-    var topTypeArr = {{.T.topTypeArr}};
-    var subTypeArr = {{.T.subTypeArr}};
-    var matchTypeMap = {{.T.matchTypeMap}};
-    var matchTypeMap2 = {{.T.matchTypeMap2}};
-    var existField = {{.T.existField}};
-    var buyerClass = {{.T.buyerClass}};
-    var scopeClass = {{.T.scopeClass}};
-
-    var matchCode = [];     //匹配方式code
-    var matchName = [];     //匹配名字
-    var buyerArr = [];      //采购单位
-    var scopeTopArr = [];       //公告行业一级
-    var scopeSubArr = [];       //公告行业二级
-
-    var keyTableChecked = false;        //关键词表格数据是否有选中
-    var keyTableAllChecked = true;      //表单数据是否被全选中
-    var selectIndex = [];               //选中的编号
-    var setValue = 0;                   // 4: 关键词匹配方式,6:附加词匹配方式,8:排除词匹配方式,9:采购单位,10:公告行业, 2:全局采购单位行业, 3:全局公告行业
-    var state = 1;
-    $(document).ready(function () {
-        var name1 = {{(session "user").name}};
-        if (name1 != dataMap.s_updateuser) {
-            showTip("上次修改人员是" + dataMap.s_updateuser, 1000)
-        }
-        $('#extfiledselect').val(dataMap.i_extfieldstype);
-        //es
-        $('#estxt').val(dataMap.s_esquery);
-        //预算限制
-        if (dataMap.s_budgetlimit && dataMap.s_budgetlimit != "") {
-            if (dataMap.s_budgetlimit.indexOf("大于") != -1 && dataMap.s_budgetlimit.indexOf("小于") != -1) {
-                var arr = dataMap.s_budgetlimit.split(",");
-                $('#s_budget_min').val(arr[0].replace("大于", ""));
-                $('#s_budget_max').val(arr[1].replace("小于", ""))
-            }else if (dataMap.s_budgetlimit.indexOf("大于") != -1) {
-                $('#s_budget_min').val(dataMap.s_budgetlimit.replace("大于", ""))
-            }else if (dataMap.s_budgetlimit.indexOf("小于") != -1) {
-                $('#s_budget_max').val(dataMap.s_budgetlimit.replace("小于", ""))
-            }
-        }
-        //中标金额限制
-        if (dataMap.s_bidamountlimit && dataMap.s_bidamountlimit != "") {
-            if (dataMap.s_bidamountlimit.indexOf("大于") != -1 && dataMap.s_bidamountlimit.indexOf("小于") != -1) {
-                var arr = dataMap.s_bidamountlimit.split(",");
-                $('#s_bidamount_min').val(arr[0].replace("大于", ""));
-                $('#s_bidamount_max').val(arr[1].replace("小于", ""))
-            }else if (dataMap.s_bidamountlimit.indexOf("大于") != -1) {
-                $('#s_bidamount_min').val(dataMap.s_bidamountlimit.replace("大于", ""))
-            }else if (dataMap.s_bidamountlimit.indexOf("小于") != -1) {
-                $('#s_bidamount_max').val(dataMap.s_bidamountlimit.replace("小于", ""))
-            }
-        }
-        //起始时间
-        if (dataMap.i_starttime != 0) {
-            var dt = new Date();
-            dt.setTime(parseInt(dataMap.i_starttime) * 1000);
-            $('#starttime').find("input").val(dt.format("yyyy-MM-dd hh:mm:ss"));
-        }
-        //结束时间
-        if (dataMap.i_endtime != 0) {
-            var dt = new Date();
-            dt.setTime(parseInt(dataMap.i_endtime) * 1000);
-            $('#endtime').find("input").val(dt.format("yyyy-MM-dd hh:mm:ss"));
-        }
-        //公告行业
-        $('#s_scopeclass').val(dataMap.s_globalsubscopeclass)
-        if (dataMap.s_globaltopscopeclass && dataMap.s_globalsubscopeclass && dataMap.s_globaltopscopeclass != "" && dataMap.s_globalsubscopeclass != "") {
-            $('#s_scopeclass').val(dataMap.s_globaltopscopeclass+","+dataMap.s_globalsubscopeclass)
-        }else if (dataMap.s_globaltopscopeclass && dataMap.s_globaltopscopeclass != "") {
-            $('#s_scopeclass').val(dataMap.s_globaltopscopeclass)
-        }else if (dataMap.s_globalsubscopeclass && dataMap.s_globalsubscopeclass != "") {
-            $('#s_scopeclass').val(dataMap.s_globalsubscopeclass)
-        }
-        //省
-        for (var i in province) {
-            var provOpt = document.createElement('option');
-            provOpt.innerText = province[i];
-            provOpt.value = province[i];
-            if (dataMap.s_area.indexOf(province[i]) != -1) {
-                provOpt.selected = true
-            }
-            $("#province")[0].appendChild(provOpt);
-        }
-        var optHtml = "";
-        var optGroup = "";
-        //city,district
-        for (var i in districtMap) {
-            var opt = document.createElement('option');
-            opt.innerText = i;
-            opt.value = i;
-            if (dataMap.s_city.indexOf(i) != -1) {
-                opt.selected = true
-            }
-            $("#city")[0].appendChild(opt);
-            optGroup += '<optgroup label="' + i + '" value="' + i + '">';
-            for (var j in districtMap[i]) {
-                if (dataMap.s_district.indexOf(districtMap[i][j]) != -1) {
-                    optGroup += '<option selected value="' + i + "-" + districtMap[i][j] + '">' + districtMap[i][j] + '</option>';
-                } else {
-                    optGroup += '<option value="' + i + "-" + districtMap[i][j] + '">' + districtMap[i][j] + '</option>';
-                }
-            }
-            optGroup += `</optgroup>`;
-        }
-        optHtml += optGroup;
-        $("#district").append(optHtml);
-
-        $("#province").selectpicker("refresh");
-        $("#city").selectpicker("refresh");
-        $("#district").selectpicker("refresh");
-        if (dataMap.s_toptype != "") {
-            $("#typeSelect").val(1);
-            for (var i in topTypeArr) {
-                var opt = document.createElement('option');
-                opt.innerText = topTypeArr[i];
-                opt.value = topTypeArr[i];
-                if (dataMap.s_toptype.indexOf(topTypeArr[i]) > -1) {
-                    opt.selected = true
-                }
-                $('#typeSelectVal')[0].appendChild(opt)
-            }
-            $("#typeSelectVal").selectpicker("refresh");
-        }
-        if (dataMap.s_subtype != "") {
-            $("#typeSelect").val(2);
-            for (var i in subTypeArr) {
-                var opt = document.createElement('option');
-                opt.innerText = subTypeArr[i];
-                opt.value = subTypeArr[i];
-                if (dataMap.s_subtype.indexOf(subTypeArr[i]) > -1) {
-                    opt.selected = true
-                }
-                $('#typeSelectVal')[0].appendChild(opt)
-            }
-            $("#typeSelectVal").selectpicker("refresh");
-        }
-
-        //选择字段
-        for (var i in existField) {
-            var opt = document.createElement('option');
-            opt.innerText = existField[i]["name"];
-            opt.value = existField[i]["code"];
-            if (dataMap.s_existfields && dataMap.s_existfields.indexOf(existField[i]["code"]) != -1) {
-                opt.selected = true
-            }
-            $('#existFieldSelect')[0].appendChild(opt)
-        }
-        $("#infoType").selectpicker("refresh");
-        $("#existFieldSelect").selectpicker("refresh");
-
-        //匹配方式
-        var btnMatchHtml1 = "";
-        var btnMatchHtml2 = "";
-        var addMatchName = "";
-        var notMatchName = "";
-        var clearMatchName = "";
-        for (var i in matchTypeMap) {
-            if (i < 5) {
-                btnMatchHtml1 += `<input type="button" class="btn btn-default col-md-pull-2" style="margin-left: 10px;margin-top: 10px" onclick="clickMatchBtn(this)"
-                            code="${matchTypeMap[i]["code"]}" value="${matchTypeMap[i]["name"]}">`;
-            }else {
-                btnMatchHtml2 += `<input type="button" class="btn btn-default col-md-pull-2" style="margin-left: 10px;margin-top: 10px" onclick="clickMatchBtn2(this)"
-                            code="${matchTypeMap[i]["code"]}" value="${matchTypeMap[i]["name"]}">`;
-            }
-            if (dataMap.s_globaladdkeymatch.indexOf(matchTypeMap[i]["code"]) > -1) {
-                if (addMatchName == "") {
-                    addMatchName = matchTypeMap[i]["name"]
-                }else {
-                    addMatchName = addMatchName + "," + matchTypeMap[i]["name"]
-                }
-            }
-            if (dataMap.s_globalnotkeymatch.indexOf(matchTypeMap[i]["code"]) > -1) {
-                if (notMatchName == "") {
-                    notMatchName = matchTypeMap[i]["name"]
-                }else {
-                    notMatchName = notMatchName + "," + matchTypeMap[i]["name"]
-                }
-            }
-            //清理词匹配方式界面展示赋值
-            if (dataMap.s_globalclearkeymatch && dataMap.s_globalclearkeymatch.indexOf(matchTypeMap[i]["code"]) > -1) {
-                if (clearMatchName == "") {
-                    clearMatchName = matchTypeMap[i]["name"]
-                }else {
-                    clearMatchName = clearMatchName + "," + matchTypeMap[i]["name"]
-                }
-            }
-        }
-        $("#btnGroupMatch").append(btnMatchHtml1);
-        $("#btnGroupMatch2").append(btnMatchHtml2);
-        if (addMatchName != "") $('#s_addkeymatch').val(addMatchName);
-        if (notMatchName != "") $('#s_notkeymatch').val(notMatchName);
-        if (clearMatchName != "") $('#s_globalclearkeymatch').val(clearMatchName);
-        var btnBuyerHtml = "";
-        for (var i in buyerClass) {
-            btnBuyerHtml += `<input type="button" class="btn btn-default col-md-2" style="margin-left: 10px;margin-top: 10px" onclick="clickBuyerBtn(this)"
-                             value="${buyerClass[i]}">`;
-        }
-        $("#btnGroupBuyer").append(btnBuyerHtml);
-
-        var btnTopHtml = "";
-        var btnSubHtml = "";
-        for (var i in scopeClass) {
-            var topId = "top_" + i;
-            btnTopHtml += `<input type="button" id="${topId}" class="btn btn-default btn_top" onclick="btnTopScopeClick(this)" value="${scopeClass[i]["name"]}">`;
-            btnSubHtml += `<div class="btn-group-sub">`;
-            for (var j in scopeClass[i]["child"]) {
-                var sub = scopeClass[i]["child"][j].split("_");
-                btnSubHtml += `<input type="button" class="btn btn-default btn-sub" onclick="btnSubScopeClick(this)" code="${scopeClass[i]["child"][j]}"
-                                index="${i}" value="${sub[1]}">`
-            }
-            btnSubHtml += '</div>'
-        }
-        $("#btnGroupTop").append(btnTopHtml);
-        $("#btnGroupSub").append(btnSubHtml);
-        //关键词表格
-        $('#keywords').DataTable({
-            "paging": false,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                this.api().column(0).nodes().each(function (cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "data": dataMap.o_rules,
-            "columns": [
-                {"data": null, width: "2%"},
-                {"data": "", width: "1%", render: function() {
-                        return `<input type="checkbox" name="ckb-keyid" onclick="singleSelect(this)" style="text-align: center">`
-                    }},
-                {"data": "s_matchkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_keymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-                {"data": "s_addkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_addkeymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-                {"data": "s_notkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_notkeymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-                {"data": "s_buyerclass", width: "7%", render: function (val) {
-                        if (val == undefined) {
-                            val = ""
-                        }
-                        return val
-                    }},
-                {"data": function (row) {
-                        var str = "";
-                        if (row.s_topscopeclass) {
-                            str = row.s_topscopeclass
-                        }
-                        if (row.s_subscopeclass) {
-                            if (str != "") {
-                                str = str + "," + row.s_subscopeclass
-                            }else {
-                                str = row.s_subscopeclass
-                            }
-                        }
-                        return str
-                    }, width: "5%"},
-            ],
-            "columnDefs": [{
-                "targets": [2],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 24) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 24) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }, {
-                "targets": [4],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 24) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 24) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }, {
-                "targets": [6],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 24) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 24) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }]
-        });
-    });
-
-    $('#province').selectpicker({
-        liveSearch: true,
-    });
-    $('#city').selectpicker({
-        liveSearch: true,
-    });
-    $('#district').selectpicker({
-        liveSearch: true,
-    });
-
-    //全局modal取消按钮
-    function cancelModel() {
-        $('#modal-imp-es').modal("hide");
-        $('#modal-select-match').modal("hide");
-        $('#modal-select-buyer').modal("hide");
-        $('#modal-select-scope').modal("hide");
-        $('#btnGroupMatch').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupMatch2').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupBuyer').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupTop').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupSub').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    //导入es语句modal
-    function importEs() {
-        $("#modal-imp-es").modal("show");
-    }
-    //保存es语句
-    function saveEs() {
-        var esStr = $("#es_json").val();
-        try {
-            if (typeof JSON.parse(esStr) == "object") {
-                $('#modal-imp-es').modal("hide");
-                $('#es_div').show();
-                dataMap["s_esquery"] = esStr;
-                $('#estxt').val(esStr);
-                dataMap["i_esquerytype"] = 2;
-            }
-        } catch (e) {
-            showMsg("json格式有误")
-        }
-    }
-    //选择公告类别
-    function selectType(obj) {
-        var val = obj.options[obj.selectedIndex].value;
-        $('#infoType').empty();
-        if (val === "1") {
-            for (var i in topTypeArr) {
-                var typeOpt = document.createElement('option');
-                typeOpt.innerText = topTypeArr[i];
-                typeOpt.value = topTypeArr[i];
-                $('#infoType')[0].appendChild(typeOpt)
-            }
-        } else {
-            for (var i in subTypeArr) {
-                var opt = document.createElement('option');
-                opt.innerText = subTypeArr[i];
-                opt.value = subTypeArr[i];
-                $('#infoType')[0].appendChild(opt);
-            }
-        }
-        $('#infoType').selectpicker("deselectAll")
-        $('#infoType').selectpicker("refresh");
-    }
-    //关键词/附加词/排除词匹配方式modal
-    function selectKeyMatch(val) {
-        setValue = val;
-        if (setValue == 0 || setValue == 1 || setValue == 13) {
-            matchCode.length = 0;
-            matchName.length = 0;
-            $('#modal-select-match').modal("show");
-        }else {
-            if (selectIndex.length > 0 && keyTableChecked) {
-                matchCode.length = 0;
-                matchName.length = 0;
-                $('#modal-select-match').modal("show");
-            }else {
-                alert("请选中关键词")
-            }
-        }
-    }
-    //匹配方式按钮点击事件
-    function clickMatchBtn(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            matchCode.splice($.inArray($(obj).attr("code"), matchCode), 1);
-            matchName.splice($.inArray($(obj).val(), matchName), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            matchCode.push($(obj).attr("code"));
-            matchName.push($(obj).val())
-        }
-
-        $('#btnGroupMatch2 .btn-default').each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    function clickMatchBtn2(obj) {
-        matchCode.length = 0;
-        matchName.length = 0;
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            matchCode.splice($.inArray($(obj).attr("code"), matchCode), 1);
-            matchName.splice($.inArray($(obj).val(), matchName), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            matchCode.push($(obj).attr("code"));
-            matchName.push($(obj).val())
-            $('#btnGroupMatch2 .btn-default').each(function () {
-                if (this != obj) {
-                    $(this).removeClass("active-btn-match");
-                }
-            });
-        }
-
-        $('#btnGroupMatch .btn-default').each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    //匹配方式保存
-    function saveMatch() {
-        $('#btnGroupMatch').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupMatch2').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#modal-select-match').modal("hide");
-        var matchNameStr = "";
-        var codeStr = "";
-        for (var i in matchName) {
-            if (matchNameStr == "") {
-                matchNameStr = matchName[i];
-            } else {
-                matchNameStr += "," + matchName[i]
-            }
-            if (codeStr == "") {
-                codeStr = matchCode[i]
-            } else {
-                codeStr = codeStr + "," + matchCode[i]
-            }
-        }
-        if (setValue == 0) {
-            $('#s_addkeymatch').val(matchNameStr);
-            dataMap["s_globaladdkeymatch"] = codeStr
-        }else if (setValue == 1) {
-            $('#s_notkeymatch').val(matchNameStr);
-            dataMap["s_globalnotkeymatch"] = codeStr
-        }else if (setValue == 13){
-            $('#s_globalclearkeymatch').val(matchNameStr);
-            dataMap["s_globalclearkeymatch"] = codeStr
-        }else {
-            for (var i in selectIndex) {
-                var j = selectIndex[i] - 1;
-                if (setValue == 4) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(3)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_rules[j]["s_keymatch"] = codeStr;
-                    }
-                }else if (setValue == 6) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(5)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_rules[j]["s_addkeymatch"] = codeStr;
-                    }
-                } else if (setValue == 8) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(7)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_rules[j]["s_notkeymatch"] = codeStr;
-                    }
-                }
-            }
-        }
-        $('#modal-select-match').modal("hide");
-        matchName.length = 0;
-        matchCode.length = 0;
-    }
-    //采购单位modal
-    function selectBuyer(val) {
-        setValue = val;
-        if (val == 2) {
-            $('#modal-select-buyer').modal("show");
-        }else {
-            if (keyTableChecked) {
-                $('#modal-select-buyer').modal("show");
-            }else {
-                alert("请选中关键词")
-            }
-        }
-    }
-    //采购单位点击
-    function clickBuyerBtn(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            buyerArr.splice($.inArray($(obj).val(), buyerArr), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            buyerArr.push($(obj).val())
-        }
-    }
-    function saveBuyer() {
-        $('#btnGroupBuyer').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#modal-select-buyer').modal("hide");
-        var buyerStr = "";
-        for (var i in buyerArr) {
-            if ("" === buyerStr) {
-                buyerStr = buyerArr[i];
-            } else {
-                buyerStr += "," + buyerArr[i]
-            }
-        }
-        if (setValue == 2) {
-            $('#s_buyerclass').val(buyerStr);
-            $('#s_buyerclass').attr('title', buyerStr);
-            dataMap["s_globalbuyerclass"] = buyerStr;
-        }else {
-            for (var i in selectIndex) {
-                var j = selectIndex[i] - 1;
-                //采购单位
-                $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(9)").html(buyerStr);
-                o_rules[j]["s_buyerclass"] = buyerStr;
-            }
-        }
-        $('#modal-select-buyer').modal("hide");
-        buyerArr.length = 0;
-    }
-    //公告行业modal
-    function selectScope(val) {
-        setValue = val;
-        if (val == 3) {
-            $('#modal-select-scope').modal("show");
-        }else {
-            if (keyTableChecked) {
-                $('#modal-select-scope').modal("show");
-            }else {
-                alert("请选中关键词")
-            }
-        }
-    }
-    //公告行业一级点击
-    function btnTopScopeClick(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match");
-            scopeTopArr.splice($.inArray($(obj).val(), scopeTopArr), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            scopeTopArr.push($(obj).val())
-        }
-
-        //选择一级行业,取消掉所选择的所有二级行业
-        if (scopeSubArr.length > 0) {
-            $('#btnGroupSub .btn-default').each(function () {
-                $(this).removeClass("active-btn-match");
-            });
-            scopeSubArr.length = 0
-        }
-    }
-    //公告行业二级点击
-    function btnSubScopeClick(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            scopeSubArr.splice($.inArray($(obj).val(), scopeSubArr), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            var topid = "#top_" + $(obj).attr("index");
-            $(topid).removeClass("active-btn-match");
-            scopeSubArr.push($(obj).attr("code"))
-        }
-
-        //选择二级行业,取消掉所选择的所有一级行业
-        if (scopeTopArr.length > 0) {
-            $('#btnGroupTop .btn-default').each(function () {
-                $(this).removeClass("active-btn-match");
-            });
-            scopeTopArr.length = 0
-        }
-    }
-    function saveScope() {
-        $('#btnGroupTop').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupSub').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        var scopeStr = "";
-        var topStr = "";
-        var subStr = "";
-        for (var i in scopeTopArr) {
-            if ("" == scopeStr) {
-                scopeStr = scopeTopArr[i];
-            } else {
-                scopeStr += "," + scopeTopArr[i]
-            }
-            if (topStr == "") {
-                topStr = scopeTopArr[i]
-            } else {
-                topStr = topStr + "," + scopeTopArr[i]
-            }
-        }
-        for (var i in scopeSubArr) {
-            if ("" == scopeStr) {
-                scopeStr = scopeSubArr[i];
-            } else {
-                scopeStr += "," + scopeSubArr[i]
-            }
-            if (subStr == "") {
-                subStr = scopeSubArr[i]
-            } else {
-                subStr = subStr + "," + scopeSubArr[i]
-            }
-        }
-        if (setValue == 3) {
-            $('#s_scopeclass').val(scopeStr);
-            $('#s_scopeclass').attr('title', scopeStr);
-            dataMap["s_globaltopscopeclass"] = topStr;
-            dataMap["s_globalsubscopeclass"] = subStr;
-        }else {
-            for (var i in selectIndex) {
-                var j = selectIndex[i] - 1;
-                $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(10)").html(scopeStr);
-                o_rules[j]["s_topscopeclass"] = topStr;
-                o_rules[j]["s_subscopeclass"] = subStr;
-            }
-        }
-        $('#modal-select-scope').modal("hide");
-        scopeTopArr.length = 0;
-        scopeSubArr.length = 0;
-    }
-    //页面添加附加词、排除词
-    function addkeyWord(rdata) {
-        o_rules = rdata["o_rules"];
-        $('#g_addkey').attr("value", rdata["s_globaladdkey"]);
-        $('#g_notkey').attr("value", rdata["s_globalnotkey"]);
-        dataMap["s_globaladdkey"] = rdata["s_globaladdkey"];
-        dataMap["s_globalnotkey"] = rdata["s_globalnotkey"];
-
-        $('#keywords').dataTable().fnClearTable();
-        $('#keywords').dataTable().fnAddData(rdata["o_rules"]);
-    }
-    //表格全选
-    function allSelect(obj) {
-        if ($(obj).is(':checked')) {
-            keyTableChecked = true;
-            keyTableAllChecked = true;
-            $('input[name="ckb-keyid"]').each(function () {
-                this.checked = true;
-                selectIndex.push($(this).parents("tr").index() + 1);
-            })
-        } else {
-            selectIndex.length = 0;
-            keyTableChecked = false;
-            keyTableAllChecked = false;
-            $('input[name="ckb-keyid"]').each(function () {
-                this.checked = false;
-            })
-        }
-    }
-    //表格单个选中
-    function singleSelect(obj) {
-        var tag = true;
-        selectIndex.length = 0;
-        $('input[name="ckb-keyid"]').each(function () {
-            if (this.checked) {
-                keyTableChecked = true;
-                selectIndex.push($(this).parents("tr").index() + 1);
-            }else {
-                tag = false
-            }
-        });
-        if (tag) {
-            keyTableAllChecked = true;
-            $('#allCheckbox').prop("checked", true);
-        } else {
-            keyTableAllChecked = false;
-            $('#allCheckbox').prop("checked", false);
-        }
-    }
-    function saveTag() {
-        let obj = checkArea(dataMap.s_area, dataMap.s_city, dataMap.s_district);
-        if (!obj.flag) {
-            let msg = "选择的" + obj.v1 + "和" + obj.v2 + "生成es语句时会产生错误,请重新选择其中一个";
-            showMsg(msg);
-            return
-        }
-        //通用规则采购单位行业和关键词中的采购单位行业只能存在一个
-        if (o_rules && o_rules.length > 0) {
-            let tag = false;
-            for (var i in o_rules) {
-                if (o_rules[i].s_buyerclass) {
-                    tag = true
-                }
-            }
-            if (tag && dataMap.s_globalbuyerclass) {
-                showMsg("保存失败,采购单位行业在通用规则和关键词规则中不能同时存在!")
-                return;
-            }
-        }
-        //关键词、附加词、排除词存在,则必须有相应的匹配方式
-        if (dataMap.s_globaladdkey && !dataMap.s_globaladdkeymatch) {
-            showMsg("保存失败,全局附加词必须有对应的匹配方式!")
-            return;
-        }
-        if (dataMap.s_globalnotkey && !dataMap.s_globalnotkeymatch) {
-            showMsg("保存失败,全局附加词必须有对应的匹配方式!")
-            return;
-        }
-        if (o_rules && o_rules.length > 0) {
-            for (const i in o_rules) {
-                if (o_rules[i].s_matchkey && !o_rules[i].s_keymatch) {
-                    showMsg("保存失败,关键词规则中有关键词未对应匹配方式!")
-                    return;
-                }
-                if (o_rules[i].s_addkey && !o_rules[i].s_addkeymatch) {
-                    showMsg("保存失败,关键词规则中有附加词未对应匹配方式!")
-                    return;
-                }
-                if (o_rules[i].s_notkey && !o_rules[i].s_notkeymatch) {
-                    showMsg("保存失败,关键词规则中有排除词未对应匹配方式!")
-                    return;
-                }
-            }
-        }
-        dataMap["s_customer"] = $('#customer').val();
-        dataMap["s_tagname"] = $('#tagname').val();
-        dataMap["s_salesperson"] = $('#salename').val();
-        dataMap["s_serverperson"] = $("#serverperson").val();
-        dataMap["s_customername"] = $("#customername").val();
-        dataMap["s_globaladdkey"] = $('#g_addkey').val();
-        dataMap["s_globalnotkey"] = $('#g_notkey').val();
-        dataMap["s_globalclearkey"] = $('#s_globalclearkey').val();
-        if (dataMap["s_customer"] == "" || dataMap["s_tagname"] == "" || dataMap["s_salesperson"] == "" || dataMap["s_serverperson"] == "") {
-            alert("请填写必须字段!")
-            return
-        }
-        if ($('#starttime').find("input").val() != "") {
-            var start = $('#starttime').find("input").val();
-            start = new Date(start).getTime() / 1000;
-            dataMap["i_starttime"] = start;
-        }else {
-            delete dataMap["i_starttime"]
-        }
-        if ($('#endtime').find("input").val() != "") {
-            var end = $('#endtime').find("input").val();
-            end = new Date(end).getTime() / 1000;
-            dataMap["i_endtime"] = end;
-        }else {
-            delete dataMap["i_endtime"]
-        }
-        var budget = "";
-        if ($('#s_budget_min').val() != "") {
-            budget = "大于" + $('#s_budget_min').val()
-        }
-        if ($('#s_budget_max').val() != "") {
-            if (budget == "") {
-                budget = "小于" + $('#s_budget_max').val()
-            }else {
-                budget = budget + ",小于" + $('#s_budget_max').val()
-            }
-        }
-        dataMap["s_budgetlimit"] = budget;
-        var bidamount = "";
-        if ($('#s_bidamount_min').val() != "") {
-            bidamount = "大于" + $('#s_bidamount_min').val()
-        }
-        if ($('#s_bidamount_max').val() != "") {
-            if (bidamount == "") {
-                bidamount = "小于" + $('#s_bidamount_max').val()
-            }else {
-                bidamount = bidamount + ",小于" + $('#s_bidamount_max').val()
-            }
-        }
-        dataMap["s_bidamountlimit"] = bidamount;
-        if ($('#maxnum').val() !== "") {
-            dataMap["i_maxnum"] = $('#maxnum').val();
-        }
-        if (dataMap.s_globaladdkeymatch.indexOf("1") > -1 || dataMap.s_globaladdkeymatch.indexOf("2") > -1 || dataMap.s_globaladdkeymatch.indexOf("3") > -1 ||
-            dataMap.s_globaladdkeymatch.indexOf("4") > -1 || dataMap.s_globaladdkeymatch.indexOf("5") > -1) {
-            dataMap["i_globaladdkeytype"] = 1
-        }else if (dataMap.s_globaladdkeymatch.indexOf("6") > -1 || dataMap.s_globaladdkeymatch.indexOf("7") > -1 ||
-            dataMap.s_globaladdkeymatch.indexOf("8") > -1 || dataMap.s_globaladdkeymatch.indexOf("9") > -1) {
-            dataMap["i_globaladdkeytype"] = 2
-        }else {
-            dataMap["i_globaladdkeytype"] = 0
-        }
-        if (dataMap.s_globalnotkeymatch.indexOf("1") > -1 || dataMap.s_globalnotkeymatch.indexOf("2") > -1 || dataMap.s_globalnotkeymatch.indexOf("3") > -1 ||
-            dataMap.s_globalnotkeymatch.indexOf("4") > -1 || dataMap.s_globalnotkeymatch.indexOf("5") > -1) {
-            dataMap["i_globalnotkeytype"] = 1
-        }else if (dataMap.s_globalnotkeymatch.indexOf("6") > -1 || dataMap.s_globalnotkeymatch.indexOf("7") > -1 ||
-            dataMap.s_globalnotkeymatch.indexOf("8") > -1 || dataMap.s_globalnotkeymatch.indexOf("9") > -1) {
-            dataMap["i_globalnotkeytype"] = 2
-        }else {
-            dataMap["i_globalnotkeytype"] = 0
-        }
-        dataMap["o_rules"] = JSON.stringify(o_rules);
-        $.ajax({
-            url: "/service/rule/save",
-            type: 'POST',
-            data: dataMap,
-            success: function (r) {
-                if (r.rep && r.id) {
-                    $('#estxt').val(r.s_esquery);
-                    state = 2;
-                    showTip("保存成功",1000);
-                } else {
-                    showTip("保存失败",1000);
-                }
-            }
-        })
-    }
-
-    //生成数据
-    function produceData() {
-        com.maskShow("正在生成数据...");
-        $.ajax({
-            url: "/service/rule/produce",
-            type: "post",
-            data: {"id": dataMap.id},
-            success: function (r) {
-                com.maskHide();
-                if (r.rep) {
-                    dataMap.i_estotal = r.count;
-                    showTip("数据生成成功", 1000);
-                } else {
-                    showTip("数据生成失败", 1000);
-                }
-            }
-        })
-    }
-
-    //预览数据
-    function previewData() {
-        myDataTable = $('#previewData').DataTable({
-            "destroy": true,
-            "paging": true,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": true,
-            "autoWidth": true,
-            "serverSide": true,
-            "ajax": {
-                url: "/service/rule/preview",
-                type: "post",
-                data: {"s_dataid": dataMap.s_dataid},
-            },
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-                $('#dataTable-btn').click(function (e) {
-                    var redirectpage = 0
-                    if ($("#changePage").val() && $("#changePage").val() > 0) {
-                        var redirectpage = $("#changePage").val() - 1;
-                    }
-                    myDataTable.page(redirectpage).draw(false);
-                });
-                this.api().column(0).nodes().each(function (cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null, width: "2%"},
-                {"data": function (row) {
-                        if (row.s_matchkey) {
-                            return row.s_matchkey
-                        } else {
-                            return ""
-                        }
-                    }, width: "8%"},
-                {"data": function (row) {
-                        if (row.area) {
-                            return row.area
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"},
-                {"data": function (row) {
-                        if (row.city) {
-                            return row.city
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"},
-                {"data": function (row) {
-                        if (row.s_jyhref) {
-                            if (row.title.length > 36) {
-                                var str = row.title.substring(0, 36) + "..."
-                            } else {
-                                var str = row.title
-                            }
-                            tmp = '<a class="" target="_blank" href=' + row.s_jyhref + '>' + str + '</a>';
-                            return tmp
-                        } else {
-                            return row.title
-                        }
-                    }, width: "5%"},
-                {"data": function (row) {
-                        if (row.subtype) {
-                            return row.subtype
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"},
-                {"data": function (row) {
-                        var str = com.trimStr(row.detail);
-                        if (str.length > 14) {
-                            return str.substring(0, 14) + "..."
-                        } else {
-                            return str
-                        }
-                    }, width: "5%"},
-                {"data": function (row) {
-                        var dt = new Date();
-                        dt.setTime(parseInt(row.publishtime) * 1000);
-                        return dt.format("yyyy-MM-dd")
-                    }, width: "4%"},
-                {"data": function (row) {
-                        if (row.href) {
-                            var shref = row.href;
-                            tmp = '<a class="" target="_blank" href=' + shref + '>公告地址</a>';
-                            return tmp
-                        } else {
-                            return ""
-                        }
-                    }, width: "5%"},
-                {"data": function (row) {
-                        if (row.projectcode) {
-                            return row.projectcode
-                        }else {
-                            return ""
-                        }
-                    }, width: "5%"},
-                {"data": "projectname", width: "5%"},
-                {"data": function (row) {
-                        if (row.projectscope) {
-                            if (row.projectscope.length > 14) {
-                                return row.projectscope.substring(0, 14) + "..."
-                            } else {
-                                return row.projectscope
-                            }
-                        }
-                        return ""
-                    }, width: "3%"},
-                {"data": function (row) {
-                        if (row.budget == undefined) {
-                            return ""
-                        } else {
-                            return row.budget
-                        }
-                    }, width: "3%"},
-                {"data": function (row) {
-                        if (row.bidamount == undefined) {
-                            return ""
-                        } else {
-                            return row.bidamount
-                        }
-                    }, width: "3%"},
-                {"data": "bidopentime", width: "3%", render: function (val) {
-                        if (val) {
-                            var dt = new Date();
-                            dt.setTime(parseInt(val) * 1000);
-                            return dt.format("yyyy-MM-dd")
-                        } else {
-                            return ""
-                        }
-                    }},
-                {"data": "buyer", width: "3%", render: function (val) {
-                        if (val == undefined) {
-                            val = ""
-                        }
-                        return val
-                    }},
-                {
-                    "data": function (row) {
-                        if (row.buyerperson) {
-                            return row.buyerperson
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"
-                },
-                {
-                    "data": function (row) {
-                        if (row.buyertel) {
-                            return row.buyertel
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"
-                },
-                {
-                    "data": "agency", width: "5%", render: function (val) {
-                        if (val == undefined) {
-                            val = ""
-                        }
-                        return val
-                    }
-                },
-                {
-                    "data": "s_winner", width: "3%", render: function (val) {
-                        if (val == undefined) {
-                            val = ""
-                        }
-                        return val
-                    }
-                },
-                {
-                    "data": function (row) {
-                        if (row.winnerperson) {
-                            return row.winnerperson
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"
-                },
-                {
-                    "data": function (row) {
-                        if (row.winnertel) {
-                            return row.winnertel
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"
-                },
-                {
-                    "data": function (row) {
-                        if (row.legal_person) {
-                            return row.legal_person
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"
-                },
-                {
-                    "data": function (row) {
-                        if (row.company_phone) {
-                            return row.company_phone
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"
-                },
-                {
-                    "data": function (row) {
-                        if (row.company_email) {
-                            return row.company_email
-                        } else {
-                            return ""
-                        }
-                    }, width: "4%"
-                },
-            ]
-        });
-        $('#modal-preview').modal("show");
-        if (dataMap.i_extfieldstype == 1) {
-            var str = "标准字段包 " + dataMap.i_maxnum + "/" + dataMap.i_estotal;
-            $('#dataCount').html(str)
-        } else {
-            var str = "高级字段包 " + dataMap.i_maxnum + "/" + dataMap.i_estotal;
-            $('#dataCount').html(str)
-        }
-    }
-
-    //导入标签
-    function importRule() {
-        $("#file").click();
-    }
-
-    $(function () {
-        $("#uploadform").find("input").change(function () {
-            var val = $(this).val() ? $(this).val() : "";
-            if (val.indexOf(".xlsx") < 0) {
-                showMsg("文件格式非法", function () {
-                });
-            } else {
-                var myform = new FormData();
-                myform.append('xlsx', $("#file")[0].files[0]);
-                $.ajax({
-                    url: "/service/rule/import",
-                    type: 'POST',
-                    data: myform,
-                    async: false,
-                    contentType: false,//不要设置Content-Type请求头
-                    processData: false,// 使数据不做处理
-                    success: function (r) {
-                        if (r.rep) {
-                            // dataMap["id"] = r.id;
-                            addkeyWord(r.rdata);
-                            alert("导入成功")
-                        } else {
-                            alert("导入失败")
-                        }
-                    }
-                })
-            }
-        })
-    })
-
-    //下载es
-    function downloades() {
-        if (state == 1) {
-            alert("请先保存标签")
-        } else {
-            $("#download").attr("href", "/service/rule/exportes?id={{.T.data.id}}")
-        }
-    }
-
-    //存档
-    function archive() {
-        showConfirm("是否存档?", function () {
-            $.ajax({
-                url: "/service/rule/archive",
-                type: "post",
-                data: {"_id": dataMap["id"]},
-                success: function (r) {
-                    if (r.rep) {
-                        showTip("存档成功", 1000);
-                        //ttable.ajax.reload();
-                    } else {
-                        showTip("存档失败", 1000);
-                    }
-                }
-            })
-        });
-    }
-
-    var key_flag = -1;      // 0:新增,1:修改
-    //关键词表格新增
-    function add_Rule() {
-        key_flag = 0;
-        $('#keyword_txt').val("");
-        $('#addword_txt').val("");
-        $('#notword_txt').val("");
-        $('#modal-add-keyword').modal("show");
-    }
-    //关键词修改
-    function modify_Rule(){
-        if (selectIndex.length == 1) {
-            key_flag = 1;
-            var index = selectIndex[0] - 1;
-            $('#modal-add-keyword').modal("show");
-            $('#keyword_txt').val(o_rules[index].s_matchkey);
-            $('#addword_txt').val(o_rules[index].s_addkey);
-            $('#notword_txt').val(o_rules[index].s_notkey);
-        }else {
-            showTip("请选中需要修改的关键词,且只能选中一条", 1000)
-        }
-
-    }
-    function saveKeyword() {
-        var key = $('#keyword_txt').val();
-        var addkey = $('#addword_txt').val();
-        var notkey = $('#notword_txt').val();
-        if (key != "") {
-            var rule = {};
-            rule["s_matchkey"] = key.replace(",", ",");
-            if (addkey != "") rule["s_addkey"] = addkey.replace(",", ",");
-            if (notkey != "") rule["s_notkey"] = notkey.replace(",", ",");
-            $('#modal-add-keyword').modal('hide');
-            if (key_flag == 1) {
-                var index = selectIndex[0] - 1;
-                o_rules.splice(index, 1, rule)
-            }else {
-                o_rules.push(rule)
-            }
-            $('#keywords').dataTable().fnClearTable();
-            $('#keywords').dataTable().fnAddData(o_rules);
-        }else {
-            showTip("关键词不能为空", 500)
-        }
-    }
-    //关键词删除
-    function del_Rule() {
-        console.log(selectIndex);
-        if (keyTableChecked && selectIndex.length > 0) {
-            showConfirm("确定删除?", function() {
-                var tmp = []
-                for (var i in selectIndex) {
-                    var j = selectIndex[i] - 1;
-                    tmp.push(j)
-                }
-                o_rules = deleteArrayVal(o_rules, tmp)
-                $('#keywords').dataTable().fnClearTable();
-                $('#keywords').dataTable().fnAddData(o_rules);
-
-                keyTableChecked = false;
-                if (o_rules.length == 0) {
-                    $('#allCheckbox').prop("checked", false);
-                    $('#keywords').dataTable().fnClearTable();
-                }
-            })
-        }else {
-            showTip("请选中需要删除的关键词", 500)
-        }
-    }
-
-    function checkArea(area, city, district) {
-        let flag = true;
-        let v1 = "";
-        let v2 = ""
-        if (area == "" && city == "" && district == "") {
-            flag = true
-        }
-        if (city != "" && area != "") {
-            var areaArr = area.split(",");
-            var cityArr = city.split(",");
-            for (var i in areaArr) {
-                if (cityMap[areaArr[i]] != undefined) {
-                    for (var j in cityArr) {
-                        if ($.inArray(cityArr[j], cityMap[areaArr[i]]) > -1) {
-                            flag = false;
-                            v1 = areaArr[i];
-                            v2 = cityArr[j]
-                        }
-                    }
-                }
-            }
-            return {flag: flag, v1: v1, v2: v2}
-        }
-        if (city != "" && district != "") {
-            var cityArr = city.split(",");
-            var districtArr = district.split(",");
-            for (var i in cityArr) {
-                if (districtMap[cityArr[i]] != undefined) {
-                    for (var j in districtArr) {
-                        let dis = districtArr[j].split("-")[1];
-                        if ($.inArray(dis, districtMap[cityArr[i]]) > -1) {
-                            flag = false;
-                            v1 = cityArr[i];
-                            v2 = districtArr[j]
-                        }
-                    }
-                }
-            }
-            return {flag: flag, v1: v1, v2: v2}
-        }
-        return {flag: flag, v1: v1, v2: v2}
-    }
-</script>

+ 0 - 203
src/web/templates/private/rule_list.html

@@ -1,203 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-<div class="content-wrapper" id="showbtn">
-    <section class="content-header">
-        <h1>
-            <small><a href="/service/rule/create" class="btn btn-primary opr">新增标签</a></small>
-        </h1>
-        <ol class="breadcrumb">
-          <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-          <li><a href="/service/rule/list"> 标签列表</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>
-                                <th>功能</th>
-                                <th>查看</th>
-                            </tr>
-                            </thead>
-                        </table>
-                    </div>
-                    <!-- /.box-body -->
-                </div>
-                <!-- /.box -->
-            </div>
-        </div>
-    </section>
-</div>
-<div class="modal fade" id="modal-preview-href" tabindex="-1" role="dialog" aria-hidden="true">
-    <div class="modal-dialog">
-        <div class="modal-content">
-            <div class="modal-header">
-                <div class="modal-header">
-                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-                    <div class="edit-form">
-                        <div class="edit-info">
-                            <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span>
-                            <span class="info">链接地址</span>
-                        </div>
-                        <a id="preview-href" target="_blank" style="word-wrap: break-word"></a>
-                    </div>
-                </div>
-            </div>
-            <div class="modal-footer">
-                <input type="button" id="copy" data-clipboard-target="#preview-href" class="btn btn-primary saveBtn" value="复制">
-                <input type="button" onclick="cancelModel()" class="btn btn-default" value="取消">
-            </div>
-        </div>
-    </div><!-- /.modal -->
-</div>
-{{include "com/footer.html"}}
-<script>
-    menuActive("/rule/list");
-    $(function () {
-        ttable = $('#dataTable').DataTable({
-            "paging": true,
-            "lengthChange": false,
-            "searching": true,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "serverSide": true,
-            "ajax": {
-                "url": "/service/rule/list",
-                "type": "post",
-                "data": {}
-            },
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-                $('#dataTable-btn').click(function (e) {
-                    var redirectpage = 0
-                    if ($("#changePage").val() && $("#changePage").val() > 0) {
-                        var redirectpage = $("#changePage").val() - 1;
-                    }
-                    ttable.page(redirectpage).draw(false);
-                });
-                this.api().column(0).nodes().each(function(cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null,width:"5%"},
-                {"data": "s_customer"},
-                {"data": "s_tagname"},
-                {"data": "s_salesperson"},
-                {"data": "i_updatetime",width:"9%", render: function (val) {
-                  var dt = new Date()
-                  dt.setTime(parseInt(val) * 1000);
-                  return dt.format("yyyy-MM-dd")
-                }},
-                {"data": "_id", width:"11%",render: function (val, a, row, pos) {
-                    var s = [val, row.s_dataid];
-                      tmp = '<div>' +
-                          '<a class="btn btn-sm btn-primary" href="/service/rule/edit?id='+val+'">编辑</a>'+
-                          '<a class="btn btn-sm btn-danger" onclick="del(\''+s+'\')">删除</a>'+
-                          '</div>';
-                      return tmp
-                }},
-                {"data": "_id", width:"26%",render: function (val, a, row, pos) {
-                    var s = [val, row.s_dataid];
-                      tmp = '<div>' +
-                          '<a class="btn btn-sm btn-primary" href="/service/rule/downloadrule?id='+val+'">导出标签</a>'+
-                          '<a class="btn btn-sm btn-info" href="/service/rule/downloadata?s_dataid='+val+'">导出数据</a>'+
-                          '<a class="btn btn-sm btn-warning" onclick="archive(\'' + val + '\')">存档</a>'+
-                          '<a class="btn btn-sm btn-danger" onclick="getcustomerappid(\'' + val + '\',\'' + row.s_customer + '\')">客户关联</a>'+
-                          '</div>';
-                      return tmp
-                }},
-                {"data": "_id",width:"15%", render: function (val, a, row, pos) {
-                  tmp = '<div xmlns="http://www.w3.org/1999/html">' +
-                       '<button class="btn btn-sm btn-instagram" onclick="preview(\'' + row.s_dataid + '\')">链接地址</button>'+
-                      '<a class="btn btn-sm btn-success" href="/service/rule/history?tagid='+val+'">变更历史</a>'+
-                      '</div>';
-                  return tmp
-                }}
-            ]
-        });
-    });
-    function del(s){
-        showConfirm("确定删除?", function() {
-            $.ajax({
-                url:"/service/rule/del",
-                type:"post",
-                data:{"_id": s.split(",")[0], "s_dataid": s.split(",")[1]},
-                success:function(r){
-                  if(r.rep){
-                    ttable.ajax.reload();
-                  }else{
-                    alert("删除失败");
-                  }
-                }
-            })
-        });
-    }
-    function archive(_id){
-        showConfirm("是否存档?", function() {
-            $.ajax({
-                url:"/service/rule/archive",
-                type:"post",
-                data:{"_id":_id},
-                success:function(r){
-                  if(r.rep){
-                    showTip("存档成功",1000);
-                    //ttable.ajax.reload();
-                  }else{
-                    showTip("存档失败",1000);
-                  }
-                }
-            })
-        });
-    }
-    function preview(s_dataid) {
-        var href = {{.T.preview_href}} + "?type=private"+"&key=" + s_dataid;
-        $('#preview-href').html(href);
-        $('#preview-href').attr("href", href);
-        $('#modal-preview-href').modal("show")
-    }
-    function cancelModel() {
-        $('#modal-preview-href').modal("hide");
-    }
-    function getcustomerappid(_id,customer){
-      showConfirm("确定关联?", function() {
-            $.ajax({
-                url:"/service/rule/getcustomerappid",
-                type:"post",
-                data:{"_id": _id,"customer":customer},
-                success:function(r){
-                  if(r.rep){
-                    showTip("关联成功",1000);
-                  }else{
-                    alert("关联失败");
-                  }
-                }
-            })
-        });
-    }
-  
-    var clipboard = new ClipboardJS('#copy');
-    clipboard.on('success', function () {
-        alert("复制成功!")
-    });
-    clipboard.on('error', function () {
-        alert("复制失败!")
-    });
-</script>

+ 0 - 816
src/web/templates/private/tag_rule_create.html

@@ -1,816 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-<div class="content-wrapper">
-    <section class="content-header">
-        <h1>新建标签规则
-            <small>
-                <button class="btn btn-success btn-sm" onclick="importTag()"><i class="fa fa-fw fa-cloud-upload fa-lg"></i>导入公共标签</button>
-                <button class="btn btn-primary btn-sm" onclick="importRule()"><i class="fa fa-fw fa-cloud-upload fa-lg"></i>导入关键词</button>
-                <form style="display:none" id='uploadform' method='post'>
-                    <input type='file' name='xlsx' id='file'/>
-                </form>
-            </small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/rule/list">标签规则列表</a></li>
-            <li><a href="#">新建标签规则</a></li>
-        </ol>
-    </section>
-    <!-- Main content -->
-    <section class="content">
-        <div class="tab-content">
-            <div class="nav-tabs-custom">
-                <ul class="nav nav-tabs edit-step">
-                    <li class="active" data-mode="guide"><a href="#tab_1" data-toggle="tab" aria-expanded="true">通用规则</a></li>
-                    <li data-mode="guide" class=""><a href="#tab_2" data-toggle="tab" aria-expanded="false">关键词规则</a></li>
-                    <button class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" onclick="saveTag()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存规则标签</button>
-                </ul>
-                <div class="tab-content">
-                    <div class="tab-pane active" id="tab_1">
-                        <form class="form-horizontal">
-                            <div class="box box-primary">
-                                <div class="box-header with-border">
-                                    <i class="fa fa-tag"></i>
-                                    <h3 class="box-title">通用规则</h3>
-                                </div>
-                                <div class="box-body">
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>标签规则名称</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="tagname" placeholder="标签规则名称" required>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>属性值</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control" id="fieldSelect">
-                                                <option selected:disabled style="diaplay:none" value="0">请选择</option>
-                                            </select>
-                                        </div>
-                                        <script>
-                                            $('#fieldSelect').change(function() {
-                                                const tmp = "pre_" + $(this).val();
-                                                $('#pretagfield').val(tmp)
-                                            })
-                                        </script>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>任务类型</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control" id="taskSelect">
-                                                <option selected:disabled style="diaplay:none" value="0">请选择</option>
-                                            </select>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">父标签名称</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="pretagname" placeholder="父标签名称"
-                                                   value="">
-                                        </div>
-                                        <label class="col-sm-2 control-label">父标签属性值</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" disabled id="pretagfield" placeholder="父标签属性值"
-                                                   value="">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">全局附加词</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="g_addkey">
-                                        </div>
-                                        <label class="col-sm-2 control-label">匹配方式</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_addkeymatch" onclick="selectKeyMatch(0)" placeholder="只能选择二级公告行业类型">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label for="spiderChannel" class="col-sm-2 control-label">全局排除词</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="g_notkey">
-                                        </div>
-                                        <label class="col-sm-2 control-label">匹配方式</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_notkeymatch" onclick="selectKeyMatch(1)">
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div id="es_div" class="form-group">
-                                        <label class="col-sm-2 control-label">查询条件</label>
-                                        <div class="col-sm-8">
-                                            <textarea class="form-control" id="query" style="max-width: 100%"></textarea>
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                        </form>
-                    </div>
-                    <div class="tab-pane" id="tab_2">
-                        <div class="box box-primary">
-                            <div class="box-header with-border">
-                                <i class="fa fa-bookmark"></i>
-                                <h3 class="box-title">关键词规则</h3>
-                                <div style="float: right">
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(4)">关键词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(6)">附加词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(8)">排除词匹配方式</a>
-                                </div>
-                            </div>
-                            <table id="keywords" class="table table-bordered">
-                                <thead>
-                                <div style="margin: 10px 10px 0px;">
-                                    <a class="btn btn-twitter" onclick="add_Rule()">新增</a>
-                                    <a class="btn btn-twitter" onclick="modify_Rule()">修改</a>
-                                    <a class="btn btn-twitter" onclick="del_Rule()">删除</a>
-                                </div>
-                                <tr>
-                                    <th>编号</th>
-                                    <th><input type="checkbox" onclick="allSelect(this)" id="allCheckbox"></th>
-                                    <th>关键词</th>
-                                    <th>匹配方式</th>
-                                    <th>附加词</th>
-                                    <th>匹配方式</th>
-                                    <th>排除词</th>
-                                    <th>匹配方式</th>
-                                </tr>
-                                </thead>
-                            </table>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </section>
-</div>
-
-<!-- 新增关键词规则模态框 -->
-<div class="modal fade" id="modal-add-keyword" tabindex="-1" role="dialog" aria-hidden="true">
-    <div class="modal-dialog" style="width: 60%">
-        <div class="modal-content">
-            <div class="modal-header">
-                <div class="modal-header">
-                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-                    <div class="edit-form">
-                        <div class="edit-info">
-                            <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span>
-                            <span>新增关键词</span>
-                        </div>
-                        <form class="form-horizontal">
-                            <div class="form-group">
-                                <label class="col-sm-2 control-label"><span style="color:red;">* </span>关键词</label>
-                                <div class="col-sm-10">
-                                    <textarea class="form-control" style="max-width: 100%" placeholder="输入关键词"
-                                              id="keyword_txt"></textarea></div>
-                            </div>
-                            <div class="form-group">
-                                <label class="col-sm-2 control-label">附加词</label>
-                                <div class="col-sm-10">
-                                    <textarea class="form-control" style="max-width: 100%" placeholder="输入附件词"
-                                              id="addword_txt"></textarea></div>
-                            </div>
-                        </form>
-                    </div>
-                </div>
-                <div class="modal-footer">
-                    <input type="button" onclick="saveKeyword()" class="btn btn-primary saveBtn" value="保存">
-                    <input type="button" onclick="cancelModel()" class="btn btn-default" style="margin-left: 24px"
-                           value="取消">
-                </div>
-            </div>
-        </div>
-    </div><!-- /.modal -->
-</div>
-<!-- 选择匹配方式模态框 -->
-<div class="modal fade" id="modal-select-match" tabindex="-1" role="dialog" aria-hidden="true">
-    <div class="modal-dialog" style="width: 50%">
-        <div class="modal-content">
-            <div class="modal-header">
-                <div class="modal-header">
-                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-                    <div class="edit-form">
-                        <div class="edit-info">
-                            <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span>
-                            <span>匹配方式</span>
-                        </div>
-                        <div id="btnGroupMatch"></div>
-                        <div id="btnGroupMatch2" style="margin-top: 15px"></div>
-                    </div>
-                </div>
-                <div class="modal-footer">
-                    <input type="button" onclick="saveMatch()" class="btn btn-primary saveBtn" value="保存">
-                    <input type="button" onclick="cancelModel()" class="btn btn-default" style="margin-left: 24px"
-                           value="取消">
-                </div>
-            </div>
-        </div>
-    </div><!-- /.modal -->
-</div>
-<!-- 公共标签modal -->
-<div class="modal fade" id="modal-common-tag" tabindex="-1" role="dialog" aria-hidden="true">
-    <div class="modal-dialog" style="width: 60%">
-        <div class="modal-content">
-            <div class="modal-header">
-                <div class="modal-header">
-                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-                    <div class="edit-form">
-                        <div class="edit-info">
-                            <span class="info"><i class="fa fa-fw fa-tags fa-lg"></i>公共标签</span>
-                            <button class="btn btn-sm btn-success" style="margin-left:12px;margin-top: -3px;"
-                                    onclick="addComTag()"><i class="fa fa-fw fa-check-square fa-lg"></i>新增标签
-                            </button>
-                        </div>
-                        <div class="content">
-                            <table id="commmontag" class="table table-bordered">
-                                <thead>
-                                <tr>
-                                    <th>编号</th>
-                                    <th>选择</th>
-                                    <th>标签名称</th>
-                                    <th>创建时间</th>
-                                    <th>创建人</th>
-                                </tr>
-                                </thead>
-                            </table>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </div><!-- /.modal -->
-</div>
-{{include "com/footer.html"}}
-<script>
-    menuActive("/tag_rule/list");
-    var TagFieldMap = {{.T.tagFieldMap}}
-    var TaskTypeMap = {{.T.taskTypeMap}}
-    var matchTypeMap = {{.T.matchTypeMap}};
-
-    var keyTableChecked = false;        //关键词表格数据是否有选中
-    var keyTableAllChecked = true;      //表单数据是否被全选中
-
-    var setValue = 0;                   // 4: 关键词匹配方式,6:附加词匹配方式
-    var selectIndex = [];               //选中的编号
-    var o_list = [];
-    var matchCode = [];     //匹配方式code
-    var matchName = [];     //匹配名字
-
-    //表单数据
-    var dataMap = {
-        "s_tagname": "",
-        "s_tagfield": "",
-        "s_pretagname": "",
-        "s_tasktype": ""
-    };
-
-    $(document).ready(function () {
-        for (var i in TagFieldMap) {
-            var provOpt = document.createElement('option');
-            provOpt.innerText = TagFieldMap[i].name;
-            provOpt.value = TagFieldMap[i].code;
-            $("#fieldSelect")[0].appendChild(provOpt);
-        }
-        for (var i in TaskTypeMap) {
-            var provOpt = document.createElement('option');
-            provOpt.innerText = TaskTypeMap[i].name;
-            provOpt.value = TaskTypeMap[i].code;
-            $("#taskSelect")[0].appendChild(provOpt);
-        }
-        var btnMatchHtml1 = "";
-        var btnMatchHtml2 = "";
-        //匹配方式
-        for (var i in matchTypeMap) {
-            if (i < 5) {
-                btnMatchHtml1 += `<input type="button" class="btn btn-default col-md-pull-2" style="margin-left: 10px;margin-top: 10px" onclick="clickMatchBtn(this)"
-                            code="${matchTypeMap[i]["code"]}" value="${matchTypeMap[i]["name"]}">`;
-            }else {
-                btnMatchHtml2 += `<input type="button" class="btn btn-default col-md-pull-2" style="margin-left: 10px;margin-top: 10px" onclick="clickMatchBtn2(this)"
-                            code="${matchTypeMap[i]["code"]}" value="${matchTypeMap[i]["name"]}">`;
-            }
-        }
-        $("#btnGroupMatch").append(btnMatchHtml1);
-        $("#btnGroupMatch2").append(btnMatchHtml2);
-        $('#keywords').DataTable({
-            "paging": false,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                this.api().column(0).nodes().each(function (cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null, width: "1%"},
-                {"data": "", width: "1%", render: function() {
-                        return `<input type="checkbox" name="ckb-keyid" onclick="singleSelect(this)" style="text-align: center">`
-                    }},
-                {"data": "s_matchkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_keymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-                {"data": "s_addkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_addkeymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-                {"data": "s_notkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_notkeymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-            ],
-            "columnDefs": [{
-                "targets": [2],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 44) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 44) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }, {
-                "targets": [4],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 44) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 44) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }, {
-                "targets": [6],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 44) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 44) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }]
-        });
-    })
-    function cancelModel() {
-        $('#modal-add-keyword').modal("hide");
-        $('#modal-select-match').modal("hide");
-        $('#btnGroupMatch').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupMatch2').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    function importRule() {
-        $("#file").click();
-    }
-    $(function() {
-        $("#uploadform").find("input").change(function () {
-            var val = $(this).val() ? $(this).val() : "";
-            if (val.indexOf(".xlsx") < 0) {
-                showMsg("文件格式非法", function () {
-                });
-            } else {
-                var myform = new FormData();
-                myform.append('xlsx', $("#file")[0].files[0]);
-                $.ajax({
-                    url: "/service/tag_rule/import",
-                    type: 'POST',
-                    data: myform,
-                    async: false,
-                    contentType: false,//不要设置Content-Type请求头
-                    processData: false,// 使数据不做处理
-                    success: function (r) {
-                        if (r.rep) {
-                            o_list = r.rdata["o_rules"]
-                            $('#keywords').dataTable().fnClearTable();
-                            $('#keywords').dataTable().fnAddData(o_list);
-                            showTip("导入成功",1000);
-                        } else {
-                            showTip("导入失败",1000);
-                        }
-                    }
-                })
-            }
-        })
-    });
-    function allSelect(obj) {
-        if ($(obj).is(':checked')) {
-            keyTableChecked = true;
-            keyTableAllChecked = true;
-            $('input[name="ckb-keyid"]').each(function () {
-                this.checked = true;
-                selectIndex.push($(this).parents("tr").index() + 1);
-            })
-        }else {
-            selectIndex.length = 0;
-            keyTableChecked = false;
-            keyTableAllChecked = false;
-            $('input[name="ckb-keyid"]').each(function () {
-                this.checked = false;
-            })
-        }
-    }
-    function singleSelect(obj) {
-        var tag = true;
-        selectIndex.length = 0;
-        $('input[name="ckb-keyid"]').each(function () {
-            if (this.checked) {
-                keyTableChecked = true;
-                selectIndex.push($(this).parents("tr").index() + 1);
-            }else {
-                tag = false
-            }
-        });
-        if (tag) {
-            keyTableAllChecked = true;
-            $('#allCheckbox').prop("checked", true);
-        }else {
-            keyTableAllChecked = false;
-            $('#allCheckbox').prop("checked", false);
-        }
-    }
-    function saveTag() {
-        dataMap.s_tagname = $('#tagname').val()
-        dataMap.s_pretagname = $('#pretagname').val()
-        dataMap.s_tagfield = $('#fieldSelect').val()
-        dataMap.s_tasktype = $('#taskSelect').val()
-        dataMap.s_query = $('#query').val()
-        dataMap.s_pretagfield = $('#pretagfield').val()
-
-        dataMap["s_globaladdkey"] = $('#g_addkey').val();
-        dataMap["s_globalnotkey"] = $('#g_notkey').val();
-        if (dataMap.s_tagname == "" || dataMap.s_tagfield == "" || dataMap.s_tasktype == "") {
-            alert("请填写必须字段!")
-            return
-        }
-        if (o_list.length > 0) {
-            for (const i in o_list) {
-                if (o_list[i].s_matchkey && !o_list[i].s_keymatch) {
-                    showMsg("保存失败,关键词规则中有关键词未对应匹配方式!")
-                    return;
-                }
-                if (o_list[i].s_addkey && !o_list[i].s_addkeymatch) {
-                    showMsg("保存失败,关键词规则中有附加词未对应匹配方式!")
-                    return;
-                }
-            }
-        }
-        dataMap["o_list"] = JSON.stringify(o_list);
-        $.ajax({
-            url: "/service/tag_rule/save",
-            type: 'POST',
-            data: dataMap,
-            success: function (r) {
-                if (r.rep && r.id) {
-                    dataMap["id"]= r.id;
-                    showTip("保存成功", 1000);
-                } else {
-                    showTip("保存失败", 1000);
-                }
-            }
-        })
-    }
-    function selectKeyMatch(val) {
-        setValue = val;
-        if (setValue == 0 || setValue == 1) {
-            matchCode.length = 0;
-            matchName.length = 0;
-            $('#modal-select-match').modal("show");
-        }else {
-            if (selectIndex.length > 0 && keyTableChecked) {
-                matchCode.length = 0;
-                matchName.length = 0;
-                $('#modal-select-match').modal("show");
-            }else {
-                alert("请选中关键词")
-            }
-        }
-    }
-    //匹配方式按钮点击事件
-    function clickMatchBtn(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            matchCode.splice($.inArray($(obj).attr("code"), matchCode), 1);
-            matchName.splice($.inArray($(obj).val(), matchName), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            matchCode.push($(obj).attr("code"));
-            matchName.push($(obj).val())
-        }
-
-        $('#btnGroupMatch2 .btn-default').each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    function clickMatchBtn2(obj) {
-        matchCode.length = 0;
-        matchName.length = 0;
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            matchCode.splice($.inArray($(obj).attr("code"), matchCode), 1);
-            matchName.splice($.inArray($(obj).val(), matchName), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            matchCode.push($(obj).attr("code"));
-            matchName.push($(obj).val())
-            $('#btnGroupMatch2 .btn-default').each(function () {
-                if (this != obj) {
-                    $(this).removeClass("active-btn-match");
-                }
-            });
-        }
-
-        $('#btnGroupMatch .btn-default').each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    //匹配方式保存
-    function saveMatch() {
-        $('#btnGroupMatch').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupMatch2').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        var matchNameStr = "";
-        var codeStr = "";
-        for (var i in matchName) {
-            if (matchNameStr == "") {
-                matchNameStr = matchName[i];
-            }else {
-                matchNameStr += "," + matchName[i]
-            }
-            if (codeStr == "") {
-                codeStr = matchCode[i]
-            }else {
-                codeStr = codeStr + "," + matchCode[i]
-            }
-        }
-        if (setValue == 0) {
-            $('#s_addkeymatch').val(matchNameStr);
-            dataMap["s_globaladdkeymatch"] = codeStr
-        }else if (setValue == 1) {
-            $('#s_notkeymatch').val(matchNameStr);
-            dataMap["s_globalnotkeymatch"] = codeStr
-        }else {
-            for (var i in selectIndex) {
-                var j = selectIndex[i] - 1;
-                if (setValue == 4) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(3)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_list[j]["s_keymatch"] = codeStr;
-                    }
-                }else if (setValue == 6) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(5)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_list[j]["s_addkeymatch"] = codeStr;
-                    }
-                }
-            }
-        }
-        $('#modal-select-match').modal("hide");
-        matchName.length = 0;
-        matchCode.length = 0;
-    }
-    var key_flag = -1;      // 0:新增,1:修改
-    //关键词表格新增
-    function add_Rule() {
-        key_flag = 0;
-        $('#keyword_txt').val("");
-        $('#addword_txt').val("");
-        $('#notword_txt').val("");
-        $('#modal-add-keyword').modal("show");
-    }
-    //关键词修改
-    function modify_Rule(){
-        if (selectIndex.length == 1) {
-            key_flag = 1;
-            var index = selectIndex[0] - 1;
-            $('#modal-add-keyword').modal("show");
-            $('#keyword_txt').val(o_list[index].s_matchkey);
-            $('#addword_txt').val(o_list[index].s_addkey);
-            $('#notword_txt').val(o_list[index].s_notkey);
-        }else {
-            showTip("请选中需要修改的关键词,且只能选中一条", 1000)
-        }
-
-    }
-    function saveKeyword() {
-        var key = $('#keyword_txt').val();
-        var addkey = $('#addword_txt').val();
-        if (key != "") {
-            var rule = {};
-            rule["s_matchkey"] = key.replace(",", ",");
-            if (addkey != "") rule["s_addkey"] = addkey.replace(",", ",");
-            $('#modal-add-keyword').modal('hide');
-            if (key_flag == 1) {
-                var index = selectIndex[0] - 1;
-                o_list.splice(index, 1, rule)
-            }else {
-                o_list.push(rule)
-            }
-            $('#keywords').dataTable().fnClearTable();
-            $('#keywords').dataTable().fnAddData(o_list);
-        }else {
-            showTip("关键词不能为空", 500)
-        }
-    }
-    //关键词删除
-    function del_Rule() {
-        if (keyTableChecked && selectIndex.length > 0) {
-            showConfirm("确定删除?", function() {
-                var tmp = []
-                for (var i in selectIndex) {
-                    var j = selectIndex[i] - 1;
-                    tmp.push(j)
-                }
-                o_list = deleteArrayVal(o_list, tmp)
-                $('#keywords').dataTable().fnClearTable();
-                $('#keywords').dataTable().fnAddData(o_list);
-
-                keyTableChecked = false;
-                if (o_list.length == 0) {
-                    $('#allCheckbox').prop("checked", false);
-                    $('#keywords').dataTable().fnClearTable();
-                }
-            })
-        }else {
-            showTip("请选中需要删除的关键词", 500)
-        }
-    }
-    function importTag() {
-        myDataTable = $('#commmontag').DataTable({
-            "destroy": true,
-            "paging": true,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "serverSide": true,
-            "ajax": {
-                url: "/service/common_rule/list",
-                type: "post",
-                data: {},
-            },
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-                $('#dataTable-btn').click(function (e) {
-                    var redirectpage = 0
-                    if ($("#changePage").val() && $("#changePage").val() > 0) {
-                        var redirectpage = $("#changePage").val() - 1;
-                    }
-                    myDataTable.page(redirectpage).draw(false);
-                });
-                this.api().column(0).nodes().each(function (cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null, width: "3%"},
-                {"data": "", render: function(val, row) {
-                        return `<input type="checkbox" onclick="selectComTag(this)" style="text-align: center">`
-                    }, width: "3%"},
-                {"data": function(row) {
-                        if (row.s_tagname) {
-                            return row.s_tagname
-                        }else {
-                            return ""
-                        }
-                    }, width: "18%"},
-                {"data": "i_updatetime", render: function (val) {
-                        var dt = new Date()
-                        dt.setTime(parseInt(val) * 1000);
-                        return dt.format("yyyy-MM-dd")
-                    }, width: "8%"},
-                {"data": function(row) {
-                        if (row.s_createuser) {
-                            return row.s_createuser
-                        }else {
-                            return ""
-                        }
-                    }, width: "18%"},
-            ]
-        });
-        $('#modal-common-tag').modal("show")
-    }
-    function selectComTag(me) {
-        var sel = $(me);
-        var isSelected = sel.prop('checked');
-        if (isSelected) {
-            $("#comrule td input[type=checkbox]").prop("checked", true);
-        } else {
-            $("#comrule td input[type=checkbox]").prop("checked", false);
-        }
-    }
-    function addComTag() {
-        var selectArr = []
-        var table = $('#commmontag').dataTable();
-        var nTrs = table.fnGetNodes();
-        for (var i = 0; i < nTrs.length; i++) {
-            if ($(nTrs[i].childNodes[1]).find("input").prop("checked")) {
-                selectArr.push(table.fnGetData(nTrs[i]))
-                if (selectArr.length > 1) {
-                    alert("只能选择一个公共标签!");
-                    return
-                }
-            }
-        }
-        if (selectArr[0].o_rules == 0) {
-            alert("选择的公共标签没有关键词规则!");
-            return;
-        }
-        //关键词规则
-        $('#keywords').dataTable().fnClearTable();
-        $('#keywords').dataTable().fnAddData(selectArr[0].o_rules);
-        $("#g_addkey").val(selectArr[0].s_globaladdkey)
-        dataMap["s_globaladdkey"] = selectArr[0].s_globaladdkey;
-        dataMap["s_globaladdkeymatch"] = selectArr[0].s_globaladdkeymatch;
-        $("#g_notkey").val(selectArr[0].s_globalnotkey)
-        dataMap["s_globalnotkey"] = selectArr[0].s_globalnotkey;
-        dataMap["s_globalnotkeymatch"] = selectArr[0].s_globalnotkeymatch;
-        if (dataMap.s_globaladdkey != "" || dataMap.s_globalnotkey != "") {
-            var addMatchName = "";
-            var notMatchName = "";
-            for (var i in matchTypeMap) {
-                if (dataMap.s_globalnotkeymatch != "" && dataMap.s_globaladdkeymatch.indexOf(matchTypeMap[i]["code"]) > -1) {
-                    if (addMatchName == "") {
-                        addMatchName = matchTypeMap[i]["name"]
-                    }else {
-                        addMatchName = addMatchName + "," + matchTypeMap[i]["name"]
-                    }
-                }
-                if (dataMap.s_globalnotkeymatch != "" && dataMap.s_globalnotkeymatch.indexOf(matchTypeMap[i]["code"]) > -1) {
-                    if (notMatchName == "") {
-                        notMatchName = matchTypeMap[i]["name"]
-                    }else {
-                        notMatchName = notMatchName + "," + matchTypeMap[i]["name"]
-                    }
-                }
-            }
-        }
-        if (addMatchName != "") $('#s_addkeymatch').val(addMatchName);
-        if (notMatchName != "") $('#s_notkeymatch').val(notMatchName);
-        o_list = selectArr[0].o_rules;
-        $('#modal-common-tag').modal("hide")
-    }
-</script>

+ 0 - 694
src/web/templates/private/tag_rule_edit.html

@@ -1,694 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-<div class="content-wrapper">
-    <section class="content-header">
-        <h1>编辑标签规则
-            <small>
-                <button class="btn btn-primary btn-sm" onclick="importRule()"><i class="fa fa-fw fa-cloud-upload fa-lg"></i>导入关键词</button>
-                <form style="display:none" id='uploadform' method='post'>
-                    <input type='file' name='xlsx' id='file'/>
-                </form>
-            </small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/rule/list"> 标签规则列表</a></li>
-            <li><a href="#"> 编辑标签规则</a></li>
-        </ol>
-    </section>
-    <!-- Main content -->
-    <section class="content">
-        <div class="tab-content">
-            <div class="nav-tabs-custom">
-                <ul class="nav nav-tabs edit-step">
-                    <li class="active" data-mode="guide"><a href="#tab_1" data-toggle="tab" aria-expanded="true">通用规则</a></li>
-                    <li data-mode="guide" class=""><a href="#tab_2" data-toggle="tab" aria-expanded="false">关键词规则</a></li>
-                    <button class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" onclick="saveTag()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存规则标签</button>
-                </ul>
-                <div class="tab-content">
-                    <div class="tab-pane active" id="tab_1">
-                        <form class="form-horizontal">
-                            <div class="box box-primary">
-                                <div class="box-header with-border">
-                                    <i class="fa fa-tag"></i>
-                                    <h3 class="box-title">通用规则</h3>
-                                </div>
-                                <div class="box-body">
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>标签规则名称</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="tagname" placeholder="标签规则名称" required
-                                                   value="{{.T.data.s_tagname}}">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>属性值</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control" id="fieldSelect">
-                                                <option selected:disabled style="diaplay:none" value="0">请选择</option>
-                                            </select>
-                                        </div>
-                                        <script>
-                                            $('#fieldSelect').change(function() {
-                                                const tmp = "pre_" + $(this).val();
-                                                $('#pretagfield').val(tmp)
-                                            })
-                                        </script>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>任务类型</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control" id="taskSelect">
-                                                <option selected:disabled style="diaplay:none" value="0">请选择</option>
-                                            </select>
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">父标签名称</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="pretagname" placeholder="父标签名称"
-                                                   value="{{.T.data.s_pretagname}}">
-                                        </div>
-                                        <label class="col-sm-2 control-label">父标签属性值</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" disabled id="pretagfield" placeholder="父标签属性值"
-                                                   value="{{.T.data.s_pretagfield}}">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label class="col-sm-2 control-label">全局附加词</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="g_addkey"
-                                                   value="{{.T.data.s_globaladdkey}}">
-                                        </div>
-                                        <label class="col-sm-2 control-label">匹配方式</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_addkeymatch" onclick="selectKeyMatch(0)" placeholder="只能选择二级公告行业类型">
-                                        </div>
-                                    </div>
-                                    <div class="form-group">
-                                        <label for="spiderChannel" class="col-sm-2 control-label">全局排除词</label>
-                                        <div class="col-sm-3">
-                                            <input type="text" class="form-control" id="g_notkey"
-                                                   value="{{.T.data.s_globalnotkey}}">
-                                        </div>
-                                        <label class="col-sm-2 control-label">匹配方式</label>
-                                        <div class="col-sm-3">
-                                            <input class="form-control" style="text-align: left;overflow: hidden;white-space: nowrap;text-overflow: ellipsis"
-                                                   type="button" id="s_notkeymatch" onclick="selectKeyMatch(1)">
-                                        </div>
-                                    </div>
-                                    <hr>
-                                    <div id="es_div" class="form-group">
-                                        <label class="col-sm-2 control-label">查询条件</label>
-                                        <div class="col-sm-8">
-                                            <textarea class="form-control" id="query" style="max-width: 100%"></textarea>
-                                        </div>
-                                    </div>
-                                </div>
-                            </div>
-                        </form>
-                    </div>
-                    <div class="tab-pane" id="tab_2">
-                        <div class="box box-primary">
-                            <div class="box-header with-border">
-                                <i class="fa fa-bookmark"></i>
-                                <h3 class="box-title">关键词规则</h3>
-                                <div style="float: right">
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(4)">关键词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(6)">附加词匹配方式</a>
-                                    <a class="btn btn-default btn-sm" onclick="selectKeyMatch(8)">排除词匹配方式</a>
-                                </div>
-                            </div>
-                            <table id="keywords" class="table table-bordered">
-                                <thead>
-                                <div style="margin: 10px 10px 0px;">
-                                    <a class="btn btn-twitter" onclick="add_Rule()">新增</a>
-                                    <a class="btn btn-twitter" onclick="modify_Rule()">修改</a>
-                                    <a class="btn btn-twitter" onclick="del_Rule()">删除</a>
-                                </div>
-                                <tr>
-                                    <th>编号</th>
-                                    <th><input type="checkbox" onclick="allSelect(this)" id="allCheckbox"></th>
-                                    <th>关键词</th>
-                                    <th>匹配方式</th>
-                                    <th>附加词</th>
-                                    <th>匹配方式</th>
-                                    <th>排除词</th>
-                                    <th>匹配方式</th>
-                                </tr>
-                                </thead>
-                            </table>
-                        </div>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </section>
-</div>
-
-<!-- 新增关键词规则模态框 -->
-<div class="modal fade" id="modal-add-keyword" tabindex="-1" role="dialog" aria-hidden="true">
-    <div class="modal-dialog" style="width: 60%">
-        <div class="modal-content">
-            <div class="modal-header">
-                <div class="modal-header">
-                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-                    <div class="edit-form">
-                        <div class="edit-info">
-                            <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span>
-                            <span>新增关键词</span>
-                        </div>
-                        <form class="form-horizontal">
-                            <div class="form-group">
-                                <label class="col-sm-2 control-label"><span style="color:red;">* </span>关键词</label>
-                                <div class="col-sm-10">
-                                    <textarea class="form-control" style="max-width: 100%" placeholder="输入关键词"
-                                              id="keyword_txt"></textarea></div>
-                            </div>
-                            <div class="form-group">
-                                <label class="col-sm-2 control-label">附加词</label>
-                                <div class="col-sm-10">
-                                    <textarea class="form-control" style="max-width: 100%" placeholder="输入附件词"
-                                              id="addword_txt"></textarea></div>
-                            </div>
-                        </form>
-                    </div>
-                </div>
-                <div class="modal-footer">
-                    <input type="button" onclick="saveKeyword()" class="btn btn-primary saveBtn" value="保存">
-                    <input type="button" onclick="cancelModel()" class="btn btn-default" style="margin-left: 24px"
-                           value="取消">
-                </div>
-            </div>
-        </div>
-    </div><!-- /.modal -->
-</div>
-<!-- 选择匹配方式模态框 -->
-<div class="modal fade" id="modal-select-match" tabindex="-1" role="dialog" aria-hidden="true">
-    <div class="modal-dialog" style="width: 50%">
-        <div class="modal-content">
-            <div class="modal-header">
-                <div class="modal-header">
-                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-                    <div class="edit-form">
-                        <div class="edit-info">
-                            <span class="glyphicon glyphicon-ok-sign" aria-hidden="true"></span>
-                            <span>匹配方式</span>
-                        </div>
-                        <div id="btnGroupMatch"></div>
-                        <div id="btnGroupMatch2" style="margin-top: 15px"></div>
-                    </div>
-                </div>
-                <div class="modal-footer">
-                    <input type="button" onclick="saveMatch()" class="btn btn-primary saveBtn" value="保存">
-                    <input type="button" onclick="cancelModel()" class="btn btn-default" style="margin-left: 24px"
-                           value="取消">
-                </div>
-            </div>
-        </div>
-    </div><!-- /.modal -->
-</div>
-{{include "com/footer.html"}}
-<script>
-    menuActive("/tag_rule/list");
-    var dataMap = {{.T.data}};
-    var TagFieldMap = {{.T.tagFieldMap}}
-    var TaskTypeMap = {{.T.taskTypeMap}}
-    var matchTypeMap = {{.T.matchTypeMap}};
-
-    var keyTableChecked = false;        //关键词表格数据是否有选中
-    var keyTableAllChecked = true;      //表单数据是否被全选中
-
-    var setValue = 0;                   // 4: 关键词匹配方式,6:附加词匹配方式
-    var selectIndex = [];               //选中的编号
-    var o_list = dataMap.o_list;
-    var matchCode = [];     //匹配方式code
-    var matchName = [];     //匹配名字
-
-    $(document).ready(function () {
-        $('#query').val(dataMap.s_query);
-        //属性值
-        for (var i in TagFieldMap) {
-            var provOpt = document.createElement('option');
-            provOpt.innerText = TagFieldMap[i].name;
-            provOpt.value = TagFieldMap[i].code;
-            if (dataMap.s_tagfield == TagFieldMap[i].code) {
-                provOpt.selected = true
-            }
-            $("#fieldSelect")[0].appendChild(provOpt);
-        }
-        //任务类型
-        for (var i in TaskTypeMap) {
-            var provOpt = document.createElement('option');
-            provOpt.innerText = TaskTypeMap[i].name;
-            provOpt.value = TaskTypeMap[i].code;
-            if (dataMap.s_tasktype == TaskTypeMap[i].code) {
-                provOpt.selected = true
-            }
-            $("#taskSelect")[0].appendChild(provOpt);
-        }
-        //匹配方式
-        var btnMatchHtml1 = "";
-        var btnMatchHtml2 = "";
-        var addMatchName = "";
-        var notMatchName = "";
-        for (var i in matchTypeMap) {
-            if (i < 5) {
-                btnMatchHtml1 += `<input type="button" class="btn btn-default col-md-pull-2" style="margin-left: 10px;margin-top: 10px" onclick="clickMatchBtn(this)"
-                            code="${matchTypeMap[i]["code"]}" value="${matchTypeMap[i]["name"]}">`;
-            }else {
-                btnMatchHtml2 += `<input type="button" class="btn btn-default col-md-pull-2" style="margin-left: 10px;margin-top: 10px" onclick="clickMatchBtn2(this)"
-                            code="${matchTypeMap[i]["code"]}" value="${matchTypeMap[i]["name"]}">`;
-            }
-            if (dataMap.s_globaladdkeymatch && dataMap.s_globaladdkeymatch.indexOf(matchTypeMap[i]["code"]) > -1) {
-                if (addMatchName == "") {
-                    addMatchName = matchTypeMap[i]["name"]
-                }else {
-                    addMatchName = addMatchName + "," + matchTypeMap[i]["name"]
-                }
-            }
-            if (dataMap.s_globalnotkeymatch && dataMap.s_globalnotkeymatch.indexOf(matchTypeMap[i]["code"]) > -1) {
-                if (notMatchName == "") {
-                    notMatchName = matchTypeMap[i]["name"]
-                }else {
-                    notMatchName = notMatchName + "," + matchTypeMap[i]["name"]
-                }
-            }
-        }
-        if (addMatchName != "") $('#s_addkeymatch').val(addMatchName);
-        if (notMatchName != "") $('#s_notkeymatch').val(notMatchName);
-        $("#btnGroupMatch").append(btnMatchHtml1);
-        $("#btnGroupMatch2").append(btnMatchHtml2);
-        $('#keywords').DataTable({
-            "paging": false,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                this.api().column(0).nodes().each(function (cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "data": dataMap.o_list,
-            "columns": [
-                {"data": null, width: "1%"},
-                {"data": "", width: "1%", render: function() {
-                        return `<input type="checkbox" name="ckb-keyid" onclick="singleSelect(this)" style="text-align: center">`
-                    }},
-                {"data": "s_matchkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_keymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-                {"data": "s_addkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_addkeymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-                {"data": "s_notkey", width: "10%"},
-                {"data": function (row) {
-                        var str = row.s_notkeymatch;
-                        if (str && str != "") {
-                            var s = "";
-                            for (var i in matchTypeMap) {
-                                if (str.indexOf(matchTypeMap[i]["code"]) != -1) {
-                                    if (s == "") {
-                                        s = matchTypeMap[i]["name"]
-                                    } else {
-                                        s = s + "," + matchTypeMap[i]["name"]
-                                    }
-                                }
-                            }
-                            return s
-                        }
-                        return ""
-                    }, width: "5%"},
-            ],
-            "columnDefs": [{
-                "targets": [2],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 44) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 44) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }, {
-                "targets": [4],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 44) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 44) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }, {
-                "targets": [6],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 44) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 44) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }]
-        });
-    })
-    function cancelModel() {
-        $('#modal-select-match').modal("hide");
-        $('#btnGroupMatch').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    function importRule() {
-        $("#file").click();
-    }
-    $(function() {
-        $("#uploadform").find("input").change(function () {
-            var val = $(this).val() ? $(this).val() : "";
-            if (val.indexOf(".xlsx") < 0) {
-                showMsg("文件格式非法", function () {
-                });
-            } else {
-                var myform = new FormData();
-                myform.append('xlsx', $("#file")[0].files[0]);
-                $.ajax({
-                    url: "/service/tag_rule/import",
-                    type: 'POST',
-                    data: myform,
-                    async: false,
-                    contentType: false,//不要设置Content-Type请求头
-                    processData: false,// 使数据不做处理
-                    success: function (r) {
-                        if (r.rep) {
-                            o_list = r.rdata["o_rules"]
-                            $('#keywords').dataTable().fnClearTable();
-                            $('#keywords').dataTable().fnAddData(o_list);
-                            showTip("导入成功",1000);
-                        } else {
-                            showTip("导入失败",1000);
-                        }
-                    }
-                })
-            }
-        })
-    });
-    function allSelect(obj) {
-        if ($(obj).is(':checked')) {
-            keyTableChecked = true;
-            keyTableAllChecked = true;
-            $('input[name="ckb-keyid"]').each(function () {
-                this.checked = true;
-                selectIndex.push($(this).parents("tr").index() + 1);
-            })
-        }else {
-            selectIndex.length = 0;
-            keyTableChecked = false;
-            keyTableAllChecked = false;
-            $('input[name="ckb-keyid"]').each(function () {
-                this.checked = false;
-            })
-        }
-    }
-    function singleSelect(obj) {
-        var tag = true;
-        selectIndex.length = 0;
-        $('input[name="ckb-keyid"]').each(function () {
-            if (this.checked) {
-                keyTableChecked = true;
-                selectIndex.push($(this).parents("tr").index() + 1);
-            }else {
-                tag = false
-            }
-        });
-        if (tag) {
-            keyTableAllChecked = true;
-            $('#allCheckbox').prop("checked", true);
-        }else {
-            keyTableAllChecked = false;
-            $('#allCheckbox').prop("checked", false);
-        }
-    }
-    function saveTag() {
-        dataMap.s_tagname = $('#tagname').val()
-        dataMap.s_tagfield = $('#fieldSelect').val()
-        dataMap.s_tasktype = $('#taskSelect').val()
-        dataMap.s_query = $('#query').val()
-        dataMap.s_pretagname = $('#pretagname').val()
-        dataMap.s_pretagfield = $('#pretagfield').val()
-        if (dataMap.s_tagname == "" || dataMap.s_tagfield == "" || dataMap.s_tasktype == "") {
-            alert("请填写必须字段!")
-            return
-        }
-        if ($('#g_addkey').val() == "") {
-            delete dataMap["s_globaladdkey"]
-            delete dataMap["s_globaladdkeymatch"]
-        }else {
-            dataMap["s_globaladdkey"] = $('#g_addkey').val();
-        }
-        if ($('#g_notkey').val() == "") {
-            delete dataMap["s_globalnotkey"]
-            delete dataMap["s_globalnotkeymatch"]
-        }else {
-            dataMap["s_globalnotkey"] = $('#g_notkey').val();
-        }
-        if (o_list.length > 0) {
-            for (const i in o_list) {
-                if (o_list[i].s_matchkey && !o_list[i].s_keymatch) {
-                    showMsg("保存失败,关键词规则中有关键词未对应匹配方式!")
-                    return;
-                }
-                if (o_list[i].s_addkey && !o_list[i].s_addkeymatch) {
-                    showMsg("保存失败,关键词规则中有附加词未对应匹配方式!")
-                    return;
-                }
-            }
-        }
-        dataMap["o_list"] = JSON.stringify(o_list);
-        $.ajax({
-            url: "/service/tag_rule/save",
-            type: 'POST',
-            data: dataMap,
-            success: function (r) {
-                if (r.rep && r.id) {
-                    dataMap["id"]= r.id;
-                    showTip("保存成功", 1000);
-                } else {
-                    showTip("保存失败", 1000);
-                }
-            }
-        })
-    }
-    function selectKeyMatch(val) {
-        setValue = val
-        if (setValue == 0 || setValue == 1) {
-            matchCode.length = 0;
-            matchName.length = 0;
-            $('#modal-select-match').modal("show");
-        }else {
-            if (selectIndex.length > 0 && keyTableChecked) {
-                matchCode.length = 0;
-                matchName.length = 0;
-                $('#modal-select-match').modal("show");
-            }else {
-                alert("请选中关键词")
-            }
-        }
-    }
-    //匹配方式按钮点击事件
-    function clickMatchBtn(obj) {
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            matchCode.splice($.inArray($(obj).attr("code"), matchCode), 1);
-            matchName.splice($.inArray($(obj).val(), matchName), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            matchCode.push($(obj).attr("code"));
-            matchName.push($(obj).val())
-        }
-
-        $('#btnGroupMatch2 .btn-default').each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    function clickMatchBtn2(obj) {
-        matchCode.length = 0;
-        matchName.length = 0;
-        if ($(obj).hasClass("active-btn-match")) {
-            $(obj).removeClass("active-btn-match")
-            matchCode.splice($.inArray($(obj).attr("code"), matchCode), 1);
-            matchName.splice($.inArray($(obj).val(), matchName), 1)
-        } else {
-            $(obj).addClass("active-btn-match");
-            matchCode.push($(obj).attr("code"));
-            matchName.push($(obj).val())
-            $('#btnGroupMatch2 .btn-default').each(function () {
-                if (this != obj) {
-                    $(this).removeClass("active-btn-match");
-                }
-            });
-        }
-
-        $('#btnGroupMatch .btn-default').each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-    }
-    //匹配方式保存
-    function saveMatch() {
-        $('#btnGroupMatch').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        $('#btnGroupMatch2').find("input").each(function () {
-            $(this).removeClass("active-btn-match");
-        });
-        var matchNameStr = "";
-        var codeStr = "";
-        for (var i in matchName) {
-            if (matchNameStr == "") {
-                matchNameStr = matchName[i];
-            }else {
-                matchNameStr += "," + matchName[i]
-            }
-            if (codeStr == "") {
-                codeStr = matchCode[i]
-            }else {
-                codeStr = codeStr + "," + matchCode[i]
-            }
-        }
-        if (setValue == 0) {
-            $('#s_addkeymatch').val(matchNameStr);
-            dataMap["s_globaladdkeymatch"] = codeStr
-        }else if (setValue == 1) {
-            $('#s_notkeymatch').val(matchNameStr);
-            dataMap["s_globalnotkeymatch"] = codeStr
-        }else {
-            for (var i in selectIndex) {
-                var j = selectIndex[i] - 1;
-                if (setValue == 4) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(3)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_list[j]["s_keymatch"] = codeStr;
-                    }
-                }else if (setValue == 6) {
-                    if ($("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child(5)").text() != "") {
-                        $("#keywords tbody tr:nth-child("+selectIndex[i]+") td:nth-child("+setValue+")").html(matchNameStr);
-                        o_list[j]["s_addkeymatch"] = codeStr;
-                    }
-                }
-            }
-        }
-
-        $('#modal-select-match').modal("hide");
-        matchName.length = 0;
-        matchCode.length = 0;
-    }
-
-    var key_flag = -1;      // 0:新增,1:修改
-    //关键词表格新增
-    function add_Rule() {
-        key_flag = 0;
-        $('#keyword_txt').val("");
-        $('#addword_txt').val("");
-        $('#notword_txt').val("");
-        $('#modal-add-keyword').modal("show");
-    }
-    //关键词修改
-    function modify_Rule(){
-        if (selectIndex.length == 1) {
-            key_flag = 1;
-            var index = selectIndex[0] - 1;
-            $('#modal-add-keyword').modal("show");
-            $('#keyword_txt').val(o_list[index].s_matchkey);
-            $('#addword_txt').val(o_list[index].s_addkey);
-            $('#notword_txt').val(o_list[index].s_notkey);
-        }else {
-            showTip("请选中需要修改的关键词,且只能选中一条", 1000)
-        }
-
-    }
-    function saveKeyword() {
-        var key = $('#keyword_txt').val();
-        var addkey = $('#addword_txt').val();
-        if (key != "") {
-            var rule = {};
-            rule["s_matchkey"] = key.replace(",", ",");
-            if (addkey != "") rule["s_addkey"] = addkey.replace(",", ",");
-            $('#modal-add-keyword').modal('hide');
-            if (key_flag == 1) {
-                var index = selectIndex[0] - 1;
-                o_list.splice(index, 1, rule)
-            }else {
-                o_list.push(rule)
-            }
-            $('#keywords').dataTable().fnClearTable();
-            $('#keywords').dataTable().fnAddData(o_list);
-        }else {
-            showTip("关键词不能为空", 500)
-        }
-    }
-    //关键词删除
-    function del_Rule() {
-        if (keyTableChecked && selectIndex.length > 0) {
-            showConfirm("确定删除?", function() {
-                var tmp = []
-                for (var i in selectIndex) {
-                    var j = selectIndex[i] - 1;
-                    tmp.push(j)
-                }
-                o_list = deleteArrayVal(o_list, tmp)
-                $('#keywords').dataTable().fnClearTable();
-                $('#keywords').dataTable().fnAddData(o_list);
-
-                keyTableChecked = false;
-                if (o_list.length == 0) {
-                    $('#allCheckbox').prop("checked", false);
-                    $('#keywords').dataTable().fnClearTable();
-                }
-            })
-        }else {
-            showTip("请选中需要删除的关键词", 500)
-        }
-    }
-</script>

+ 0 - 162
src/web/templates/private/tag_rule_list.html

@@ -1,162 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-<div class="content-wrapper" id="showbtn">
-    <section class="content-header">
-        <h1>
-            <small><a href="/service/tag_rule/create" class="btn btn-primary opr">新增标签规则</a></small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/rule/list"> 标签规则列表</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>
-                                <th>操作</th>
-                            </tr>
-                            </thead>
-                        </table>
-                    </div>
-                    <!-- /.box-body -->
-                </div>
-                <!-- /.box -->
-            </div>
-        </div>
-    </section>
-</div>
-{{include "com/footer.html"}}
-<script>
-    menuActive("/tag_rule/list");
-    var TagFieldMap = {{.T.tagFieldMap}}
-    var TaskTypeMap = {{.T.taskTypeMap}}
-    $(function () {
-        ttable = $('#dataTable').DataTable({
-            "paging": true,
-            "lengthChange": false,
-            "searching": true,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "serverSide": true,
-            "ajax": {
-                "url": "/service/tag_rule/list",
-                "type": "post",
-                "data": {}
-            },
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-                $('#dataTable-btn').click(function (e) {
-                    var redirectpage = 0
-                    if ($("#changePage").val() && $("#changePage").val() > 0) {
-                        var redirectpage = $("#changePage").val() - 1;
-                    }
-                    ttable.page(redirectpage).draw(false);
-                });
-                this.api().column(0).nodes().each(function (cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null, width: "5%"},
-                {"data": "s_tagname"},
-                {"data": "s_tagfield", render: function (val) {
-                    for (const i in TagFieldMap) {
-                        if (val == TagFieldMap[i].code) {
-                            return TagFieldMap[i].name
-                        }
-                    }
-                }},
-                {"data": "s_tasktype", render: function (val) {
-                        for (const i in TaskTypeMap) {
-                            if (val == TaskTypeMap[i].code) {
-                                return TaskTypeMap[i].name
-                            }
-                        }
-                    }},
-                {"data": "i_updatetime", width: "9%", render: function (val) {
-                    var dt = new Date()
-                    dt.setTime(parseInt(val) * 1000);
-                    return dt.format("yyyy-MM-dd")
-                }},
-                {"data": "i_isuse", render: function (val, a, row) {
-                        tmp = ""
-                        if(val == 1){
-                            tmp="<a href='#' title='停用' onclick='setup(\""+row._id+"\",false)'><i class='fa fa-fw fa-circle text-green'></i></a>已启用"
-                        }else{
-                            tmp="<a href='#' title='启用' onclick='setup(\""+row._id+"\",true)'><i class='fa fa-fw fa-circle text-red'></i></a>未启用"
-                        }
-                        return tmp
-                    }, width: "11%"
-                },
-                {"data": "_id", width: "11%", render: function (val, a, row, pos) {
-                    tmp = '<div>' +
-                        '<a class="btn btn-sm btn-primary" href="/service/tag_rule/edit?id=' + val + '">编辑</a>' +
-                        '<a class="btn btn-sm btn-danger" onclick="del(\'' + val + '\')">删除</a>' +
-                        '</div>';
-                    return tmp
-                }}
-            ]
-        });
-    });
-
-    function del(s) {
-        showConfirm("确定删除?", function () {
-            $.ajax({
-                url: "/service/tag_rule/del",
-                type: "post",
-                data: {"_id": s},
-                success: function (r) {
-                    if (r.rep) {
-                        ttable.ajax.reload();
-                    } else {
-                        alert("删除失败");
-                    }
-                }
-            })
-        });
-    }
-    function setup(val, bol) {
-        var msg = ""
-        var i_isuse = 0
-        if (bol) {
-            msg = "确定启用?"
-            i_isuse = 1
-        }else {
-            msg = "确定停用?"
-            i_isuse = 0
-        }
-        showConfirm(msg, function() {
-            $.ajax({
-                url:"/service/tag_rule/setup",
-                type:"post",
-                data:{"_id": val, "i_isuse": i_isuse},
-                success:function(r){
-                    if(r.rep){
-                        window.location.reload()
-                    }else{
-                        showTip("启用失败", 1000);
-                    }
-                }
-            })
-        });
-    }
-</script>

+ 0 - 243
src/web/templates/repair/jy_bulk.html

@@ -1,243 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-
-<div class="content-wrapper" id="showbtn">
-    <section class="content-header">
-        <h1>
-            <small>
-                <button class="btn btn-success btn-sm" onclick="importData()"><i class="fa fa-fw fa-cloud-upload fa-lg"></i>导入修改的公告</button>
-                <form style="display:none" id='uploadform' method='post'>
-                    <input type='file' name='xlsx' id='file'/>
-                </form>
-            </small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/jy/repair"> 剑鱼维护</a></li>
-        </ol>
-        <br/>
-    </section>
-    <!-- Main content -->
-    <section class="content">
-        <div class="row">
-            <div class="col-xs-12">
-                <div class="box">
-                    <div class="box-body">
-                        <h3>修改记录</h3>
-                        <table id="dataTable" class="table table-bordered table-hover">
-                            <thead>
-                            <tr>
-                                <th>编号</th>
-                                <th>数据ID</th>
-                                <th>修改人</th>
-                                <th>修改时间</th>
-                                <th>修改字段</th>
-                                <th>修改原因</th>
-                            </tr>
-                            </thead>
-                        </table>
-                    </div>
-                    <!-- /.box-body -->
-                </div>
-                <!-- /.box -->
-            </div>
-        </div>
-    </section>
-</div>
-
-<!-- 导入修改数据model -->
-<div class="modal fade" id="modal-data" tabindex="-1" role="dialog" aria-hidden="true">
-    <div class="modal-dialog" style="width: 70%">
-        <div class="modal-content">
-            <div class="modal-header">
-                <div class="modal-header">
-                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-                    <div class="edit-form">
-                        <div class="edit-info">
-                            <span class="info"><i class="fa fa-fw fa-tags fa-lg"></i>修改数据</span>
-                        </div>
-                        <div class="content modal-content">
-                            <table id="modifyData" class="table table-bordered">
-                                <thead>
-                                <tr>
-                                    <th>编号</th>
-                                    <th>修改内容</th>
-                                </tr>
-                                </thead>
-                            </table>
-                        </div>
-                    </div>
-                </div>
-                <div class="modal-footer">
-                    <input type="button" onclick="saveModify()" class="btn btn-primary saveBtn" value="修改">
-                    <input type="button" onclick="cancelModel()" class="btn btn-default" style="margin-left: 24px" value="取消">
-                </div>
-            </div>
-        </div>
-    </div><!-- /.modal -->
-</div>
-
-{{include "com/footer.html"}}
-<script>
-    menuActive("/service/jy/bulk_repair");
-
-    var curColl = ""
-    var modifyData = {}
-
-    $(document).ready(function () {
-        ttable = $('#dataTable').DataTable({
-            "paging": true,
-            "lengthChange": false,
-            "searching": true,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "serverSide": true,
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "ajax": {
-                "url": "/service/jy/modifyRecord",
-                "type": "post",
-                "data": {}
-            },
-            "fnDrawCallback": function () {
-                $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-                $('#dataTable-btn').click(function (e) {
-                    var redirectpage = 0
-                    if ($("#changePage").val() && $("#changePage").val() > 0) {
-                        var redirectpage = $("#changePage").val() - 1;
-                    }
-                    ttable.page(redirectpage).draw(false);
-                });
-                this.api().column(0).nodes().each(function(cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null, width:"4%"},
-                {"data": "s_backupid", width: "10%"},
-                {"data": "s_modifyuser", width: "7%"},
-                {"data": "i_modifytime", width:"11%", render: function (val) {
-                        var dt = new Date()
-                        dt.setTime(parseInt(val) * 1000);
-                        return dt.format("yyyy-MM-dd")
-                    }},
-                {"data": function (row) {
-                        var str = ""
-                        for (const rowKey in row["modifyinfo"]) {
-                            str += rowKey + ","
-                        }
-                        return str
-                    }},
-                {"data": "s_modifyreason", width: "15%"}
-            ]
-        });
-
-        modifyData = $('#modifyData').DataTable({
-            "paging": true,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-                $('#dataTable-btn').click(function (e) {
-                    var redirectpage = 0
-                    if ($("#changePage").val() && $("#changePage").val() > 0) {
-                        var redirectpage = $("#changePage").val() - 1;
-                    }
-                    modifyData.page(redirectpage).draw(false);
-                });
-                this.api().column(0).nodes().each(function(cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null, width: "7%"},
-                {"data": function (row) {
-                    var str = ""
-                        for (const rowKey in row) {
-                            str += rowKey + ":" + row[rowKey] + ","
-                        }
-                    return str
-                    }}
-            ],
-            "columnDefs": [{
-                "targets": [1],
-                "render": function (data, type, full, meta) {
-                    if (data && data.length > 180) {
-                        return "<a title='" + data + "' href='#' style='text-decoration: none;'>" + data.trim().substr(0, 180) + "..." + "</a>";
-                    }else if (data == undefined) {
-                        return ""
-                    }else {
-                        return data
-                    }
-                }
-            }]
-        });
-    });
-    function importData() {
-        $("#file").click();
-    }
-    $(function() {
-        $("#uploadform").find("input").change(function () {
-            var val = $(this).val() ? $(this).val() : "";
-            if (val.indexOf(".xlsx") < 0) {
-                showMsg("文件格式非法", function () {
-                });
-            } else {
-                var myform = new FormData();
-                myform.append('xlsx', $("#file")[0].files[0]);
-                $.ajax({
-                    url: "/service/jy/importData",
-                    type: 'POST',
-                    data: myform,
-                    async: false,
-                    contentType: false,
-                    processData: false,
-                    success: function (r) {
-                        if (r.rep) {
-                            modifyData = r.data;
-                            showTip("导入成功", 500);
-                            $('#modifyData').dataTable().fnClearTable();
-                            $('#modifyData').dataTable().fnAddData(r.data);
-                            $('#modal-data').modal("show")
-                        } else {
-                            showTip("导入失败",1000);
-                        }
-                    }
-                })
-            }
-        })
-    });
-
-    function cancelModel() {
-        $('#modal-data').modal("hide")
-    }
-
-    function saveModify() {
-        $.ajax({
-            url: "/service/jy/modifySave",
-            type: 'POST',
-            data: {"data": JSON.stringify(modifyData)},
-            success: function (r) {
-                if (r.rep) {
-                    showTip("保存成功", 1000);
-                    ttable.ajax.reload();
-                } else {
-                    showTip("保存失败", 1000);
-                }
-                $('#modal-data').modal("hide")
-            }
-        })
-    }
-
-</script>

+ 0 - 151
src/web/templates/repair/jy_create.html

@@ -1,151 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-
-<style>
-    /* 方法1:设置textarea合适的宽高 */
-    #jsonTextarea {
-        float: left;
-        margin-right: 20px;
-        width: 40%;
-        height: 70vh;
-        outline: none;
-        padding: 5px;
-    }
-
-    /* 方法2:自定义高亮样式 */
-    #jsonPre {
-        float: left;
-        width: 40%;
-        height: 70vh;
-        outline: 1px solid #ccc;
-        padding: 5px;
-        overflow: scroll;
-    }
-</style>
-
-<div class="content-wrapper">
-    <section class="content-header">
-        <h1>新增数据</h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/jy/repair"> 剑鱼维护</a></li>
-            <li><a href="#"> 添加数据</a></li>
-        </ol>
-    </section>
-    <!-- Main content -->
-    <section class="content">
-        <div class="nav-tabs-custom">
-            <ul class="nav nav-tabs edit-step">
-                </br>
-                <button class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" onclick="saveRepair()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存数据</button>
-                </br></br></br>
-            </ul>
-            <div class="box-body">
-                <div class="form-group">
-                    <div class="col-sm-3">
-                        <input type="text" class="form-control" id="reasons" placeholder="请输入新增原因" required>
-                    </div>
-                </div>
-            </div>
-            <form class="form-horizontal">
-                <div class="box-body">
-                    <textarea id="jsonTextarea" style="width: 100%;height: 300px;padding: 5px"></textarea>
-                </div>
-                <div class="box-body">
-                    <label class="col-sm-2 control-left"><span style="color:red;">* </span>请填写detail</label>
-                    <textarea id="jsonDetail" style="width: 100%;height: 300px;padding: 5px"></textarea>
-                    <label class="col-sm-2 control-left"><span style="color:red;">* </span>请填写contenthtml</label>
-                    <textarea id="jsonContentHtml" style="width: 100%;height: 300px;padding: 5px"></textarea>
-                </div>
-                <div class="box-body" id="summaryDiv">
-                    <label class="col-sm-2 control-left">请填写summary</label>
-                    <textarea id="summary" style="width: 100%;height: 200px;padding: 5px"></textarea>
-                </div>
-            </form>
-        </div>
-    </section>
-</div>
-
-{{include "com/footer.html"}}
-<script>
-    menuActive("/service/jy/repair");
-    var create_data = {{.T.data}}
-    function parse(str) {
-        return JSON.stringify(str, null, "\t")
-    }
-    $('#jsonTextarea').val(parse(create_data))
-
-
-    //添加更新
-    function saveRepair() {
-        var reason=$("#reasons").val()
-        if (reason=="") {
-            let msg = "请填写新增数据原因"
-            showMsg(msg)
-            return;
-        }
-
-        var curData = document.getElementById('jsonTextarea').value;
-        var data = JSON.parse(curData)
-        var updata = {}
-        for (var k in data) {
-            updata[k] = data[k]
-        }
-        //处理特殊字段
-        if (checkAddDict(updata)) {
-            let msg = "title,site,spidercode\nhref,channel,toptype\nsubtype,area\n非空必填信息,请补充完善信息"
-            showMsg(msg)
-            return;
-        }
-
-        var detail = document.getElementById('jsonDetail').value
-        var tmp_detail = ''+detail
-        if (tmp_detail=="") {
-            let msg = "请填写detail"
-            showMsg(msg)
-            return;
-        }
-
-        var content = document.getElementById('jsonContentHtml').value
-        var tmp_content = ''+content
-        if (tmp_content=="") {
-            let msg = "请填写contenthtml"
-            showMsg(msg)
-            return;
-        }
-
-        var tmp_summary = $('#summary').val();
-        showConfirm("确定添加新信息?", function() {
-            $.ajax({
-                url: "/service/jy/newSave",
-                type: 'POST',
-                data: {"data":JSON.stringify(updata),
-                    "contenthtml": tmp_content,
-                    "detail": tmp_detail,
-                    "summary": tmp_summary,
-                    "reasons":reason,
-                },
-                success: function (task) {
-                    if (task.rep) {
-                        window.location.href="/service/jy/repair"
-                    } else {
-                        showTip("添加失败,请检查数据后在试");
-                    }
-                }
-            })
-        });
-    }
-
-    function checkAddDict(data) {
-        if (data["title"]==""||data["site"]==""||data["spidercode"]==""||
-            data["href"]==""||data["channel"]==""|| data["toptype"]==""||
-            data["subtype"]==""|| data["area"]==""){
-            return true
-        }
-        return false
-    }
-
-</script>

+ 0 - 205
src/web/templates/repair/jy_edit.html

@@ -1,205 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-
-<style>
-    /* 方法1:设置textarea合适的宽高 */
-    #jsonTextarea {
-        float: left;
-        margin-right: 20px;
-        width: 40%;
-        height: 70vh;
-        outline: none;
-        padding: 5px;
-    }
-
-    /* 方法2:自定义高亮样式 */
-    #jsonPre {
-        float: left;
-        width: 40%;
-        height: 70vh;
-        outline: 1px solid #ccc;
-        padding: 5px;
-        overflow: scroll;
-    }
-</style>
-
-
-<div class="content-wrapper">
-    <section class="content-header">
-        <h1>维护数据</h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/jy/repair"> 剑鱼维护</a></li>
-            <li><a href="#"> 修复数据</a></li>
-        </ol>
-    </section>
-    <!-- Main content -->
-    <section class="content">
-        <div class="nav-tabs-custom">
-            <ul class="nav nav-tabs edit-step">
-                </br>
-                <button class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" onclick="saveRepair()"><i class="fa fa-fw fa-file-text fa-lg"></i>更新数据</button>
-                </br></br></br>
-            </ul>
-            <div class="box-body">
-                <div class="form-group">
-                    <div class="col-sm-3">
-                        <input type="text" class="form-control" id="reasons" placeholder="请输入更新原因" required>
-                    </div>
-                </div>
-            </div>
-            <form class="form-horizontal">
-                <div class="box-body">
-                    <textarea id="jsonTextarea" style="width: 100%;height: 300px"></textarea>
-                </div>
-                <div class="box-body">
-                    <label class="col-sm-2 control-left"><span style="color:red;">* </span>请填写detail</label>
-                    <textarea id="jsonDetail" style="width: 100%;height: 300px;padding: 5px"></textarea>
-                    <label class="col-sm-2 control-left"><span style="color:red;">* </span>请填写contenthtml</label>
-                    <textarea id="jsonContentHtml" style="width: 100%;height: 300px;padding: 5px"></textarea>
-                </div>
-                <div class="box-body" id="summaryDiv">
-                    <label class="col-sm-2 control-left">请填写summary</label>
-                    <textarea id="summary" style="width: 100%;height: 200px;padding: 5px"></textarea>
-                </div>
-            </form>
-        </div>
-    </section>
-</div>
-
-{{include "com/footer.html"}}
-<script>
-    menuActive("/service/jy/repair");
-    var edit_data = {{.T.data}};
-    var edit_contentHtml = {{.T.contenthtml}};
-    var edit_detail = {{.T.detail}};
-    var edit_coll = {{.T.coll}};
-    var edit_summary = {{.T.summary}};
-    function parse(str) {
-        return JSON.stringify(str, null, "\t")
-    }
-    $('#jsonTextarea').val(parse(edit_data)); //其他属性
-    $('#jsonDetail').val(edit_detail); //其他属性
-    $('#jsonContentHtml').val(edit_contentHtml); //其他属性
-    $('#summary').val(edit_summary);
-
-    //更新
-    function saveRepair() {
-
-        var reason=$("#reasons").val()
-        if (reason=="") {
-            let msg = "请填写新增数据原因"
-            showMsg(msg)
-            return;
-        }
-
-        var curData = document.getElementById('jsonTextarea').value;
-        var data = JSON.parse(curData)
-        // 处理特殊字段
-        if (checkAddDict(data)) {
-            let msg = "title,site,spidercode\nhref,channel,toptype\nsubtype,area\n非空必填信息,请补充完善信息"
-            showMsg(msg)
-            return;
-        }
-
-
-        var detail = document.getElementById('jsonDetail').value
-        var tmp_detail = ''+detail
-        if (tmp_detail=="") {
-            let msg = "请填写detail"
-            showMsg(msg)
-            return;
-        }
-
-        var content = document.getElementById('jsonContentHtml').value
-        var tmp_content = ''+content
-        if (tmp_content=="") {
-            let msg = "请填写contenthtml"
-            showMsg(msg)
-            return;
-        }
-
-        var modifyinfo = {}
-        var updata = {}
-        updata["_id"] = data["_id"]
-        // 删除、修改
-        for (let editDataKey in edit_data) {
-            if (typeof edit_data[editDataKey] == "object") {
-                if (JSON.stringify(data[editDataKey]) != JSON.stringify(edit_data[editDataKey])) {
-                    modifyinfo[editDataKey] = "剑鱼维护"
-                    updata[editDataKey] = data[editDataKey]
-                }
-            }else {
-                if (data[editDataKey] != edit_data[editDataKey]) {
-                    modifyinfo[editDataKey] = "剑鱼维护"
-                    updata[editDataKey] = data[editDataKey]
-
-                }
-            }
-        }
-        //新增
-        for (let dataKey in data) {
-            if (edit_data[dataKey] == undefined) {
-                modifyinfo[dataKey] = "剑鱼维护"
-                updata[dataKey] = data[dataKey]
-            }
-        }
-        if (edit_detail != tmp_detail) {
-            modifyinfo["detail"] = "剑鱼维护"
-            updata["detail"] = tmp_detail
-        }
-        if (edit_contentHtml != tmp_content) {
-            modifyinfo["contenthtml"] = "剑鱼维护"
-            updata["contenthtml"] = tmp_content
-        }
-        var tmp_summary = $('#summary').val();
-        if (edit_summary != tmp_summary) {
-            modifyinfo["summary"] = "剑鱼维护"
-            updata["summary"] = tmp_summary
-        }
-
-        var str = ""
-        if (Object.keys(updata).length == 0) {
-            str = "没有修改任何字段信息!"
-            showTip(str)
-            return
-        }else {
-            str = "确定修改以下字段信息?" + "<br>"
-            for (const modifyinfoKey in modifyinfo) {
-                str = str + modifyinfoKey + ","
-            }
-        }
-        showConfirm(str, function() {
-            $.ajax({
-                url: "/service/jy/save",
-                type: 'POST',
-                data: {"data": JSON.stringify(updata),
-                    "modifyinfo": JSON.stringify(modifyinfo),
-                    "coll": edit_coll,
-                    "reasons": reason,
-                },
-                success: function (task) {
-                    if (task.rep) {
-                        window.location.href="/service/jy/repair"
-                    } else {
-                        showTip("更新失败,请稍后在试");
-                    }
-                }
-            })
-        });
-
-    }
-
-    function checkAddDict(data) {
-        if (data["title"]==""||data["site"]==""||data["spidercode"]==""||
-            data["href"]==""||data["channel"]==""|| data["toptype"]==""||
-            data["subtype"]==""|| data["area"]==""){
-            return true
-        }
-        return false
-    }
-
-</script>

+ 0 - 131
src/web/templates/repair/jy_pro_repair.html

@@ -1,131 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-
-<div class="content-wrapper">
-    <section class="content-header">
-        <h1>剑鱼项目数据维护
-            <small>
-                <button class="btn btn-instagram btn-sm" onclick="modifySingle()"><i class="fa fa-fw fa-edit fa-lg"></i>单条修改</button>
-                <button class="btn btn-success btn-sm" onclick="importData()"><i class="fa fa-fw fa-cloud-upload fa-lg"></i>导入批量修改的数据</button>
-                <form style="display:none" id='uploadform' method='post'>
-                    <input type='file' name='xlsx' id='file'/>
-                </form>
-            </small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/jy/repair"> 剑鱼项目维护</a></li>
-        </ol>
-
-        <br/>
-    </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>
-
-{{include "com/footer.html"}}
-<script>
-    menuActive("/jy/repair");
-    $(document).ready(function () {
-        ttable = $('#dataTable').DataTable({
-            "paging": false,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": false,
-            "autoWidth": false,
-            "serverSide": false,
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-                $('#dataTable-btn').click(function (e) {
-                    var redirectpage = 0
-                    if ($("#changePage").val() && $("#changePage").val() > 0) {
-                        var redirectpage = $("#changePage").val() - 1;
-                    }
-                    ttable.page(redirectpage).draw(false);
-                });
-                this.api().column(0).nodes().each(function(cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null,width:"8%"},
-                {"data": "title", width: "40%"},
-                {"data": function (row) {
-                        if (row.href) {
-                            var str = "链接地址"
-                            tmp = '<a class="" target="_blank" href=' + row.href + '>' + str + '</a>';
-                            return tmp
-                        } else {
-                            return ""
-                        }
-                    }},
-                {"data": curColl, render: function (val){
-                        return curColl
-                    }},
-                {"data": "publishtime",width:"15%", render: function (val) {
-                        var dt = new Date()
-                        dt.setTime(parseInt(val) * 1000);
-                        return dt.format("yyyy-MM-dd")
-                    }},
-                {"data": "_id", width:"15%",render: function (val, a, row, pos) {
-                        tmp = '<div>' +
-                            '<a class="btn btn-sm btn-primary" href="/service/jy/edit?id='+val+'&coll='+curColl+'">编辑</a>'+
-                            '&nbsp'+'&nbsp'+//href="/service/jy/edit?id='+val+'
-                            '<a class="btn btn-sm btn-danger" onclick="del_repair(\''+val+'\',\''+curColl+'\')">删除</a>'+
-                            '</div>';
-                        return tmp
-                    }}
-            ]
-        });
-    });
-
-    function idSearch() {
-        var search_name = $('#idSea').val()
-        $.ajax({
-            url:"/service/jy/searchID",
-            type:"post",
-            data:{"_id": search_name},
-            success:function(r){
-                if (r.rep) {
-                    curColl = r.orgColl
-                    $('#dataTable').dataTable().fnClearTable();
-                    $('#dataTable').dataTable().fnAddData(r.data);
-                }else {
-                    showTip(r.msg)
-                }
-            }
-        })
-    }
-
-
-</script>

+ 0 - 210
src/web/templates/repair/jy_repair.html

@@ -1,210 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-
-<style>
-    .j-input__inner {
-        box-sizing: border-box;
-        display: inline-block;
-        padding: 0px 45px 0px 15px;
-        width: 300px;
-        height: 40px;
-        color: #1D1D1D;
-
-        background-color: #fff;
-        background-image: none;
-        line-height: 40px;
-        font-size: inherit;
-        -webkit-appearance: none;
-        outline: none;
-        border: 1px solid #dcdfe6;
-        border-radius: 4px;
-        transition: border-color 0.2s cubic-bezier(0.645, 0.045, 0.355, 1);
-    }
-    .j-input__inner:hover {
-        border-color: #c0c4cc;
-    }
-    .j-input__inner:focus {
-        border-color: #409eff;
-    }
-    .search-icon {
-        position:relative;
-        width: 30px;
-        height: 30px;
-        top: 0px;
-        right: 40px;
-    }
-</style>
-
-<div class="content-wrapper" id="showbtn">
-    <section class="content-header">
-
-        <h1>
-            <small><a href="/service/jy/create" class="btn btn-primary opr">新增信息</a></small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/jy/repair"> 剑鱼维护</a></li>
-        </ol>
-
-        <br/>
-    </section>
-    <!-- Main content -->
-    <section class="content">
-        <div class="row">
-            <div class="col-xs-12">
-                <div class="box">
-                    <div class="box-body">
-                        <div class="tab-content">
-                            <input class="j-input__inner" type="text" placeholder="请输入查询的id" id="idSea">
-                            <img src="/picture/img_search.jpg" class="search-icon" onclick="idSearch()" />
-                            <input class="j-input__inner" type="text" placeholder="请输入查询的剑鱼链接" id="jyurlSea">
-                            <img src="/picture/img_search.jpg" class="search-icon" onclick="jyurlSearch()" />
-                        </div>
-
-                        <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>
-
-{{include "com/footer.html"}}
-<script>
-    menuActive("/jy/repair");
-
-    var curColl = ""
-
-    $(document).ready(function () {
-        ttable = $('#dataTable').DataTable({
-            "paging": false,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": false,
-            "autoWidth": false,
-            "serverSide": false,
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-                $('#dataTable-btn').click(function (e) {
-                    var redirectpage = 0
-                    if ($("#changePage").val() && $("#changePage").val() > 0) {
-                        var redirectpage = $("#changePage").val() - 1;
-                    }
-                    ttable.page(redirectpage).draw(false);
-                });
-                this.api().column(0).nodes().each(function(cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null,width:"8%"},
-                {"data": "title", width: "40%"},
-                {"data": function (row) {
-                        if (row.href) {
-                            var str = "链接地址"
-                            tmp = '<a class="" target="_blank" href=' + row.href + '>' + str + '</a>';
-                            return tmp
-                        } else {
-                            return ""
-                        }
-                    }},
-                {"data": curColl, render: function (val){
-                        return curColl
-                    }},
-                {"data": "publishtime",width:"15%", render: function (val) {
-                        var dt = new Date()
-                        dt.setTime(parseInt(val) * 1000);
-                        return dt.format("yyyy-MM-dd")
-                    }},
-                {"data": "_id", width:"15%",render: function (val, a, row, pos) {
-                        tmp = '<div>' +
-                            '<a class="btn btn-sm btn-primary" href="/service/jy/edit?id='+val+'&coll='+curColl+'">编辑</a>'+
-                            '&nbsp'+'&nbsp'+//href="/service/jy/edit?id='+val+'
-                            '<a class="btn btn-sm btn-danger" onclick="del_repair(\''+val+'\',\''+curColl+'\')">删除</a>'+
-                            '</div>';
-                        return tmp
-                    }}
-            ]
-        });
-    });
-
-    function idSearch() {
-        var search_name = $('#idSea').val()
-        $.ajax({
-            url:"/service/jy/searchID",
-            type:"post",
-            data:{"_id": search_name},
-            success:function(r){
-                if (r.rep) {
-                    curColl = r.orgColl
-                    $('#dataTable').dataTable().fnClearTable();
-                    $('#dataTable').dataTable().fnAddData(r.data);
-                }else {
-                    showTip(r.msg)
-                }
-            }
-        })
-    }
-    function jyurlSearch() {
-        var search_name = $('#jyurlSea').val()
-        $.ajax({
-            url:"/service/jy/searchJyurl",
-            type:"post",
-            data:{"jyurl": search_name},
-            success:function(r){
-                if (r.rep) {
-                    curColl = r.orgColl
-                    $('#dataTable').dataTable().fnClearTable();
-                    $('#dataTable').dataTable().fnAddData(r.data);
-                }else {
-                    showTip("请输入正确的剑鱼链接")
-                }
-            }
-        })
-    }
-
-
-    function del_repair(del_id,coll){
-        showConfirm("确定删除?", function() {
-            $.ajax({
-                url:"/service/jy/delete",
-                type:"post",
-                data:{"_id": del_id,"coll":curColl},
-                success:function(r){
-                    if(r.rep){
-                        $('#dataTable').dataTable().fnClearTable();
-                        showTip("删除成功")
-                    }else{
-                        alert("删除失败");
-                    }
-                }
-            })
-        });
-    }
-
-
-
-
-
-
-</script>

+ 0 - 259
src/web/templates/task/task_create.html

@@ -1,259 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-
-<div class="content-wrapper">
-    <section class="content-header">
-        <h1>新建任务</h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/task/list">任务列表</a></li>
-            <li><a href="#">新任务</a></li>
-        </ol>
-    </section>
-    <!-- Main content -->
-    <section class="content">
-        <div class="nav-tabs-custom">
-            <ul class="nav nav-tabs edit-step">
-                </br>
-                <button class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" onclick="saveTask()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存任务</button>
-                </br></br></br>
-            </ul>
-            <form class="form-horizontal">
-                {{/*<div class="box box-primary">*/}}
-                <div class="box-body">
-                    {{/*第一组*/}}
-                    <div class="form-group">
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>任务名称</label>
-                        <div class="col-sm-3">
-                            <input type="text" class="form-control" id="taskname" placeholder="请输入任务名称" required>
-                        </div>
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>任务类型</label>
-                        <div class="col-sm-3">
-                            <select class="form-control selectpicker" id="taskTypeSelect">
-                            </select>
-                            <script>
-                                $('#taskTypeSelect').on('hide.bs.select', function () {
-                                    var num = $(this).val()
-                                    var index = Number(num)-Number(1)
-                                    if ($(this).val() == 0) {
-                                        dict["s_tasktype"] = ""
-                                    }else {
-                                        dict["s_tasktype"] = codeType[index]["code"]
-                                    }
-
-                                })
-                            </script>
-
-                        </div>
-
-                    </div>
-                    <hr>
-                    <div class="form-group">
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>udp地址</label>
-                        <div class="col-sm-3">
-                            <input type="text" class="form-control" id="udpaddr" placeholder="请输入地址" required>
-                        </div>
-
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>udp端口</label>
-                        <div class="col-sm-3">
-                            <input type="text" class="form-control" id="udport" placeholder="请输入端口" required>
-                        </div>
-                    </div>
-
-
-                    <div class="form-group">
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>起始id</label>
-                        <div class="col-sm-3">
-                            <input type="text" class="form-control" id="startid" placeholder="请输入起始id" required>
-                        </div>
-
-
-                        <label class="col-sm-2 control-label">是否清理原标签</label>
-                        <div class="col-sm-3">
-                            <select class="form-control selectpicker" id="clearTagSelect">
-                                <option value=0>否</option>
-                                <option value=1>是</option>
-                            </select>
-                            <script>
-                                $('#clearTagSelect').on('changed.bs.select', function () {
-                                    if ($(this).val() == 0) {
-                                        dict["b_isclearoldtag"] = false
-                                    } else {
-                                        dict["b_isclearoldtag"] = true
-                                    }
-                                })
-                            </script>
-                        </div>
-
-                    </div>
-                    <hr>
-                    {{/*第二组*/}}
-                    <div class="form-group">
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>from方式类型</label>
-                        <div class="col-sm-3">
-                            <select class="form-control selectpicker" id="fromTypeSelect">
-                                <option selected:disabled style="diaplay:none" value=0>请选择</option>
-                                <option value=1>es</option>
-                                <option value=2>mongodb</option>
-                            </select>
-                            <script>
-                                $('#fromTypeSelect').on('changed.bs.select', function () {
-                                    if ($(this).val() == 0) {
-                                        hide()
-                                        dict["s_fromtype"] = ""
-                                    }else if ($(this).val() == 1) {
-                                        hide()
-                                        dict["s_fromtype"] = "es"
-                                    } else if ($(this).val() == 2) {
-                                        show()
-                                        dict["s_fromtype"] = "mongodb"
-                                    }
-                                    dict["s_synces"] = "0"
-                                })
-
-                                function hide() {
-                                    var ui =document.getElementById("isHideGroup");
-                                    ui.style.display="none";
-                                }
-                                function show() {
-                                    var ui =document.getElementById("isHideGroup");
-                                    ui.style.display="";
-                                    //置为默认
-                                    $("#syncesSelect").selectpicker('val', 0);
-                                }
-                            </script>
-                        </div>
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>from地址</label>
-                        <div class="col-sm-3">
-                            <input type="text" class="form-control" id="fromdburl" placeholder="请输入地址"
-                                   value="">
-                        </div>
-                    </div>
-
-                    <div class="form-group">
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>from数据库/index</label>
-                        <div class="col-sm-3">
-                            <input type="text" class="form-control" id="fromdbname" placeholder="请输入数据库名/index"
-                                   value="">
-                        </div>
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>from表</label>
-                        <div class="col-sm-3">
-                            <input type="text" class="form-control" id="fromdbcoll" placeholder="请输入表名"
-                                   value="" required>
-                        </div>
-                    </div>
-                    <hr>
-                    {{/*第三组*/}}
-
-                    <div class="form-group" id="isHideGroup">
-                        <label class="col-sm-2 control-label">是否同步es</label>
-                        <div class="col-sm-3">
-                            <select class="form-control selectpicker" id="syncesSelect">
-                                <option value=0>否</option>
-                                <option value=1>是</option>
-                            </select>
-                            <script>
-                                $('#syncesSelect').on('changed.bs.select', function () {
-                                    if ($(this).val() == 0) {
-                                        dict["s_synces"] = "0"
-                                    } else {
-                                        dict["s_synces"] = "1"
-                                    }
-                                })
-                            </script>
-                        </div>
-                    </div>
-                </div>
-
-            </form>
-        </div>
-    </section>
-</div>
-
-{{include "com/footer.html"}}
-<script>
-    menuActive("/service/task/list");
-
-    var ui =document.getElementById("isHideGroup");
-    ui.style.display="none";
-
-    var codeType = {{.T.taskType}};
-
-    var dict = {
-        "id":"",
-        "s_udpaddr":"",
-        "s_udport":"",
-        "s_taskname": "",
-        "s_isuse": "0",
-        "s_tasktype": "",
-        "s_startid":"",
-        "s_fromtype": "",
-        "s_fromdburl": "",
-        "s_fromdbname": "",
-        "s_fromdbcoll": "",
-        "i_createtime": "",
-        "s_createuser": "",
-        "i_updatetime": "",
-        "s_updateuser": "",
-        "s_synces":"0",
-        "b_isclearoldtag":false,
-    };
-
-    //选择器添加数据
-    var index = Number(0)
-    for (var i in codeType) {
-        var name = codeType[i]["name"]
-        if (i==0) {
-            $("#taskTypeSelect").append("<option selected:disabled style=\"diaplay:none\" value="+index+">请选择</option>");
-            index++
-        }
-        $("#taskTypeSelect").append("<option value="+index+">"+name+"</option>");
-        index++
-
-    }
-
-    function checkDict(data)  {
-        if (data["s_taskname"]==""||data["s_tasktype"]==""||data["s_startid"]==""||
-            data["s_fromdburl"]==""||data["s_fromdbname"]==""|| data["s_fromdbcoll"]==""||
-            data["s_fromtype"]==""|| data["s_udpaddr"]=="" || data["s_udport"]=="") {
-            return true
-        }
-        return false
-    }
-    function saveTask() {
-        dict["s_taskname"] = $('#taskname').val();
-        dict["s_startid"] = $('#startid').val();
-        dict["s_fromdburl"] = $('#fromdburl').val();
-        dict["s_fromdbname"] = $("#fromdbname").val();
-        dict["s_fromdbcoll"] = $("#fromdbcoll").val();
-        dict["s_udpaddr"] = $('#udpaddr').val();
-        dict["s_udport"] = $("#udport").val();
-
-        if (checkDict(dict)) {
-            let msg = "请完善所有信息"
-            showMsg(msg);
-            return;
-        }
-        $.ajax({
-            url: "/service/task/save",
-            type: 'POST',
-            data: dict,
-            success:function (task) {
-                if (task.rep) {
-                    window.location.href="/service/task/list"
-                } else {
-                    showTip("保存失败",1000);
-                }
-            }
-        })
-    }
-
-
-
-
-
-
-</script>

+ 0 - 278
src/web/templates/task/task_edit.html

@@ -1,278 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-
-<div class="content-wrapper">
-    <section class="content-header">
-        <h1>编辑任务</h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/task/list">任务列表</a></li>
-            <li><a href="#">编辑任务</a></li>
-        </ol>
-    </section>
-    <!-- Main content -->
-    <section class="content">
-        <div class="nav-tabs-custom">
-            <ul class="nav nav-tabs edit-step">
-                </br>
-                <button class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" onclick="saveTask()"><i class="fa fa-fw fa-file-text fa-lg"></i>更新任务</button>
-                </br></br></br>
-            </ul>
-            <form class="form-horizontal">
-                {{/*<div class="box box-primary">*/}}
-                <div class="box-body">
-                    {{/*第一组*/}}
-                    <div class="form-group">
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>任务名称</label>
-                        <div class="col-sm-3">
-                            <input type="text" class="form-control" id="taskname" placeholder="请输入任务名称" required>
-                        </div>
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>任务类型</label>
-                        <div class="col-sm-3">
-                            <select class="form-control selectpicker" id="taskTypeSelect">
-                            </select>
-                            <script>
-                                $('#taskTypeSelect').on('hide.bs.select', function () {
-                                    var num = $(this).val()
-                                    var index = Number(num)-Number(1)
-                                    if ($(this).val() == 0) {
-                                        dict["s_tasktype"] = ""
-                                    }else {
-                                        dict["s_tasktype"] = codeType[index]["code"]
-                                    }
-                                })
-                            </script>
-
-                        </div>
-
-                    </div>
-
-                    <hr>
-
-                    <div class="form-group">
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>udp地址</label>
-                        <div class="col-sm-3">
-                            <input type="text" class="form-control" id="udpaddr" placeholder="请输入地址" required>
-                        </div>
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>udp端口</label>
-                        <div class="col-sm-3">
-                            <input type="text" class="form-control" id="udport" placeholder="请输入端口" required>
-                        </div>
-                    </div>
-
-
-                    <div class="form-group">
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>起始id</label>
-                        <div class="col-sm-3">
-                            <input type="text" class="form-control" id="startid" placeholder="请输入起始id" required>
-                        </div>
-
-                        <label class="col-sm-2 control-label">是否清理原标签</label>
-                        <div class="col-sm-3">
-                            <select class="form-control selectpicker" id="clearTagSelect">
-                                <option value=0>否</option>
-                                <option value=1>是</option>
-                            </select>
-                            <script>
-                                $('#clearTagSelect').on('changed.bs.select', function () {
-                                    if ($(this).val() == 0) {
-                                        dict["b_isclearoldtag"] = false
-                                    } else {
-                                        dict["b_isclearoldtag"] = true
-                                    }
-                                })
-                            </script>
-                        </div>
-
-                    </div>
-                    <hr>
-                    {{/*第二组*/}}
-                    <div class="form-group">
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>from方式类型</label>
-                        <div class="col-sm-3">
-                            <select class="form-control selectpicker" id="fromTypeSelect">
-                                <option selected:disabled style="diaplay:none" value=0>请选择</option>
-                                <option value=1>es</option>
-                                <option value=2>mongodb</option>
-                            </select>
-                            <script>
-                                $('#fromTypeSelect').on('changed.bs.select', function () {
-                                    if ($(this).val() == 0) {
-                                        hide()
-                                        dict["s_fromtype"] = ""
-                                    }else if ($(this).val() == 1) {
-                                        hide()
-                                        dict["s_fromtype"] = "es"
-                                    } else if ($(this).val() == 2) {
-                                        show()
-                                        dict["s_fromtype"] = "mongodb"
-                                    }
-                                    dict["s_synces"] = "0"
-                                })
-
-                                function hide() {
-                                    var ui =document.getElementById("isHideGroup");
-                                    ui.style.display="none";
-                                }
-                                function show() {
-                                    var ui =document.getElementById("isHideGroup");
-                                    ui.style.display="";
-                                    //置为默认
-                                    $("#syncesSelect").selectpicker('val', 0);
-                                }
-                            </script>
-                        </div>
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>from地址</label>
-                        <div class="col-sm-3">
-                            <input type="text" class="form-control" id="fromdburl" placeholder="请输入地址"
-                                   value="">
-                        </div>
-                    </div>
-
-                    <div class="form-group">
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>from数据库/index</label>
-                        <div class="col-sm-3">
-                            <input type="text" class="form-control" id="fromdbname" placeholder="请输入数据库名/index"
-                                   value="">
-                        </div>
-                        <label class="col-sm-2 control-label"><span style="color:red;">* </span>from表</label>
-                        <div class="col-sm-3">
-                            <input type="text" class="form-control" id="fromdbcoll" placeholder="请输入表名"
-                                   value="" required>
-                        </div>
-                    </div>
-                    <hr>
-                    {{/*第三组*/}}
-                    <div class="form-group" id="isHideGroup">
-                        <label class="col-sm-2 control-label">是否同步es</label>
-                        <div class="col-sm-3">
-                            <select class="form-control selectpicker" id="syncesSelect">
-                                <option value=0>否</option>
-                                <option value=1>是</option>
-                            </select>
-                            <script>
-                                $('#syncesSelect').on('changed.bs.select', function () {
-                                    if ($(this).val() == 0) {
-                                        dict["s_synces"] = "0"
-                                    } else {
-                                        dict["s_synces"] = "1"
-                                    }
-                                })
-                            </script>
-                        </div>
-                    </div>
-                </div>
-
-            </form>
-        </div>
-    </section>
-</div>
-
-{{include "com/footer.html"}}
-<script>
-    menuActive("/service/task/list");
-    var codeType = {{.T.taskType}};
-    var edit_data = {{.T.data}};
-    var dict = {
-        "id":edit_data["_id"],
-        "s_taskname": edit_data["s_taskname"],
-        "s_isuse": edit_data["s_isuse"],
-        "s_tasktype": edit_data["s_tasktype"],
-        "s_startid":edit_data["s_startid"],
-        "s_fromtype": edit_data["s_fromtype"],
-        "s_fromdburl": edit_data["s_fromdburl"],
-        "s_fromdbname": edit_data["s_fromdbname"],
-        "s_fromdbcoll": edit_data["s_fromdbcoll"],
-        "i_createtime": edit_data["i_createtime"],
-        "s_createuser": edit_data["s_createuser"],
-        "i_updatetime": edit_data["i_updatetime"],
-        "s_updateuser": edit_data["s_updateuser"],
-        "s_udport": edit_data["s_udport"],
-        "s_udpaddr": edit_data["s_udpaddr"],
-        "s_synces":edit_data["s_synces"],
-        "b_isclearoldtag":edit_data["b_isclearoldtag"],
-    };
-    $(document).ready(function () {
-        var index = 0
-        var curIndex = 0
-        for (var i in codeType) {
-            var name = codeType[i]["name"]
-            var code = codeType[i]["code"]
-            if (code==dict["s_tasktype"]) {
-                curIndex = Number(i)
-            }
-            if (i==0) {
-                $("#taskTypeSelect").append("<option selected:disabled style=\"diaplay:none\" value="+index+">请选择</option>");
-                index++
-            }
-            $("#taskTypeSelect").append("<option value="+index+">"+name+"</option>");
-            index++
-        }
-        // 数据赋值
-        $("#taskTypeSelect").selectpicker('val', curIndex+1);
-        var index_from,index_synces,index_cleartag = 0;
-        index_from = (dict["s_fromtype"]=="es")?1:2;
-
-        $("#fromTypeSelect").selectpicker('val', index_from);
-        $("#taskname").val(dict["s_taskname"])
-        $("#startid").val(dict["s_startid"])
-        $("#fromdburl").val(dict["s_fromdburl"])
-        $("#fromdbname").val(dict["s_fromdbname"])
-        $("#fromdbcoll").val(dict["s_fromdbcoll"])
-        $("#fromtype").val(dict["s_fromtype"])
-        $("#udpaddr").val(dict["s_udpaddr"])
-        $("#udport").val(dict["s_udport"])
-
-        //是否展示同步select 的值
-        if (dict["s_fromtype"]=="mongodb") {
-
-        }else {
-            var ui =document.getElementById("isHideGroup");
-            ui.style.display="none";
-        }
-        index_synces = (edit_data["s_synces"]=="0")?0:1;
-        $("#syncesSelect").selectpicker('val', index_synces);
-
-        index_cleartag = (edit_data["b_isclearoldtag"]==false)?0:1;
-        $("#clearTagSelect").selectpicker('val', index_cleartag);
-    });
-    function checkDict(data)  {
-        if (data["s_taskname"]==""||data["s_tasktype"]==""||data["s_startid"]==""||
-            data["s_fromdburl"]==""||data["s_fromdbname"]==""|| data["s_fromdbcoll"]==""||
-            data["s_fromtype"]==""|| data["s_udpaddr"]=="" || data["s_udport"]=="") {
-            return true
-        }
-        return false
-    }
-    function saveTask() {
-        dict["s_taskname"] = $('#taskname').val();
-        dict["s_startid"] = $('#startid').val();
-        dict["s_fromdburl"] = $('#fromdburl').val();
-        dict["s_fromdbname"] = $("#fromdbname").val();
-        dict["s_fromdbcoll"] = $("#fromdbcoll").val();
-        dict["s_udpaddr"] = $('#udpaddr').val();
-        dict["s_udport"] = $("#udport").val();
-
-        if (checkDict(dict)) {
-            let msg = "请完善所有信息"
-            showMsg(msg);
-            return;
-        }
-        $.ajax({
-            url: "/service/task/save",
-            type: 'POST',
-            data: dict,
-            success: function (task) {
-                if (task.rep) {
-                    window.location.href="/service/task/list"
-                } else {
-                    showTip("更新失败",1000);
-                }
-            }
-        })
-    }
-
-</script>

+ 0 - 173
src/web/templates/task/task_list.html

@@ -1,173 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.html"}}
-
-<div class="content-wrapper" id="showbtn">
-    <section class="content-header">
-        <h1>
-            <small><a href="/service/task/create" class="btn btn-primary opr">新增任务</a></small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/task/list"> 任务列表</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>
-
-{{include "com/footer.html"}}
-<script>
-    menuActive("/task/list");
-    $(function () {
-        ttable = $('#dataTable').DataTable({
-            "paging": true,
-            "lengthChange": false,
-            "searching": true,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "serverSide": true,
-            "ajax": {
-                "url": "/service/task/list",
-                "type": "post",
-                "data": {}
-            },
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-                $('#dataTable-btn').click(function (e) {
-                    var redirectpage = 0
-                    if ($("#changePage").val() && $("#changePage").val() > 0) {
-                        var redirectpage = $("#changePage").val() - 1;
-                    }
-                    ttable.page(redirectpage).draw(false);
-                });
-                this.api().column(0).nodes().each(function(cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null,width:"8%"},
-                {"data": "s_taskname"},
-                {"data": "s_createuser",width:"8%"},
-                {"data": "i_updatetime",width:"18%", render: function (val) {
-                        var dt = new Date()
-                        dt.setTime(parseInt(val) * 1000);
-                        return dt.format("yyyy-MM-dd hh:mm:ss")
-                    }},
-                {"data": "_id", width:"18%",render: function (val, a, row, pos) {
-                        tmp = '<div>' +
-                            '<a class="btn btn-sm btn-primary" href="/service/task/edit?id='+val+'">编辑</a>'+
-                            '&nbsp'+'&nbsp'+
-                            '<a class="btn btn-sm btn-danger"  onclick="del_task(\''+val+'\')">删除</a>'+
-                            '</div>';
-                        return tmp
-                    }},
-                {"data": "_id", width:"18%",render: function (val, a, row, pos) {
-
-                        if (row.s_isuse=="0") {
-                            //未启动
-                            tmp = '<div>' +
-                                '<a class="btn btn-sm btn-primary" onclick="start_task(\''+val+'\',\''+row.s_udpaddr+'\',\''+row.s_udport+'\')">启动</a>'+
-                                '&nbsp'+'&nbsp'+
-                                '<a class="btn btn-sm btn-info" disabled="true" href="javascript:return false;">关闭</a>'+                                '</div>';
-                                '<div>';
-                        } else {
-                            tmp = '<div>'+
-                                '<a class="btn btn-sm btn-primary" disabled="true" href="javascript:return false;">已启动</a>'+
-                                '&nbsp'+'&nbsp'+
-                                '<a class="btn btn-sm btn-info" onclick="end_task(\''+val+'\',\''+row.s_udpaddr+'\',\''+row.s_udport+'\')">关闭</a>'+
-                                '</div>';
-                        }
-
-                        return tmp
-                    }}
-
-            ]
-        });
-    });
-
-
-    function start_task(id,addr,port){
-        showConfirm("确定开启任务?", function() {
-            $.ajax({
-                url:"/service/task/start",
-                type:"post",
-                data:{"id": id,"addr": addr,"port": port},
-                success:function(r){
-                    if(r.rep){
-                        ttable.ajax.reload();
-                    }else{
-                        alert(r.msg);
-                    }
-                }
-            })
-        });
-    }
-
-
-    function end_task(id,addr,port){
-        showConfirm("确定关闭任务?", function() {
-            $.ajax({
-                url:"/service/task/end",
-                type:"post",
-                data:{"id": id,"addr": addr,"port": port},
-                success:function(r){
-                    if(r.rep){
-                        ttable.ajax.reload();
-                    }else{
-                        alert(r.msg);
-                    }
-                }
-            })
-        });
-    }
-
-
-    function del_task(del_id){
-        showConfirm("确定删除?", function() {
-            $.ajax({
-                url:"/service/task/delete",
-                type:"post",
-                data:{"_id": del_id},
-                success:function(r){
-                    if(r.rep){
-                        ttable.ajax.reload();
-                    }else{
-                        alert("删除失败");
-                    }
-                }
-            })
-        });
-    }
-
-
-</script>