소스 검색

no message

Jianghan 3 년 전
부모
커밋
9cbca83b65
39개의 변경된 파일357개의 추가작업 그리고 19873개의 파일을 삭제
  1. 5 8
      src/config.json
  2. 1 7
      src/main.go
  3. 0 337
      src/service/common_rule.go
  4. 0 882
      src/service/customer_service.go
  5. 0 92
      src/service/feedback_service.go
  6. 138 0
      src/service/oprd_service.go
  7. 0 530
      src/service/private_rule.go
  8. 0 263
      src/service/private_service.go
  9. 31 0
      src/service/repair_service.go
  10. 0 190
      src/service/tag_rule_service.go
  11. 0 232
      src/service/task_rule.go
  12. 16 102
      src/util/config.go
  13. 0 638
      src/util/parsxlsx.go
  14. 0 744
      src/util/utiltag.go
  15. 166 0
      src/web/templates/oprd/bidding_modify.html
  16. 0 1458
      src/web/templates/private/common_rule_create.html
  17. 0 1581
      src/web/templates/private/common_rule_edit.html
  18. 0 183
      src/web/templates/private/common_rule_list.html
  19. 0 1538
      src/web/templates/private/cuser_rule_create.html
  20. 0 1687
      src/web/templates/private/cuser_rule_edit.html
  21. 0 221
      src/web/templates/private/cuser_rule_list.html
  22. 0 319
      src/web/templates/private/customer_create.html
  23. 0 727
      src/web/templates/private/customer_edit.html
  24. 0 351
      src/web/templates/private/customer_edit_euser.html
  25. 0 106
      src/web/templates/private/customer_ent_list.html
  26. 0 176
      src/web/templates/private/customer_list.html
  27. 0 961
      src/web/templates/private/euser_rule_edit.html
  28. 0 178
      src/web/templates/private/euser_rule_list.html
  29. 0 636
      src/web/templates/private/euser_tag_rule.html
  30. 0 240
      src/web/templates/private/euser_tag_rule_l.html
  31. 0 152
      src/web/templates/private/feedback_detail.html
  32. 0 101
      src/web/templates/private/feedback_list.html
  33. 0 1562
      src/web/templates/private/rule_create.html
  34. 0 1708
      src/web/templates/private/rule_edit.html
  35. 0 87
      src/web/templates/private/rule_history.html
  36. 0 203
      src/web/templates/private/rule_list.html
  37. 0 816
      src/web/templates/private/tag_rule_create.html
  38. 0 695
      src/web/templates/private/tag_rule_edit.html
  39. 0 162
      src/web/templates/private/tag_rule_list.html

+ 5 - 8
src/config.json

@@ -9,14 +9,6 @@
   "mgodben": "192.168.3.207:27092",
   "dbnameen": "enterprise",
   "mongoenc": "winner_enterprise",
-  "subday": 15,
-  "customer": {
-    "api": "http://web-jytest.jianyu360.cn/api1/user/jy_newuser",
-    "mgodb": "192.168.3.128:27080",
-    "dbname": "jyqyfw",
-    "dbsize": 5
-  },
-  "preview_href": "http://192.168.20.127:5500/data-preview.html",
   "elasticsearchxs": "http://172.17.145.170:9800",
   "elasticsearch": "http://192.168.3.128:9800",
   "elasticsearch_index": "bidding",
@@ -51,6 +43,11 @@
     "dbname": "wjh",
     "coll": "jh_project"
   },
+  "oprd_db": {
+    "addr": "192.168.3.207:27092",
+    "dbsize": 5,
+    "dbname": "wjh"
+  },
   "jy_pro_node": {
     "addr": "127.0.0.1",
     "port": 1482,

+ 1 - 7
src/main.go

@@ -30,14 +30,8 @@ func init() {
 	xweb.RootApp().AppConfig.Mode = xweb.Product
 	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.AddAction(&service.OprdData{})
 	xweb.RootApp().AppConfig.SessionTimeout = 1 * time.Hour
 	xweb.RootApp().Logger.SetOutputLevel(1)
 

+ 0 - 337
src/service/common_rule.go

@@ -1,337 +0,0 @@
-package service
-
-import (
-	"encoding/json"
-	"fmt"
-	"io"
-	"mongodb"
-	"net/http"
-	"os"
-	qu "qfw/util"
-	"strconv"
-	"strings"
-	"time"
-	. "util"
-
-	"github.com/go-xweb/xweb"
-	"github.com/lauyoume/gopinyin"
-	"go.mongodb.org/mongo-driver/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"`     //"go.mongodb.org/mongo-driver/bson"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"] = SubTypeMap
-		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"] = mongodb.StringTOBsonId(id)
-	} else if dataid != "" {
-		query["s_dataid"] = dataid
-	}
-	data, _ := Mgo.FindOneByField("tags_common", query, `{}`)
-	(*data)["id"] = mongodb.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"] = SubTypeMap
-	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": mongodb.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": mongodb.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 - 882
src/service/customer_service.go

@@ -1,882 +0,0 @@
-package service
-
-import (
-	"encoding/json"
-	"fmt"
-	"github.com/go-xweb/xweb"
-	"github.com/lauyoume/gopinyin"
-	"go.mongodb.org/mongo-driver/bson"
-	"io/ioutil"
-	"mongodb"
-	"net/http"
-	"os"
-	qu "qfw/util"
-	"strings"
-	"time"
-	. "util"
-)
-
-type Customer struct {
-	*xweb.Action
-	customerList   xweb.Mapper `xweb:"/service/customer/list"`
-	customerCreate xweb.Mapper `xweb:"/service/customer/create"`
-	customerEdit   xweb.Mapper `xweb:"/service/customer/edit"`
-	customerEuser  xweb.Mapper `xweb:"/service/customer/euser"`
-	customerSave   xweb.Mapper `xweb:"/service/customer/save"`
-	customerDel    xweb.Mapper `xweb:"/service/customer/del"`
-	setupDepart    xweb.Mapper `xweb:"/service/customer/setup"`
-
-	departDel  xweb.Mapper `xweb:"/service/depart/del"`
-	departEdit xweb.Mapper `xweb:"/service/depart/edit"`
-
-	//转企
-	cuserToEuser xweb.Mapper `xweb:"/service/cuser/converted"`
-	//同步
-	synEuser xweb.Mapper `xweb:"/service/euser/synchronous"`
-	//企业客户
-	entEuserList xweb.Mapper `xweb:"/service/entCustomer/list"`
-
-	cuserRule       xweb.Mapper `xweb:"/service/cuser/rule/list"` //规则列表	部门
-	euserRule       xweb.Mapper `xweb:"/service/euser/rule/list"`
-	cuserRuleCreate xweb.Mapper `xweb:"/service/cuser/rule/create"` //新建规则
-	cuserRuleEdit   xweb.Mapper `xweb:"/service/cuser/rule/Edit"`
-	euserRule1      xweb.Mapper `xweb:"/service/euser/rule"`
-	cuserRuleDel    xweb.Mapper `xweb:"/service/cuser/rule/Del"`
-	cuserRuleSetup  xweb.Mapper `xweb:"/service/cuser/rule/setup"`
-	downloadRule    xweb.Mapper `xweb:"/service/cuser/rule/downloadrule"` //下载标签
-	downloadData    xweb.Mapper `xweb:"/service/cuser/rule/downloadata"`  //下载数据
-	productData     xweb.Mapper `xweb:"/service/cuser/produce"`           //生成预览数据
-	//企业标签
-	euserTagEdit  xweb.Mapper `xweb:"/service/euser/tag/edit"`
-	euserTag      xweb.Mapper `xweb:"/service/euser/tag"`
-	euserImport   xweb.Mapper `xweb:"/service/esuer/tag/import"`
-	tagSetup      xweb.Mapper `xweb:"/service/euser/tag/setup"`
-	tagDel        xweb.Mapper `xweb:"/service/euser/tag/del"`
-	cuserRuleList xweb.Mapper `xweb:"/service/tag/ruleList"`         //规则列表	客户
-	tagAssociated xweb.Mapper `xweb:"/service/euser/tag/associated"` //私有标签关联规则
-}
-
-func (c *Customer) CustomerList() {
-	defer qu.Catch()
-	if c.Method() == "POST" {
-		start, _ := c.GetInteger("start")
-		limit, _ := c.GetInteger("length")
-		draw, _ := c.GetInteger("draw")
-		searchStr := c.GetString("search[value]")
-		search := strings.TrimSpace(searchStr)
-		query := bson.M{
-			"b_delete": false,
-		}
-		if search != "" {
-			query["$or"] = []interface{}{
-				bson.M{"s_name": bson.M{"$regex": search}},
-			}
-		}
-
-		data, _ := Mgo.Find("cuser", query, `{"i_updatetime":-1}`, nil, false, start, limit)
-		count := Mgo.Count("cuser", query)
-		c.ServeJson(map[string]interface{}{
-			"draw":            draw,
-			"data":            data,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	} else {
-		c.Render("private/customer_list.html")
-	}
-}
-
-func (c *Customer) CustomerCreate() {
-	defer qu.Catch()
-	if c.Method() == "POST" {
-	} else {
-		c.T["state"] = 0
-		c.Render("private/customer_create.html", &c.T)
-	}
-}
-
-func (c *Customer) CustomerEdit() {
-	defer qu.Catch()
-	id := c.GetString("id")
-	query := bson.M{}
-	query["_id"] = mongodb.StringTOBsonId(id)
-	data, _ := Mgo.FindOneByField("cuser", query, `{}`)
-	depart, _ := Mgo.Find("cuserdepart", bson.M{"s_userid": id, "b_delete": false}, nil, nil, false, -1, -1)
-	(*data)["_id"] = mongodb.BsonIdToSId((*data)["_id"])
-	if (*data)["i_state"] == 1 {
-		tagRule, _ := Mgo.Find("eusertagrule", bson.M{"s_userid": id, "b_delete": false}, nil, nil, false, -1, -1)
-		c.T["tagrule"] = *tagRule
-	}
-	c.T["data"] = *data
-	c.T["depart"] = *depart
-	c.Render("private/customer_edit.html", &c.T)
-}
-
-func (c *Customer) CustomerEuser() {
-	defer qu.Catch()
-	id := c.GetString("id")
-	query := bson.M{}
-	query["_id"] = mongodb.StringTOBsonId(id)
-	data, _ := Mgo.FindOneByField("euser", query, `{}`)
-	depart, _ := Mgo.Find("euserdepart", bson.M{"s_userid": id, "b_delete": false}, nil, nil, false, -1, -1)
-	(*data)["_id"] = mongodb.BsonIdToSId((*data)["_id"])
-	if (*data)["i_state"] == 1 {
-		tagRule, _ := Mgo.Find("eusertagrule", bson.M{"s_userid": id, "b_delete": false}, nil, nil, false, -1, -1)
-		c.T["tagrule"] = *tagRule
-	}
-	c.T["data"] = *data
-	c.T["depart"] = *depart
-	c.Render("private/customer_edit_euser.html", &c.T)
-}
-
-func (c *Customer) CustomerSave() {
-	defer qu.Catch()
-	if c.Method() == "POST" {
-		data := GetPostForm(c.Request)
-		id := qu.ObjToString(data["id"])
-		delete(data, "id")
-		i_createtime := time.Now().Unix()
-		data["i_updatetime"] = i_createtime
-		var rep = false
-		if id == "" {
-			departArr := []map[string]interface{}{}
-			departArrStr := data["depart"].(string)
-			json.Unmarshal([]byte(departArrStr), &departArr)
-			delete(data, "depart")
-			data["b_delete"] = false
-			data["i_createtime"] = i_createtime
-			data["i_state"] = 0
-			id = Mgo.Save("cuser", data)
-			if id != "" {
-				for _, v := range departArr {
-					v["s_userid"] = id
-					v["i_createtime"] = time.Now().Unix()
-					v["i_updatetime"] = time.Now().Unix()
-					v["i_isuse"] = qu.IntAll(v["i_isuse"])
-					v["b_delete"] = false
-				}
-				if len(departArr) == 0 {
-					rep = true
-				} else {
-					rep = Mgo.SaveBulk("cuserdepart", departArr...)
-				}
-			} else {
-				rep = false
-			}
-		} else {
-			query := bson.M{
-				"_id": mongodb.StringTOBsonId(id),
-			}
-			rep = Mgo.Update("cuser", query, bson.M{"$set": data}, false, false)
-		}
-		c.ServeJson(map[string]interface{}{
-			"rep": rep,
-		})
-	}
-}
-
-func (c *Customer) CustomerDel() {
-	defer qu.Catch()
-	_id := c.GetString("_id")
-	set := bson.M{
-		"$set": bson.M{
-			"b_delete": true,
-		},
-	}
-	b := Mgo.UpdateById("cuser", _id, set)
-	c.ServeJson(map[string]interface{}{
-		"rep": b,
-	})
-}
-
-func (c *Customer) DepartEdit() {
-	defer qu.Catch()
-	data := GetPostForm(c.Request)
-	id := qu.ObjToString(data["id"])
-	var b = true
-	if id == "" {
-		data["i_createtime"] = time.Now().Unix()
-		data["i_updatetime"] = time.Now().Unix()
-		data["b_delete"] = false
-		_id := Mgo.Save("cuserdepart", data)
-		if _id == "" {
-			b = false
-		}
-	} else {
-		set := bson.M{
-			"$set": data,
-		}
-		data["i_updatetime"] = time.Now().Unix()
-		b = Mgo.UpdateById("cuserdepart", id, set)
-	}
-	c.ServeJson(map[string]interface{}{
-		"rep": b,
-	})
-}
-
-//部门启用、停用
-func (c *Customer) SetupDepart() {
-	defer qu.Catch()
-	if c.Method() == "POST" {
-		_id := c.GetString("_id")
-		i_isuse, _ := c.GetInteger("i_isuse")
-		nowtime := time.Now().Unix()
-		set := bson.M{
-			"$set": bson.M{
-				"i_updatetime": nowtime,
-				"i_isuse":      i_isuse,
-			},
-		}
-		b := Mgo.UpdateById("cuserdepart", _id, set)
-		if b {
-			//部门下的规则
-			update := [][]map[string]interface{}{}
-			ruleMap, _ := Mgo.Find("cuserdepartrule", bson.M{"s_userid": _id}, nil, nil, false, -1, -1)
-			for _, v := range *ruleMap {
-				idAndSet := []map[string]interface{}{}
-				idAndSet = append(idAndSet, bson.M{"_id": v["_id"]})                             //查询条件
-				idAndSet = append(idAndSet, bson.M{"i_isuse": i_isuse, "i_updatetime": nowtime}) //修改的数据
-				update = append(update, idAndSet)
-			}
-			b = Mgo.UpdateBulk("cuserdepartrule", update...)
-		}
-		c.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-	}
-}
-
-func (c *Customer) DepartDel() {
-	defer qu.Catch()
-	_id := c.GetString("id")
-	set := bson.M{
-		"$set": bson.M{
-			"b_delete": true,
-		},
-	}
-	b := Mgo.UpdateById("cuserdepart", _id, set)
-	c.ServeJson(map[string]interface{}{
-		"rep": b,
-	})
-}
-
-//转企
-func (c *Customer) CuserToEuser() {
-	defer qu.Catch()
-
-	_id := c.GetString("_id")
-	cuser, _ := Mgo.FindById("cuser", _id, nil)
-	//1、调用接口生成appid
-	appid := GetCustomerAppId(qu.ObjToString((*cuser)["s_name"]))
-	if appid == "" {
-		c.ServeJson(map[string]interface{}{
-			"rep": false,
-		})
-		return
-	}
-	//2、修改
-	nowTime := time.Now().Unix()
-	(*cuser)["i_state"] = 1
-	(*cuser)["i_toservicetime"] = nowTime //转企时间
-	(*cuser)["i_lastsynctime"] = nowTime  //同步时间
-	(*cuser)["s_appid"] = appid
-	set := bson.M{
-		"$set": bson.M{
-			"i_toservicetime": nowTime,
-			"i_lastsynctime":  nowTime,
-			"s_appid":         appid,
-			"i_state":         1,
-		},
-	}
-	b := Mgo.Update("cuser", bson.M{"_id": mongodb.StringTOBsonId(_id)}, set, false, false)
-	if !b {
-		c.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-		return
-	}
-	//2、复制信息(部门、规则)
-	b = Mgo.Update("euser", bson.M{"_id": mongodb.StringTOBsonId(_id)}, cuser, true, false)
-	if !b {
-		c.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-		return
-	}
-	departMap, _ := Mgo.Find("cuserdepart", bson.M{"s_userid": _id, "b_delete": false}, nil, nil, false, -1, -1)
-	Mgo.SaveBulk("euserdepart", *departMap...)
-	ruleMap, _ := Mgo.Find("cuserdepartrule", bson.M{"s_userid": _id, "b_delete": false}, nil, nil, false, -1, -1)
-	Mgo.SaveBulk("euserdepartrule", *ruleMap...)
-
-	c.ServeJson(map[string]interface{}{
-		"rep": b,
-	})
-}
-
-func GetCustomerAppId(customer string) string {
-	defer qu.Catch()
-	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)
-			qu.Debug("1", err)
-			defer resp.Body.Close()
-			body, err := ioutil.ReadAll(resp.Body)
-			qu.Debug("2", err)
-			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 {
-			qu.Debug("调企业用户接口失败", err)
-		}
-	}
-	//if appid != "" { //保存
-	//	set := map[string]interface{}{
-	//		"$set": map[string]interface{}{
-	//			"s_appid": appid,
-	//		},
-	//	}
-	//	rep = Mgo.UpdateById("cuser", id, set)
-	//}
-	return appid
-}
-
-//同步
-func (c *Customer) SynEuser() {
-	defer qu.Catch()
-	_id := c.GetString("_id")
-	cuser, _ := Mgo.FindById("cuser", _id, nil)
-	nowTime := time.Now().Unix()
-	(*cuser)["i_lastsynctime"] = nowTime //同步时间
-	set := bson.M{
-		"$set": bson.M{
-			"i_lastsynctime": nowTime,
-		},
-	}
-	b := Mgo.Update("cuser", bson.M{"_id": mongodb.StringTOBsonId(_id)}, set, false, false)
-	if !b {
-		c.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-		return
-	}
-	b = Mgo.Update("euser", bson.M{"_id": mongodb.StringTOBsonId(_id)}, cuser, true, false)
-	if !b {
-		c.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-		return
-	}
-	departMap, _ := Mgo.Find("cuserdepart", bson.M{"s_userid": _id, "b_delete": false}, nil, nil, false, -1, -1)
-	//Mgo.SaveBulk("euserdepart", *departMap...)
-	update := [][]map[string]interface{}{}
-	for _, v := range *departMap {
-		idAndSet := []map[string]interface{}{}
-		idAndSet = append(idAndSet, bson.M{"_id": v["_id"]}) //查询条件
-		idAndSet = append(idAndSet, v)                       //修改的数据
-		update = append(update, idAndSet)
-	}
-	Mgo.UpSertBulk("euserdepart", update...)
-	ruleMap, _ := Mgo.Find("cuserdepartrule", bson.M{"s_userid": _id, "b_delete": false}, nil, nil, false, -1, -1)
-	//b = Mgo.SaveBulk("euserdepartrule", *ruleMap...)
-	update2 := [][]map[string]interface{}{}
-	for _, v := range *ruleMap {
-		idAndSet := []map[string]interface{}{}
-		idAndSet = append(idAndSet, bson.M{"_id": v["_id"]}) //查询条件
-		idAndSet = append(idAndSet, v)                       //修改的数据
-		update2 = append(update2, idAndSet)
-	}
-	b = Mgo.UpSertBulk("euserdepartrule", update2...)
-	c.ServeJson(map[string]interface{}{
-		"rep": b,
-	})
-}
-
-func (c *Customer) EntEuserList() {
-	defer qu.Catch()
-	if c.Method() == "POST" {
-		start, _ := c.GetInteger("start")
-		limit, _ := c.GetInteger("length")
-		draw, _ := c.GetInteger("draw")
-		searchStr := c.GetString("search[value]")
-		search := strings.TrimSpace(searchStr)
-		query := bson.M{
-			"b_delete": false,
-		}
-		if search != "" {
-			query["$or"] = []interface{}{
-				bson.M{"s_name": bson.M{"$regex": search}},
-			}
-		}
-
-		data, _ := Mgo.Find("euser", query, `{"i_createtime":-1}`, nil, false, start, limit)
-		count := Mgo.Count("euser", query)
-		c.ServeJson(map[string]interface{}{
-			"draw":            draw,
-			"data":            data,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	} else {
-		c.Render("private/customer_ent_list.html")
-	}
-}
-
-func (c *Customer) CuserRule() {
-	defer qu.Catch()
-	ids := strings.Split(c.GetString("ids"), ",")
-	if c.Method() == "POST" {
-		start, _ := c.GetInteger("start")
-		limit, _ := c.GetInteger("length")
-		draw, _ := c.GetInteger("draw")
-		searchStr := c.GetString("search[value]")
-		search := strings.TrimSpace(searchStr)
-		query := bson.M{
-			"s_userid":   ids[1],
-			"s_departid": ids[0],
-			"b_delete":   false,
-		}
-		if search != "" {
-			query["$or"] = []interface{}{
-				bson.M{"s_name": bson.M{"$regex": search}},
-			}
-		}
-
-		data, _ := Mgo.Find("cuserdepartrule", query, `{"i_createtime":-1}`, nil, false, start, limit)
-		count := Mgo.Count("cuserdepartrule", query)
-		c.ServeJson(map[string]interface{}{
-			"draw":            draw,
-			"data":            data,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	} else {
-		c.T["did"] = ids[0] //部门id
-		c.T["cid"] = ids[1] //客户id
-		c.T["preview_href"] = PreviewHref
-		c.Render("private/cuser_rule_list.html", &c.T)
-	}
-}
-
-func (c *Customer) EuserRule() {
-	defer qu.Catch()
-	ids := strings.Split(c.GetString("ids"), ",")
-	if c.Method() == "POST" {
-		start, _ := c.GetInteger("start")
-		limit, _ := c.GetInteger("length")
-		draw, _ := c.GetInteger("draw")
-		searchStr := c.GetString("search[value]")
-		search := strings.TrimSpace(searchStr)
-		query := bson.M{
-			"s_userid":   ids[1],
-			"s_departid": ids[0],
-			"b_delete":   false,
-		}
-		if search != "" {
-			query["$or"] = []interface{}{
-				bson.M{"s_name": bson.M{"$regex": search}},
-			}
-		}
-
-		data, _ := Mgo.Find("euserdepartrule", query, `{"i_createtime":-1}`, nil, false, start, limit)
-		count := Mgo.Count("euserdepartrule", query)
-		c.ServeJson(map[string]interface{}{
-			"draw":            draw,
-			"data":            data,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	} else {
-		c.T["did"] = ids[0] //部门id
-		c.T["cid"] = ids[1] //客户id
-		c.T["preview_href"] = PreviewHref
-		c.Render("private/euser_rule_list.html", &c.T)
-	}
-}
-
-func (c *Customer) CuserRuleCreate() {
-	defer qu.Catch()
-	ids := strings.Split(c.GetString("ids"), ",")
-	if c.Method() == "POST" {
-		user := c.GetSession("user").(map[string]interface{})
-		data := GetPostForm(c.Request)
-		o_rules := []map[string]interface{}{}
-		o_rulesStr := data["o_rules"].(string)
-		json.Unmarshal([]byte(o_rulesStr), &o_rules)
-		data["o_rules"] = o_rules
-		id := qu.ObjToString(data["id"])
-		delete(data, "id")
-		delete(data, "ids")
-		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"]
-		var rep = false
-		if id == "" { //新建
-			data["s_userid"] = ids[1]
-			data["s_departid"] = ids[0]
-			data["i_createtime"] = i_createtime
-			data["s_createuser"] = user["name"]
-			s_namekey := gopinyin.Convert(qu.ObjToString(data["s_name"]), false)
-			data["s_namekey"] = s_namekey
-			data["b_delete"] = false
-			data["s_dataid"] = qu.SE.EncodeString(fmt.Sprintf("%v", i_createtime) + s_namekey + ids[0])
-			id = Mgo.Save("cuserdepartrule", data)
-			if id != "" {
-				rep = true
-			} else {
-				rep = false
-			}
-		} else {
-			query := bson.M{
-				"_id": mongodb.StringTOBsonId(id),
-			}
-			rep = Mgo.Update("cuserdepartrule", query, bson.M{"$set": data}, false, false)
-		}
-
-		c.ServeJson(map[string]interface{}{
-			"id":        id,
-			"rep":       rep,
-			"s_esquery": data["s_esquery"],
-			"s_dataid":  data["s_dataid"],
-		})
-	} else {
-		c.T["did"] = ids[0] //部门id
-		c.T["cid"] = ids[1] //客户id
-		c.T["ids"] = c.GetString("ids")
-		c.T["province"] = Province
-		c.T["city"] = ProvinceCitys
-		c.T["district"] = CityDistricts
-		c.T["topTypeArr"] = TopTypeArr
-		c.T["subTypeArr"] = SubTypeMap
-		c.T["matchTypeMap"] = MatchTypeMap
-		c.T["matchTypeMap2"] = MatchTypeMap2
-		c.T["existField"] = ExistFiled
-		c.T["buyerClass"] = BuyerClass
-		c.T["scopeClass"] = ScopeClassMap
-		c.Render("private/cuser_rule_create.html", &c.T)
-	}
-}
-
-func (c *Customer) CuserRuleEdit() {
-	defer qu.Catch()
-	id := c.GetString("id")
-	query := bson.M{"_id": mongodb.StringTOBsonId(id)}
-	data, _ := Mgo.FindOneByField("cuserdepartrule", query, `{}`)
-	(*data)["id"] = mongodb.BsonIdToSId((*data)["_id"])
-	c.T["cid"] = (*data)["s_userid"]
-	c.T["ids"] = qu.ObjToString((*data)["s_departid"]) + "," + qu.ObjToString((*data)["s_userid"])
-	c.T["data"] = *data
-	c.T["province"] = Province
-	c.T["city"] = ProvinceCitys
-	c.T["district"] = CityDistricts
-	c.T["topTypeArr"] = TopTypeArr
-	c.T["subTypeArr"] = SubTypeMap
-	c.T["matchTypeMap"] = MatchTypeMap
-	c.T["matchTypeMap2"] = MatchTypeMap2
-	c.T["existField"] = ExistFiled
-	c.T["buyerClass"] = BuyerClass
-	c.T["scopeClass"] = ScopeClassMap
-	c.Render("private/cuser_rule_edit.html", &c.T)
-}
-
-func (c *Customer) EuserRule1() {
-	defer qu.Catch()
-	id := c.GetString("id")
-	query := bson.M{"_id": mongodb.StringTOBsonId(id)}
-	data, _ := Mgo.FindOneByField("euserdepartrule", query, `{}`)
-	(*data)["id"] = mongodb.BsonIdToSId((*data)["_id"])
-	c.T["cid"] = (*data)["s_userid"]
-	c.T["ids"] = qu.ObjToString((*data)["s_departid"]) + "," + qu.ObjToString((*data)["s_userid"])
-	c.T["data"] = *data
-	c.T["province"] = Province
-	c.T["city"] = ProvinceCitys
-	c.T["district"] = CityDistricts
-	c.T["topTypeArr"] = TopTypeArr
-	c.T["subTypeArr"] = SubTypeMap
-	c.T["matchTypeMap"] = MatchTypeMap
-	c.T["matchTypeMap2"] = MatchTypeMap2
-	c.T["existField"] = ExistFiled
-	c.T["buyerClass"] = BuyerClass
-	c.T["scopeClass"] = ScopeClassMap
-	c.Render("private/euser_rule_edit.html", &c.T)
-}
-
-func (c *Customer) CuserRuleDel() {
-	defer qu.Catch()
-	_id := c.GetString("_id")
-	set := bson.M{
-		"$set": bson.M{
-			"b_delete": true,
-		},
-	}
-	b := Mgo.UpdateById("cuserdepartrule", _id, set)
-	c.ServeJson(map[string]interface{}{
-		"rep": b,
-	})
-}
-
-func (c *Customer) CuserRuleSetup() {
-	defer qu.Catch()
-	if c.Method() == "POST" {
-		_id := c.GetString("_id")
-		i_isuse, _ := c.GetInteger("i_isuse")
-		set := bson.M{
-			"$set": bson.M{
-				"i_isuse": i_isuse,
-			},
-		}
-		b := Mgo.UpdateById("cuserdepartrule", _id, set)
-		c.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-	}
-}
-
-func (c *Customer) DownloadRule() {
-	defer qu.Catch()
-	id := c.GetString("id")
-	path := ResponseXlsx_Rule1(id)
-	if path == "" {
-		c.ServeJson("没有数据")
-	} else {
-		arr := strings.Split(path, "/")
-		c.ResponseWriter.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", arr[len(arr)-1]))
-		c.ServeFile(path)
-		go func(path string) {
-			time.Sleep(time.Minute * 3)
-			os.Remove(path)
-		}(path)
-	}
-}
-
-func (c *Customer) DownloadData() {
-	defer qu.Catch()
-	dataId := c.GetString("s_dataid")
-	if path := ResponseXlsx_Data1(dataId); path == "" {
-		c.ServeJson("没有数据")
-	} else {
-		arr := strings.Split(path, "/")
-		c.ResponseWriter.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", arr[len(arr)-1]))
-		c.ServeFile(path)
-		go func(path string) {
-			time.Sleep(300000)
-			os.Remove(path)
-		}(path)
-	}
-}
-
-func (c *Customer) ProductData() {
-	defer qu.Catch()
-	if c.Method() == "POST" {
-		rep := false
-		id := c.GetString("id")
-		tag, _ := Mgo.FindById("cuserdepartrule", id, `{}`)
-		err, count := UtilEsFind1(*tag)
-		if err == nil {
-			rep = true
-		}
-		c.ServeJson(map[string]interface{}{
-			"rep":   rep,
-			"count": count,
-		})
-	}
-}
-
-func (c *Customer) EuserTagEdit() {
-	defer qu.Catch()
-	if c.Method() == "POST" {
-		_id := c.GetString("_id")
-		data := GetPostForm(c.Request)
-		cid := qu.ObjToString(data["s_userid"])
-		createTime := time.Now().Unix()
-		o_rules := []map[string]interface{}{}
-		o_rulesStr := data["o_list"].(string)
-		json.Unmarshal([]byte(o_rulesStr), &o_rules)
-		data["o_list"] = o_rules
-		var rep = true
-		if _id == "" {
-			data["i_createtime"] = createTime
-			data["i_updatetime"] = createTime
-			data["b_delete"] = false
-			_id = Mgo.Save("eusertagrule", data)
-		} else {
-			query := bson.M{
-				"_id": mongodb.StringTOBsonId(_id),
-			}
-			rep = Mgo.Update("eusertagrule", query, bson.M{"$set": data}, false, false)
-		}
-
-		c.ServeJson(map[string]interface{}{
-			"id":  cid,
-			"rep": rep,
-		})
-	} else {
-		if c.GetString("id") != "" {
-			data, _ := Mgo.FindById("eusertagrule", c.GetString("id"), nil)
-			c.T["tagrule"] = *data
-		}
-		cid := c.GetString("cid")
-		c.T["cid"] = cid
-		c.T["matchTypeMap"] = MatchTypeMap3
-		c.Render("private/euser_tag_rule.html", &c.T)
-	}
-}
-
-func (c *Customer) EuserTag() {
-	defer qu.Catch()
-	if c.Method() == "POST" {
-		_id := c.GetString("_id")
-		data := GetPostForm(c.Request)
-		cid := qu.ObjToString(data["s_userid"])
-		createTime := time.Now().Unix()
-		o_rules := []map[string]interface{}{}
-		o_rulesStr := data["o_list"].(string)
-		json.Unmarshal([]byte(o_rulesStr), &o_rules)
-		data["o_list"] = o_rules
-		var rep = true
-		if _id == "" {
-			data["i_createtime"] = createTime
-			data["i_updatetime"] = createTime
-			data["b_delete"] = false
-			_id = Mgo.Save("eusertagrule", data)
-		} else {
-			query := bson.M{
-				"_id": mongodb.StringTOBsonId(_id),
-			}
-			rep = Mgo.Update("eusertagrule", query, bson.M{"$set": data}, false, false)
-		}
-
-		c.ServeJson(map[string]interface{}{
-			"id":  cid,
-			"rep": rep,
-		})
-	} else {
-		if c.GetString("id") != "" {
-			data, _ := Mgo.FindById("eusertagrule", c.GetString("id"), nil)
-			c.T["tagrule"] = *data
-		}
-		cid := c.GetString("cid")
-		c.T["cid"] = cid
-		c.T["matchTypeMap"] = MatchTypeMap3
-		c.Render("private/euser_tag_rule_l.html", &c.T)
-	}
-}
-
-func (c *Customer) EuserImport() {
-	defer qu.Catch()
-	if c.Method() == "POST" {
-		mf, _, err := c.GetFile("xlsx")
-		if err == nil {
-			binary, err := ioutil.ReadAll(mf)
-			if err == nil {
-				rdata, err := Parsxlsx1(binary)
-				if err == nil {
-					c.ServeJson(map[string]interface{}{
-						"rdata": rdata,
-						"rep":   true,
-					})
-					return
-				}
-			}
-		}
-		c.ServeJson(map[string]interface{}{
-			"rep": false,
-		})
-	}
-}
-
-func (c *Customer) TagSetup() {
-	defer qu.Catch()
-	if c.Method() == "POST" {
-		_id := c.GetString("_id")
-		i_isuse, _ := c.GetInteger("i_isuse")
-		set := bson.M{
-			"$set": bson.M{
-				"i_isuse": i_isuse,
-			},
-		}
-		b := Mgo.UpdateById("eusertagrule", _id, set)
-		c.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-	}
-}
-
-func (c *Customer) TagDel() {
-	defer qu.Catch()
-	_id := c.GetString("_id")
-	set := bson.M{
-		"$set": bson.M{
-			"b_delete": true,
-		},
-	}
-	b := Mgo.UpdateById("eusertagrule", _id, set)
-	c.ServeJson(map[string]interface{}{
-		"rep": b,
-	})
-}
-
-func (c *Customer) CuserRuleList() {
-	defer qu.Catch()
-	if c.Method() == "POST" {
-		eid := c.GetString("eid")
-		start, _ := c.GetInteger("start")
-		limit, _ := c.GetInteger("length")
-		draw, _ := c.GetInteger("draw")
-		searchStr := c.GetString("search[value]")
-		search := strings.TrimSpace(searchStr)
-		query := bson.M{
-			"s_userid": eid,
-			"i_isuse":  1,
-			"b_delete": false,
-		}
-		if search != "" {
-			query["$or"] = []interface{}{
-				bson.M{"s_name": bson.M{"$regex": search}},
-			}
-		}
-		data, _ := Mgo.Find("euserdepartrule", query, `{"i_createtime":-1}`, nil, false, start, limit)
-		for _, v := range *data {
-			d, _ := Mgo.FindById("euserdepart", qu.ObjToString(v["s_departid"]), nil)
-			v["s_depart"] = qu.ObjToString((*d)["s_name"])
-		}
-		count := Mgo.Count("euserdepartrule", query)
-		c.ServeJson(map[string]interface{}{
-			"draw":            draw,
-			"data":            data,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	}
-}
-
-func (c *Customer) TagAssociated() {
-	defer qu.Catch()
-	_id := c.GetString("_id")
-	ids := c.GetString("ids")
-	set := bson.M{
-		"$set": bson.M{
-			"o_departruleids": ids,
-		},
-	}
-	b := Mgo.UpdateById("eusertagrule", _id, set)
-	c.ServeJson(map[string]interface{}{
-		"rep": b,
-	})
-}

+ 0 - 92
src/service/feedback_service.go

@@ -1,92 +0,0 @@
-package service
-
-import (
-	"mongodb"
-	qu "qfw/util"
-	"strings"
-
-	. "util"
-
-	"github.com/go-xweb/xweb"
-	"go.mongodb.org/mongo-driver/bson"
-)
-
-type Feedback struct {
-	*xweb.Action
-	feedbackList   xweb.Mapper `xweb:"/service/feedback/list"`   //反馈列表
-	feedbackDetail xweb.Mapper `xweb:"/service/feedback/detail"` //反馈信息详情
-}
-
-//反馈列表
-func (f *Feedback) FeedbackList() {
-	defer qu.Catch()
-	if f.Method() == "POST" {
-		start, _ := f.GetInteger("start")
-		limit, _ := f.GetInteger("length")
-		draw, _ := f.GetInteger("draw")
-		searchStr := f.GetString("search[value]")
-		search := strings.TrimSpace(searchStr)
-		//qu.Debug(start, limit, draw, search)
-		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("feedback", query, `{"_id":-1}`, nil, false, start, limit)
-		count := Mgo.Count("feedback", query)
-		f.ServeJson(map[string]interface{}{
-			"draw":            draw,
-			"data":            data,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	} else {
-		f.Render("private/feedback_list.html")
-	}
-}
-
-//反馈信息详情
-func (f *Feedback) FeedbackDetail() {
-	defer qu.Catch()
-	if f.Method() == "POST" {
-		start, _ := f.GetInteger("start")
-		limit, _ := f.GetInteger("length")
-		draw, _ := f.GetInteger("draw")
-		searchStr := f.GetString("search[value]")
-		search := strings.TrimSpace(searchStr)
-		matchkey := f.GetString("matchkey")
-		id := f.GetString("id")
-		query := bson.M{
-			"s_pid": id,
-		}
-		if matchkey != "-1" {
-			query["s_matchkey"] = bson.M{
-				"$regex": matchkey,
-			}
-		} else if search != "" {
-			query["s_matchkey"] = bson.M{
-				"$regex": search,
-			}
-		}
-		data, _ := Mgo.Find("feedback_info", query, nil, nil, false, start, limit)
-		count := Mgo.Count("feedback_info", query)
-		f.ServeJson(map[string]interface{}{
-			"draw":            draw,
-			"data":            data,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	} else {
-		id := f.GetString("_id")
-		query := bson.M{
-			"_id": mongodb.StringTOBsonId(id),
-		}
-		data, _ := Mgo.FindOne("feedback", query)
-		f.T["id"] = id
-		f.T["data"] = data
-		f.Render("private/feedback_detail.html", &f.T)
-	}
-}

+ 138 - 0
src/service/oprd_service.go

@@ -0,0 +1,138 @@
+package service
+
+import (
+	"encoding/json"
+	"github.com/go-xweb/xweb"
+	"mongodb"
+	qu "qfw/util"
+	"qfw/util/elastic"
+	"time"
+	"util"
+)
+
+type OprdData struct {
+	*xweb.Action
+	modifyData xweb.Mapper `xweb:"/service/oprd/modify"`
+	findById   xweb.Mapper `xweb:"/service/oprd/find/id"`
+	findByUrl  xweb.Mapper `xweb:"/service/oprd/find/url"`
+	delData    xweb.Mapper `xweb:"/service/oprd/del"`
+	saveData   xweb.Mapper `xweb:"/service/oprd/modify/save"`
+}
+
+var Field = map[string]interface{}{"city": 1, "district": 1, "title": 1, "publishtime": 1, "projectname": 1, "projectcode": 1,
+	"budget": 1, "bidamount": 1, "bidopentime": 1, "buyer": 1, "buyertagname": 1, "buyerperson": 1, "buyertel": 1, "agency": 1,
+	"winner": 1, "winnerperson": 1, "winnertel": 1}
+
+func (o *OprdData) ModifyData() {
+	defer qu.Catch()
+	_ = o.Render("oprd/bidding_modify.html")
+}
+
+func (o *OprdData) FindById() {
+	defer qu.Catch()
+	id := o.GetString("_id")
+	if !mongodb.IsObjectIdHex(id) {
+		id = qu.SE.DecodeString(id)
+		if !mongodb.IsObjectIdHex(id) {
+			o.ServeJson(map[string]interface{}{"rep": false, "msg": "id错误!"})
+			return
+		}
+	}
+	info, _ := util.OprdMgo.FindById("oprd_bidding", id, Field)
+	if len(*info) > 0 {
+		o.ServeJson(map[string]interface{}{"rep": true, "data": *info})
+	} else {
+		o.ServeJson(map[string]interface{}{"rep": false, "msg": "id: " + id + ",找不到!"})
+	}
+}
+
+func (o *OprdData) FindByUrl() {
+	defer qu.Catch()
+	url := o.GetString("url")
+	url = rpre.ReplaceAllString(url, "")
+	url = rsuf.ReplaceAllString(url, "")
+	id := qu.CommonDecodeArticle("content", url)[0]
+	if !mongodb.IsObjectIdHex(id) {
+		o.ServeJson(map[string]interface{}{
+			"rep": false,
+			"msg": "href不正确",
+		})
+	} else {
+		info, _ := util.OprdMgo.FindById("oprd_bidding", id, Field)
+		if len(*info) > 0 {
+			o.ServeJson(map[string]interface{}{"rep": true, "data": *info})
+		} else {
+			o.ServeJson(map[string]interface{}{"rep": false, "msg": "id: " + id + ",找不到!"})
+		}
+	}
+}
+
+func (o *OprdData) DelData() {
+	defer qu.Catch()
+	id := o.GetString("_id")
+	if !mongodb.IsObjectIdHex(id) {
+		o.ServeJson(map[string]interface{}{
+			"rep": false,
+			"msg": "id: " + id + ",错误!",
+		})
+	} else {
+		info, _ := util.Mgo.FindById("oprd_bidding", id, nil)
+		delete(*info, "_id")
+		user := o.GetSession("user").(map[string]interface{})
+		log_data := map[string]interface{}{
+			"s_modifyuser":   user["name"],
+			"i_modifytime":   time.Now().Unix(),
+			"s_modifyreason": "删除",
+			"o_oldinfo":      *info,
+		}
+		util.OprdMgo.Save("oprd_log", log_data)
+		util.OprdMgo.Del("oprd_bidding", map[string]interface{}{"_id": mongodb.StringTOBsonId(id)})
+
+		client := elastic.GetEsConn()
+		defer elastic.DestoryEsConn(client)
+		_, err := client.Delete().Index("oprd_bidding_v1").Type("bidding").Id(id).Refresh(true).Do()
+		if err != nil {
+			qu.Debug("delete es err:", err)
+		}
+		o.ServeJson(map[string]interface{}{
+			"rep": true,
+		})
+	}
+}
+
+func (o *OprdData) SaveData() {
+	defer qu.Catch()
+	dataStr := o.GetString("data")
+	var updata map[string]interface{}
+	if err := json.Unmarshal([]byte(dataStr), &updata); err != nil {
+		qu.Debug("data Unmarshal Failed:", err)
+	}
+	id := o.GetString("id")
+	old_data, _ := util.OprdMgo.FindById("oprd_bidding", id, Field)
+	delete(*old_data, "_id")
+	for k, v := range updata {
+		if k == "publishtime" || k == "bidopentime" {
+			(updata)[k] = qu.IntAll(v)
+		} else if k == "budget" || k == "bidamount" {
+			(updata)[k] = qu.Float64All(v)
+		}
+	}
+	util.FormatNumber(updata)
+	qu.Debug(id, updata)
+	rep := util.OprdMgo.UpdateById("oprd_bidding", id, map[string]interface{}{"$set": updata})
+	if !rep {
+		o.ServeJson(map[string]interface{}{
+			"rep": rep,
+		})
+		return
+	}
+	client := elastic.GetEsConn()
+	defer elastic.DestoryEsConn(client)
+	_, err := client.Update().Index("oprd_bidding_v1").Type("bidding").Id(id).Doc(updata).Refresh(true).Do()
+	if err != nil {
+		qu.Debug("delete es err:", err)
+	}
+	o.ServeJson(map[string]interface{}{
+		"rep": rep,
+	})
+}

+ 0 - 530
src/service/private_rule.go

@@ -1,530 +0,0 @@
-package service
-
-import (
-	"encoding/json"
-	"fmt"
-	"io"
-	"io/ioutil"
-	"mongodb"
-	"net/http"
-	"os"
-	qu "qfw/util"
-	"strconv"
-	"strings"
-	"time"
-	. "util"
-
-	"github.com/lauyoume/gopinyin"
-
-	"github.com/go-xweb/xweb"
-	"go.mongodb.org/mongo-driver/bson"
-)
-
-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"` //存档
-	history xweb.Mapper `xweb:"/service/rule/history"` //变更列表
-
-	productData      xweb.Mapper `xweb:"/service/rule/produce"`          //生成预览数据
-	downloadData     xweb.Mapper `xweb:"/service/rule/downloadata"`      //下载数据
-	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"] = SubTypeMap
-		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() {
-	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 {
-					//id, rep := updateDbXf("", rdata)
-					//qu.Debug("import data:", rdata)
-					r.ServeJson(map[string]interface{}{
-						"rdata": rdata,
-						"id":    "",
-						"rep":   true,
-					})
-					return
-				}
-			}
-		}
-		r.ServeJson(map[string]interface{}{
-			"rep": false,
-		})
-	}
-}
-
-func (r *Rule) RuleEdit() {
-	defer qu.Catch()
-	id := r.GetString("id")         //标签列表编辑
-	dataid := r.GetString("dataid") //反馈列表编辑
-	query := bson.M{}
-	if id != "" {
-		query["_id"] = mongodb.StringTOBsonId(id)
-	} else if dataid != "" {
-		query["s_dataid"] = dataid
-	}
-	data, _ := Mgo.FindOneByField("tags", query, `{}`)
-	(*data)["id"] = mongodb.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"] = SubTypeMap
-	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" {
-		rep := false
-		_id := r.GetString("_id")
-		query := bson.M{
-			"_id": mongodb.StringTOBsonId(_id),
-		}
-		tag, _ := Mgo.FindOne("tags", 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 *Rule) History() {
-	defer qu.Catch()
-	tagid := r.GetString("tagid")
-	if r.Method() == "POST" {
-		data, _ := Mgo.Find("tags_history", `{"s_tagid":"`+tagid+`"}`, nil, nil, false, -1, -1)
-		r.ServeJson(map[string]interface{}{
-			"data": data,
-		})
-	} else {
-		r.T["tagid"] = tagid
-		r.Render("private/rule_history.html", &r.T)
-	}
-}
-
-func (r *Rule) ExportEs() {
-	defer qu.Catch()
-	id := r.GetString("id")
-	if id == "" {
-		return
-	}
-	w := r.ResponseWriter
-	tag, _ := Mgo.FindById("tags", id, `{}`)
-	s_esquery := (*tag)["s_esquery"].(string)
-	createEsJosn(s_esquery)
-	file, err := os.Open("./es.json")
-	//file, err := os.OpenFile("./es.json", os.O_RDWR|os.O_CREATE, 0666)
-	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 createEsJosn(es string) {
-	defer qu.Catch()
-	jmap := make(map[string]interface{})
-	err := json.Unmarshal([]byte(es), &jmap)
-	//j, err := json.Marshal(es)
-	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
-	}
-}
-
-//更新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": mongodb.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" {
-		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 *Rule) ProductData() {
-	defer qu.Catch()
-	if r.Method() == "POST" {
-		rep := false
-		id := r.GetString("id")
-		tag, _ := Mgo.FindById("tags", id, `{}`)
-		err, count := UtilEsFind(*tag)
-		if err == nil {
-			rep = true
-		}
-		r.ServeJson(map[string]interface{}{
-			"rep":   rep,
-			"count": count,
-		})
-	}
-}
-func (r *Rule) 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 *Rule) DownloadRule() {
-	defer qu.Catch()
-	id := r.GetString("id")
-	path := ResponseXlsx_Rule(id, "private")
-	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)
-	}
-}
-
-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,
-	})
-}

+ 0 - 263
src/service/private_service.go

@@ -1,263 +0,0 @@
-package service
-
-import (
-	"encoding/json"
-	"fmt"
-	"github.com/go-xweb/xweb"
-	"go.mongodb.org/mongo-driver/bson"
-	"io/ioutil"
-	"log"
-	"net/http"
-	qu "qfw/util"
-	gm "qfw/util/mail"
-	"regexp"
-	"sort"
-	"strings"
-	"time"
-	"unicode/utf8"
-	. "util"
-)
-
-var (
-	phonereg *regexp.Regexp = regexp.MustCompile(`0?(13|14|15|17|18|19)[0-9]{9}`)
-	telreg   *regexp.Regexp = regexp.MustCompile(`[0-9-()()]{7,18}`)
-	emailreg *regexp.Regexp = regexp.MustCompile(`\w[-\w.+]*@([A-Za-z0-9][-A-Za-z0-9]+\.)+[A-Za-z]{2,14}`)
-	pre      *regexp.Regexp = regexp.MustCompile("https://www.jianyu360.cn/article/content/")
-	suf      *regexp.Regexp = regexp.MustCompile("(.html).*")
-)
-
-type Private struct {
-	*xweb.Action
-	keydatademo   xweb.Mapper `xweb:"/private/keydatademo/(.*)"`   //加密串
-	keydataoption xweb.Mapper `xweb:"/private/keydataoption/(.*)"` //加密串
-}
-
-func (f *Private) Keydatademo(world string) {
-	tmp := make(map[string]interface{})
-	destr := qu.SE.DecodeString(world)
-	typeStr := f.GetString("type")
-
-	qu.Debug(destr)
-	if len(destr) > 10 {
-		ctime := destr[:10]
-		ctimeint := qu.Int64All(ctime)
-		if time.Now().Sub(time.Unix(ctimeint, 0)).Hours()/24 < Subday {
-			var tagfield *map[string]interface{}
-			if typeStr == "private" {
-				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})
-			}
-			if (*tagfield) != nil && len(*tagfield) > 0 {
-				if qu.Int64All((*tagfield)["i_extfieldstype"]) == Standard {
-					tmp["fieldtype"] = Standardstr
-				} else if qu.Int64All((*tagfield)["i_extfieldstype"]) == Advanced {
-					tmp["fieldtype"] = Advancedstr
-				} else {
-					f.ServeJson(map[string]string{
-						"err": "参数失效",
-					})
-					return
-				}
-				tmp["total"] = qu.Int64All((*tagfield)["i_estotal"])
-				tmp["customername"] = qu.ObjToString((*tagfield)["s_customer"])
-				datas, _ := Mgo.Find("tagsdata", bson.M{"s_dataid": world}, `{"publishtime":-1}`, nil, false, -1, -1)
-				if (*datas) != nil && len(*datas) > 0 {
-					matchskey := make(map[string]bool)
-					rdata := make([]map[string]interface{}, 0)
-					for _, v := range *datas {
-						for _, mv := range strings.Split(qu.ObjToString(v["s_matchkey"]), ",") {
-							matchskey[mv] = true
-						}
-						delete(v, "_id")
-						delete(v, "s_dataid")
-						delete(v, "i_createtime")
-
-						if v["bidamount"] != nil {
-							v["bidamount"] = qu.Float64All(fmt.Sprintf("%f", qu.Float64All(v["bidamount"])/10000))
-						}
-						if v["budget"] != nil {
-							v["budget"] = qu.Float64All(fmt.Sprintf("%f", qu.Float64All(v["budget"])/10000))
-						}
-						if v["publishtime"] != nil {
-							v["publishtime"] = time.Unix(qu.Int64All(v["publishtime"]), 0).Format("2006-01-02")
-						}
-						if v["bidopentime"] != nil {
-							v["bidopentime"] = time.Unix(qu.Int64All(v["bidopentime"]), 0).Format("2006-01-02")
-						}
-						if utf8.RuneCountInString(qu.ObjToString(v["title"])) > 60 {
-							title := string([]rune(qu.ObjToString(v["title"]))[:60])
-							v["title"] = title + "..."
-						}
-						if utf8.RuneCountInString(qu.ObjToString(v["detail"])) > 150 {
-							detail := string([]rune(qu.ObjToString(v["detail"]))[:150])
-							v["detail"] = detail + "..."
-						}
-						if qu.Int64All((*tagfield)["i_extfieldstype"]) == Advanced {
-							legal_person := strings.TrimSpace(qu.ObjToString(v["legal_person"]))
-							if utf8.RuneCountInString(legal_person) > 1 {
-								legal_person := []rune(legal_person)
-								v["legal_person"] = string(legal_person[:1]) + "**"
-							}
-
-							cemail := strings.TrimSpace(qu.ObjToString(v["company_email"]))
-							if emailreg.MatchString(cemail) {
-								v["company_email"] = "********" + cemail[strings.Index(cemail, "@"):]
-							} else {
-								v["company_email"] = ""
-							}
-							company_phone := strings.TrimSpace(qu.ObjToString(v["company_phone"]))
-							if telreg.MatchString(company_phone) || phonereg.MatchString(company_phone) {
-								company_phone = company_phone[:len(company_phone)-5] + "****"
-								v["company_phone"] = company_phone
-							} else {
-								v["company_phone"] = ""
-							}
-						}
-						deletefields(qu.IntAll((*tagfield)["i_extfieldstype"]), &v)
-						rdata = append(rdata, v)
-					}
-					tmp["keylist"] = []string{}
-					for k := range matchskey {
-						if k == "" {
-							continue
-						}
-						tmp["keylist"] = append(tmp["keylist"].([]string), k)
-					}
-					tmp["data"] = rdata
-					f.ServeJson(tmp)
-					return
-				}
-			}
-		}
-	}
-	f.ServeJson(map[string]string{
-		"err": "参数失效",
-	})
-}
-
-func (f *Private) Keydataoption(world string) {
-	destr := qu.SE.DecodeString(world)
-	tmp := make(map[string]interface{})
-	bytes := f.Body()
-	err := json.Unmarshal(bytes, &tmp)
-	if err == nil && len(destr) > 10 {
-		ctime := destr[:10]
-		ctimeint := qu.Int64All(ctime)
-		if time.Now().Sub(time.Unix(ctimeint, 0)).Hours()/24 < Subday {
-			res, _ := Mgo.FindOne("tags", bson.M{"s_dataid": world})
-			if nil != res && len(*res) > 0 {
-				feedback := make(map[string]interface{})
-				feedback["s_dataid"] = world
-				feedback["s_customer"] = (*res)["s_customer"]
-				feedback["s_tagname"] = (*res)["s_tagname"]
-				feedback["s_opinion"] = tmp["option"]
-				feedback["i_num"] = len(tmp["urls"].([]interface{}))
-				feedback["l_feedbacktime"] = time.Now().Unix()
-
-				tmps := make([]map[string]interface{}, 0)
-				for _, tt := range tmp["urls"].([]interface{}) {
-					ttres, _ := Mgo.FindOne("tagsdata", bson.M{"s_jyhref": tt})
-					if nil != ttres && len(*ttres) > 0 {
-						tmps = append(tmps, *ttres)
-					}
-				}
-
-				keysnum := make(map[string]int)
-				for _, v := range tmps {
-					for _, vv := range strings.Split(qu.ObjToString(v["s_matchkey"]), ",") {
-						keysnum[vv] += 1
-					}
-				}
-				keynums := []keynum{}
-				for k, v := range keysnum {
-					keynums = append(keynums, keynum{k, v})
-				}
-
-				sort.Slice(keynums, func(i, j int) bool {
-					return keynums[i].Num > keynums[j].Num
-				})
-				keyssort := []string{}
-				for _, v := range keynums {
-					keyssort = append(keyssort, v.Key)
-				}
-				feedback["o_matchkey"] = keyssort
-				pid := Mgo.Save("feedback", feedback)
-				if len(pid) < 1 {
-					log.Println("mongo save err")
-					return
-				}
-
-				for _, v := range tmps {
-					savetmp := map[string]interface{}{}
-					savetmp["s_pid"] = pid
-					savetmp["s_infoid"] = urlToId(qu.ObjToString(v["s_jyhref"]))
-					savetmp["s_jyhref"] = qu.ObjToString(v["s_jyhref"])
-					savetmp["s_matchkey"] = qu.ObjToString(v["s_matchkey"])
-					savetmp["s_projectname"] = qu.ObjToString(v["projectname"])
-					savetmp["s_title"] = qu.ObjToString(v["title"])
-					savetmp["s_buyerclass"] = qu.ObjToString(v["buyerclass"])
-					savetmp["s_subtype"] = qu.ObjToString(v["subtype"])
-					savetmp["s_purchasing"] = qu.ObjToString(v["s_purchasing"])
-					Mgo.Save("feedback_info", savetmp)
-				}
-				f.ServeJson(map[string]string{
-					"code": "1",
-					"err":  "提交成功",
-				})
-				go sendMail(*res, qu.ObjToString(tmp["option"])) //发送邮件
-				return
-			}
-		}
-	}
-	f.ServeJson(map[string]string{
-		"err": "参数失效",
-	})
-
-}
-
-type keynum struct {
-	Key string
-	Num int
-}
-
-var gmail *gm.GmailAuth
-
-func urlToId(url string) string {
-	url = pre.ReplaceAllString(url, "")
-	url = suf.ReplaceAllString(url, "")
-	return qu.CommonDecodeArticle("content", url)[0]
-}
-
-func deletefields(fieldnum int, data *map[string]interface{}) map[string]interface{} {
-	rdata := make(map[string]interface{})
-	one, _ := Mgo.FindOne("code_fields", bson.M{})
-	if one != nil && len(*one) > 0 {
-		for _, v := range (*one)[fmt.Sprintf("%d", fieldnum)].([]interface{}) {
-			if (*data)[qu.ObjToString(v)] != nil {
-				rdata[qu.ObjToString(v)] = (*data)[qu.ObjToString(v)]
-			}
-		}
-	}
-	return rdata
-}
-
-func sendMail(tag map[string]interface{}, option string) {
-	jkmail, _ := Sysconfig["jkmail"].(map[string]interface{})
-	title := "标签系统" + qu.ObjToString(tag["s_customername"]) + "反馈信息"
-	content := "客户姓名:" + qu.ObjToString(tag["s_customername"]) + "</br>" + "标签名称:" + qu.ObjToString(tag["s_tagname"]) + "</br>" +
-		"销售经理:" + qu.ObjToString(tag["s_salesperson"]) + "</br>" + "反馈内容:" + option
-	if jkmail != nil {
-		tomail, _ := jkmail["to"].(string)
-		api, _ := jkmail["api"].(string)
-		log.Println("start send", tomail, Sysconfig["jkmail"])
-		res, err := http.Get(fmt.Sprintf("%s?to=%s&title=%s&body=%s", api, tomail, title, content))
-		if err == nil {
-			defer res.Body.Close()
-			read, err := ioutil.ReadAll(res.Body)
-			log.Println("邮件发送:", string(read), err)
-		}
-	}
-}

+ 31 - 0
src/service/repair_service.go

@@ -5,6 +5,7 @@ import (
 	"encoding/json"
 	"fmt"
 	"github.com/go-xweb/xweb"
+	"github.com/tealeg/xlsx"
 	"go.mongodb.org/mongo-driver/bson"
 	"go.mongodb.org/mongo-driver/bson/primitive"
 	"io"
@@ -713,6 +714,36 @@ func (jy *RepairRule) RepairImport() {
 	}
 }
 
+/**
+ * 导入剑鱼批量修改数据
+ */
+func ParsJyData(filebyte []byte) ([]map[string]interface{}, error) {
+	var jyData []map[string]interface{}
+	var keyName []string
+	file, err := xlsx.OpenBinary(filebyte)
+	if err != nil {
+		return jyData, err
+	}
+
+	for i, v := range file.Sheets[0].Rows {
+		data := make(map[string]interface{})
+		for ii, vv := range v.Cells {
+			if i == 0 {
+				keyName = append(keyName, vv.Value)
+			} else {
+				if vv.Value != "" {
+					data[keyName[ii]] = vv.Value
+				}
+			}
+		}
+		if len(data) > 0 {
+			jyData = append(jyData, data)
+		}
+	}
+
+	return jyData, nil
+}
+
 /**
 批量删除
 */

+ 0 - 190
src/service/tag_rule_service.go

@@ -1,190 +0,0 @@
-package service
-
-import (
-	"encoding/json"
-	"github.com/go-xweb/xweb"
-	"io/ioutil"
-	"mongodb"
-	qu "qfw/util"
-	"strings"
-	"time"
-
-	. "util"
-
-	"go.mongodb.org/mongo-driver/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"] = mongodb.StringTOBsonId(id)
-	data, _ := Mgo.FindOneByField("tagrule", query, `{}`)
-	(*data)["id"] = mongodb.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": mongodb.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 - 232
src/service/task_rule.go

@@ -1,232 +0,0 @@
-package service
-
-import (
-	"encoding/json"
-	"log"
-	mu "mfw/util"
-	"mongodb"
-	"net"
-	qu "qfw/util"
-	"strings"
-	"time"
-	. "udptask"
-	. "util"
-
-	"github.com/go-xweb/xweb"
-	"go.mongodb.org/mongo-driver/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"] = mongodb.StringTOBsonId(id)
-	data, _ := Mgo.FindOneByField("taskinfo", query, `{}`)
-	(*data)["id"] = mongodb.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": mongodb.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": mongodb.StringTOBsonId(id),
-		}
-		rep = Mgo.Update("taskinfo", query, bson.M{"$set": rdata}, false, false)
-	}
-	return
-}

+ 16 - 102
src/util/config.go

@@ -12,12 +12,11 @@ var (
 	Mgo             *mongodb.MongodbSim
 	MgoCus          *mongodb.MongodbSim //企业服务库
 	JYMgo           *mongodb.MongodbSim
+	OprdMgo         *mongodb.MongodbSim
 	MgoEn           *mongodb.MongodbSim
 	JyProMgo        *mongodb.MongodbSim
 	EsIndex, EsType string
 	MgoEnC          string
-	Subday          float64
-	PreviewHref     string //数据预览地址
 	JyCollNameOne   string
 	JyCollNameTwo   string
 	JyRecord        string
@@ -29,24 +28,17 @@ var (
 	RedisDelKey3    string
 	RedisDelKey4    string
 	RedisDelKey5    string
-	RedisSave		string			// 新增数据保存信息
-	CustomerApi     string
+	RedisSave       string // 新增数据保存信息
 )
 
 var (
-	TopTypeArr    []string                  //公告一级分类
-	SubTypeMap    map[string][]string       //公告二级分类
-	Province      []string                  //省
-	ProvinceCitys map[string][]string       //省:[市1,市2]
-	CityDistricts map[string][]string       //市:[区1,区2]
-	BuyerClass    []string                  //采购单位行业
-	MatchTypeMap  *[]map[string]interface{} //匹配方式
-	MatchTypeMap2 map[string]interface{}    //匹配方式
-	MatchTypeMap3 *[]map[string]interface{} //匹配方式
-	ExistFiled    *[]map[string]interface{} //存在的字段
-	ScopeClassMap map[string]interface{} 	//公告行业
-	TagFieldMap   *[]map[string]interface{} //标签属性值
-	TaskTypeMap   *[]map[string]interface{} //任务类型
+	TopTypeArr    []string               //公告一级分类
+	SubTypeMap    map[string][]string    //公告二级分类
+	Province      []string               //省
+	ProvinceCitys map[string][]string    //省:[市1,市2]
+	CityDistricts map[string][]string    //市:[区1,区2]
+	BuyerClass    []string               //采购单位行业
+	ScopeClassMap map[string]interface{} //公告行业
 )
 
 func InitMgoPool() {
@@ -59,26 +51,13 @@ func InitMgoPool() {
 	}
 	Mgo.InitPool()
 
-	customer := Sysconfig["customer"].(map[string]interface{})
-	CustomerApi = qu.ObjToString(customer["api"])
-	MgoCus = &mongodb.MongodbSim{
-		MongodbAddr: qu.ObjToString(customer["mgodb"]),
-		Size:        qu.IntAll(customer["dbsize"]),
-		DbName:      qu.ObjToString(customer["dbname"]),
+	mgo := *qu.ObjToMap(Sysconfig["oprd_db"])
+	OprdMgo = &mongodb.MongodbSim{
+		MongodbAddr: qu.ObjToString(mgo["addr"]),
+		Size:        qu.IntAll(mgo["dbsize"]),
+		DbName:      qu.ObjToString(mgo["dbname"]),
 	}
-	MgoCus.InitPool()
-}
-
-func initMgoEn() {
-	MgoEn = &mongodb.MongodbSim{
-		MongodbAddr: qu.ObjToString(Sysconfig["mgodben"]),
-		Size:        qu.IntAll(Sysconfig["dbsize"]),
-		DbName:      qu.ObjToString(Sysconfig["dbnameen"]),
-		UserName:    qu.ObjToString(Sysconfig["uname"]),
-		Password:    qu.ObjToString(Sysconfig["upwd"]),
-	}
-	MgoEnC = qu.ObjToString(Sysconfig["mongoenc"])
-	MgoEn.InitPool()
+	OprdMgo.InitPool()
 }
 
 func initJYMgo() {
@@ -120,47 +99,12 @@ func initJYRedis() {
 }
 
 func InitOther() {
-	initCitys()
 	initInfoType()
 	initBuyerClass()
-	initMatchType()
-	initExitField()
 	initScopeClass()
-	initTaskType()
 	initEs()
-	initMgoEn()
 	initJYMgo()
 	initJYRedis()
-	Subday = qu.Float64All(Sysconfig["subday"])
-	PreviewHref = qu.ObjToString(Sysconfig["preview_href"])
-	initTagField()
-}
-
-func initCitys() {
-	//map初始化
-	if ProvinceCitys == nil {
-		ProvinceCitys = make(map[string][]string)
-	}
-	if CityDistricts == nil {
-		CityDistricts = make(map[string][]string)
-	}
-	datas, _ := Mgo.Find("code_city", `{}`, `{"_id":1}`, `{}`, false, -1, -1)
-	for _, data := range *datas {
-		brief := data["brief"].(string)
-		Province = append(Province, brief)
-		citys := data["citys"].([]interface{})
-		citytmp := []string{}
-		for _, city := range citys {
-			cityMap := city.(map[string]interface{})
-			for cname, districts := range cityMap {
-				citytmp = append(citytmp, cname)
-				tmp := districts.([]interface{})
-				districtarr := qu.ObjArrToStringArr(tmp)
-				CityDistricts[cname] = districtarr
-			}
-		}
-		ProvinceCitys[brief] = citytmp
-	}
 }
 
 func initInfoType() {
@@ -182,47 +126,17 @@ func initBuyerClass() {
 	}
 }
 
-func initMatchType() {
-	//map初始化
-	if MatchTypeMap2 == nil {
-		MatchTypeMap2 = make(map[string]interface{})
-	}
-	MatchTypeMap, _ = Mgo.Find("code_matchtype", `{}`, `{"_id":1}`, `{}`, false, -1, -1)
-	MatchTypeMap3, _ = Mgo.Find("code_matchtype", `{"type": 1}`, nil, nil, false, -1, -1)
-	for _, d := range *MatchTypeMap {
-		code := qu.ObjToString(d["code"])
-		name := qu.ObjToString(d["name"])
-		MatchTypeMap2[code] = name
-	}
-}
-
-func initExitField() {
-	ExistFiled, _ = Mgo.Find("code_field", `{}`, `{"_id":1}`, `{}`, false, -1, -1)
-	//for _, data := range *datas {
-	//	name := data["name"].(string)
-	//	ExistFiled = append(ExistFiled, name)
-	//}
-}
-
 func initScopeClass() {
 	if ScopeClassMap == nil {
 		ScopeClassMap = make(map[string]interface{})
 	}
 	info, _ := Mgo.Find("code_scopeclass", `{}`, `{"_id": 1}`, `{}`, false, -1, -1)
-	for _, i := range *info{
+	for _, i := range *info {
 		ScopeClassMap[qu.ObjToString(i["name"])] = i["child"]
 	}
 }
 
-func initTaskType() {
-	TaskTypeMap, _ = Mgo.Find("code_task", `{}`, `{"_id": 1}`, `{}`, false, -1, -1)
-}
-
 func initEs() {
 	EsIndex, EsType = qu.ObjToString(Sysconfig["elasticsearch_index"]), qu.ObjToString(Sysconfig["elasticsearch_type"])
 	elastic.InitElasticSize(qu.ObjToString(Sysconfig["elasticsearch"]), qu.IntAllDef(qu.Int64All(Sysconfig["elasticPoolSize"]), 30))
 }
-
-func initTagField() {
-	TagFieldMap, _ = Mgo.Find("code_tagfield", `{}`, `{"_id": 1}`, `{}`, false, -1, -1)
-}

+ 0 - 638
src/util/parsxlsx.go

@@ -1,638 +0,0 @@
-package util
-
-import (
-	"fmt"
-	"log"
-	"mongodb"
-	"qfw/util"
-	"strings"
-	"time"
-
-	"github.com/tealeg/xlsx"
-	"go.mongodb.org/mongo-driver/bson"
-)
-
-const (
-	Matchkey       = "s_matchkey"       //关键词
-	Addkey         = "s_addkey"         //附加词
-	Notkey         = "s_notkey"         //排除词
-	Buyerclass     = "s_buyerclass"     //采购单位行业
-	Topscopeclass  = "s_topscopeclass"  //行业-一级
-	Subscopeclass  = "s_subscopeclass"  //行业-二级
-	Globaladdkey   = "s_globaladdkey"   // 全局附加词
-	Globalnotkey   = "s_globalnotkey"   //全局排除词
-	Globalclearkey = "s_globalclearkey" //全局排除词
-
-	Tagname = "s_tagname" //标签的关键词规则名称
-)
-
-//通用标签相关字段
-var export_fields = []string{"s_customer", "s_tagname", "", "s_area", "s_city", "s_district", "s_toptype", "s_subtype", "i_starttime", "i_endtime", "s_budgetlimit", "s_bidamountlimit", "s_globaltopscopeclass", "s_globalsubscopeclass", "s_globalbuyerclass", "s_globaladdkey", "s_globaladdkeymatch", "s_globalnotkey", "s_globalnotkeymatch", "s_globalclearkey", "s_globalclearkeymatch", "s_existfields", "i_extfieldstype"}
-var export_fields1 = []string{"s_userid", "s_tagname", "", "s_area", "s_city", "s_district", "s_toptype", "s_subtype", "i_starttime", "i_endtime", "s_budgetlimit", "s_bidamountlimit", "s_globaltopscopeclass", "s_globalsubscopeclass", "s_globalbuyerclass", "s_globaladdkey", "s_globaladdkeymatch", "s_globalnotkey", "s_globalnotkeymatch", "s_globalclearkey", "s_globalclearkeymatch", "s_existfields", "i_extfieldstype"}
-
-//关键词标签相关字段
-var export_o_rules = []string{"s_matchkey", "s_keymatch", "s_addkey", "s_addkeymatch", "s_notkey", "s_notkeymatch", "s_buyerclass"}
-
-//定义值为数字的多个匹配方式map
-var export_numfield = map[string]bool{
-	"s_globaladdkeymatch":   true,
-	"s_globalnotkeymatch":   true,
-	"s_globalclearkeymatch": true,
-	"s_keymatch":            true,
-	"s_addkeymatch":         true,
-	"s_notkeymatch":         true,
-}
-
-//匹配方式map
-var export_matchtype = map[string]interface{}{
-	"1": "标题匹配",
-	"2": "全文匹配",
-	"3": "标的物匹配",
-	"4": "附件匹配",
-	"5": "项目名称匹配",
-	"6": "采购单位匹配",
-	"7": "中标单位匹配",
-	"8": "采购单位匹配(正则)",
-	"9": "中标单位匹配(正则)",
-}
-
-//字段包类型
-var export_extfieldstype = map[string]interface{}{
-	"1": "标准字段包",
-	"2": "高级字段包",
-}
-
-/**
- * 导入关键词表格
- */
-func Parsxlsx(filebyte []byte) (map[string]interface{}, error) {
-	rdata := make(map[string]interface{})
-	tmps := make([]map[string]string, 0)
-	file, err := xlsx.OpenBinary(filebyte)
-	if err != nil {
-		return rdata, err
-	}
-	gaddkeyArr := []string{}
-	gnotkeyArr := []string{}
-	clearkeyArr := []string{}
-	for _, v := range file.Sheets {
-		for ii, vv := range v.Rows {
-			rule := make(map[string]string)
-			if ii == 0 {
-				//第一行跳过
-				continue
-			}
-			for iii, vvv := range vv.Cells {
-				gaddkeyArr, gnotkeyArr, clearkeyArr = writeMap(rule, iii, vvv.Value, gaddkeyArr, gnotkeyArr, clearkeyArr)
-			}
-			tmps = append(tmps, rule)
-		}
-	}
-	rdata["o_rules"] = tmps
-	if len(gaddkeyArr) >= 1 {
-		rdata[Globaladdkey] = strings.Join(gaddkeyArr, ",")
-	}
-	if len(gnotkeyArr) >= 1 {
-		rdata[Globalnotkey] = strings.Join(gnotkeyArr, ",")
-	}
-	if len(clearkeyArr) >= 1 {
-		rdata[Globalclearkey] = strings.Join(clearkeyArr, ",")
-	}
-	return rdata, nil
-}
-
-/**
- * 导入关键词表格
- */
-func Parsxlsx1(filebyte []byte) (map[string]interface{}, error) {
-	rdata := make(map[string]interface{})
-	tmps := make([]map[string]string, 0)
-	file, err := xlsx.OpenBinary(filebyte)
-	if err != nil {
-		return rdata, err
-	}
-	for _, v := range file.Sheets {
-		for ii, vv := range v.Rows {
-			rule := make(map[string]string)
-			if ii == 0 {
-				//第一行跳过
-				continue
-			}
-			for iii, vvv := range vv.Cells {
-				writeMap1(rule, iii, vvv.Value)
-			}
-			tmps = append(tmps, rule)
-		}
-	}
-	rdata["o_rules"] = tmps
-	return rdata, nil
-}
-
-func writeMap(tmp map[string]string, i int, v string, addArr, notArr, clearkeyArr []string) ([]string, []string, []string) {
-	switch i {
-	case 0:
-		if v != "" {
-			//空格
-			v = strings.TrimSpace(v)
-			//中文逗号
-			v = strings.ReplaceAll(v, ",", ",")
-			tmp[Matchkey] = v
-		}
-		break
-	case 1:
-		if v != "" {
-			v = strings.TrimSpace(v)
-			v = strings.ReplaceAll(v, ",", ",")
-			tmp[Addkey] = v
-		}
-		break
-	case 2:
-		if v != "" {
-			v = strings.TrimSpace(v)
-			v = strings.ReplaceAll(v, ",", ",")
-			tmp[Notkey] = v
-		}
-		break
-	case 3:
-		if v != "" {
-			v = strings.TrimSpace(v)
-			v = strings.ReplaceAll(v, ",", ",")
-			tmp[Buyerclass] = v
-		}
-		break
-	case 4:
-		if v != "" {
-			v = strings.TrimSpace(v)
-			v = strings.ReplaceAll(v, ",", ",")
-			tmp[Topscopeclass] = v
-		}
-		break
-	case 5:
-		if v != "" {
-			v = strings.TrimSpace(v)
-			v = strings.ReplaceAll(v, ",", ",")
-			tmp[Subscopeclass] = v
-		}
-		break
-	case 6:
-		if v != "" {
-			v = strings.TrimSpace(v)
-			v = strings.ReplaceAll(v, ",", ",")
-			addArr = append(addArr, v)
-		}
-		break
-	case 7:
-		if v != "" {
-			v = strings.TrimSpace(v)
-			v = strings.ReplaceAll(v, ",", ",")
-			notArr = append(notArr, v)
-		}
-		break
-	case 8:
-		if v != "" {
-			v = strings.TrimSpace(v)
-			v = strings.ReplaceAll(v, ",", ",")
-			clearkeyArr = append(clearkeyArr, v)
-		}
-		break
-	}
-	return addArr, notArr, clearkeyArr
-}
-
-func writeMap1(tmp map[string]string, i int, v string) {
-	switch i {
-	case 0:
-		if v != "" {
-			//空格
-			v = strings.TrimSpace(v)
-			//中文逗号
-			v = strings.ReplaceAll(v, ",", ",")
-			tmp[Matchkey] = v
-		}
-		break
-	case 1:
-		if v != "" {
-			v = strings.TrimSpace(v)
-			v = strings.ReplaceAll(v, ",", ",")
-			tmp[Addkey] = v
-		}
-		break
-	case 2:
-		if v != "" {
-			v = strings.TrimSpace(v)
-			v = strings.ReplaceAll(v, ",", ",")
-			tmp[Notkey] = v
-		}
-		break
-	case 3:
-		if v != "" {
-			v = strings.TrimSpace(v)
-			v = strings.ReplaceAll(v, ",", ",")
-			tmp[Tagname] = v
-		}
-
-	}
-}
-
-var bzpath, gjpath, rpath string = "web/res/标准字段包%d.xlsx", "web/res/高级字段包%d.xlsx", "web/res/标签导出%d.xlsx"
-
-func ResponseXlsx_Data(id string) string {
-	if id != "" {
-		query := bson.M{
-			"_id": mongodb.StringTOBsonId(id),
-		}
-		data, _ := Mgo.FindOne("tags", query)
-		if (*data) != nil && len(*data) > 0 {
-			isStandard := true
-			if util.Int64All((*data)["i_extfieldstype"]) == Advanced {
-				isStandard = false
-			}
-
-			data, _ := Mgo.Find("tagsdata", bson.M{"s_dataid": util.ObjToString((*data)["s_dataid"])}, nil, nil, false, -1, -1)
-			if (*data) == nil || len(*data) == 0 {
-				return ""
-			}
-			xf, err := xlsx.OpenFile("web/res/fields.xlsx")
-			if err != nil {
-				log.Println("fields file not foud", err.Error())
-				return ""
-			}
-			if isStandard {
-				sh := xf.Sheets[0]
-				for i, v := range *data {
-					row := sh.AddRow()
-					row.AddCell().SetInt(i + 1)
-					row.AddCell().SetValue(v["s_matchkey"])
-					row.AddCell().SetValue(v["area"])
-					row.AddCell().SetValue(v["city"])
-					row.AddCell().SetValue(v["title"])
-					row.AddCell().SetValue(v["subtype"])
-					if v["publishtime"] != nil {
-						row.AddCell().SetValue(time.Unix(util.Int64All(v["publishtime"]), 0).Format("2006-01-02"))
-					} else {
-						row.AddCell()
-					}
-					row.AddCell().SetValue(v["buyer"])
-					row.AddCell().SetValue(v["winner"])
-					if v["bidamount"] != nil {
-						row.AddCell().SetFloat(util.Float64All(v["bidamount"]) / 10000)
-					} else {
-						row.AddCell()
-					}
-					row.AddCell().SetValue(v["projectname"])
-					row.AddCell().SetValue(v["detail"])
-					row.AddCell().SetValue(v["s_jyhref"])
-				}
-				xf.Sheets = xf.Sheets[:1]
-
-				fname := fmt.Sprintf(bzpath, time.Now().Unix())
-				err := xf.Save(fname)
-				if err != nil {
-					log.Println(err)
-					return ""
-				}
-				return fname
-			} else {
-				sh := xf.Sheets[1]
-				for i, v := range *data {
-					row := sh.AddRow()
-					row.AddCell().SetInt(i + 1)
-					row.AddCell().SetValue(v["s_matchkey"])
-					row.AddCell().SetValue(v["area"])
-					row.AddCell().SetValue(v["city"])
-					row.AddCell().SetValue(v["title"])
-					row.AddCell().SetValue(v["subtype"])
-					row.AddCell().SetValue(v["detail"])
-					if v["publishtime"] != nil {
-						row.AddCell().SetValue(time.Unix(util.Int64All(v["publishtime"]), 0).Format("2006-01-02"))
-					} else {
-						row.AddCell()
-					}
-					row.AddCell().SetValue(v["href"])
-					row.AddCell().SetValue(v["s_jyhref"])
-					row.AddCell().SetValue(v["projectcode"])
-					row.AddCell().SetValue(v["projectname"])
-					row.AddCell().SetValue(v["projectscope"])
-					if v["budget"] != nil {
-						row.AddCell().SetFloat(util.Float64All(v["budget"]) / 10000)
-					} else {
-						row.AddCell()
-					}
-					if v["bidamount"] != nil {
-						row.AddCell().SetFloat(util.Float64All(v["bidamount"]) / 10000)
-					} else {
-						row.AddCell()
-					}
-					if v["bidopentime"] != nil {
-						row.AddCell().SetValue(time.Unix(util.Int64All(v["bidopentime"]), 0).Format("2006-01-02"))
-					} else {
-						row.AddCell()
-					}
-					row.AddCell().SetValue(v["buyer"])
-					row.AddCell().SetValue(v["buyerperson"])
-					row.AddCell().SetValue(v["buyertel"])
-					row.AddCell().SetValue(v["agency"])
-					row.AddCell().SetValue(v["winner"])
-					row.AddCell().SetValue(v["winnerperson"])
-					row.AddCell().SetValue(v["winnertel"])
-					row.AddCell().SetValue(v["legal_person"])
-					row.AddCell().SetValue(v["company_phone"])
-					row.AddCell().SetValue(v["company_email"])
-				}
-				xf.Sheets = xf.Sheets[1:]
-
-				fname := fmt.Sprintf(gjpath, time.Now().Unix())
-				err := xf.Save(fname)
-				if err != nil {
-					log.Println(err)
-					return ""
-				}
-				return fname
-			}
-		}
-	}
-	return ""
-}
-
-func ResponseXlsx_Data1(id string) string {
-	if id != "" {
-		query := bson.M{
-			"_id": mongodb.StringTOBsonId(id),
-		}
-		data, _ := Mgo.FindOne("cuserdepartrule", query)
-		if (*data) != nil && len(*data) > 0 {
-			isStandard := true
-			if util.Int64All((*data)["i_extfieldstype"]) == Advanced {
-				isStandard = false
-			}
-
-			data, _ := Mgo.Find("tagsdata", bson.M{"s_dataid": util.ObjToString((*data)["s_dataid"])}, nil, nil, false, -1, -1)
-			if (*data) == nil || len(*data) == 0 {
-				return ""
-			}
-			xf, err := xlsx.OpenFile("web/res/fields.xlsx")
-			if err != nil {
-				log.Println("fields file not foud", err.Error())
-				return ""
-			}
-			if isStandard {
-				sh := xf.Sheets[0]
-				for i, v := range *data {
-					row := sh.AddRow()
-					row.AddCell().SetInt(i + 1)
-					row.AddCell().SetValue(v["s_matchkey"])
-					row.AddCell().SetValue(v["area"])
-					row.AddCell().SetValue(v["city"])
-					row.AddCell().SetValue(v["title"])
-					row.AddCell().SetValue(v["subtype"])
-					if v["publishtime"] != nil {
-						row.AddCell().SetValue(time.Unix(util.Int64All(v["publishtime"]), 0).Format("2006-01-02"))
-					} else {
-						row.AddCell()
-					}
-					row.AddCell().SetValue(v["buyer"])
-					row.AddCell().SetValue(v["winner"])
-					if v["bidamount"] != nil {
-						row.AddCell().SetFloat(util.Float64All(v["bidamount"]) / 10000)
-					} else {
-						row.AddCell()
-					}
-					row.AddCell().SetValue(v["projectname"])
-					row.AddCell().SetValue(v["detail"])
-					row.AddCell().SetValue(v["s_jyhref"])
-				}
-				xf.Sheets = xf.Sheets[:1]
-
-				fname := fmt.Sprintf(bzpath, time.Now().Unix())
-				err := xf.Save(fname)
-				if err != nil {
-					log.Println(err)
-					return ""
-				}
-				return fname
-			} else {
-				sh := xf.Sheets[1]
-				for i, v := range *data {
-					row := sh.AddRow()
-					row.AddCell().SetInt(i + 1)
-					row.AddCell().SetValue(v["s_matchkey"])
-					row.AddCell().SetValue(v["area"])
-					row.AddCell().SetValue(v["city"])
-					row.AddCell().SetValue(v["title"])
-					row.AddCell().SetValue(v["subtype"])
-					row.AddCell().SetValue(v["detail"])
-					if v["publishtime"] != nil {
-						row.AddCell().SetValue(time.Unix(util.Int64All(v["publishtime"]), 0).Format("2006-01-02"))
-					} else {
-						row.AddCell()
-					}
-					row.AddCell().SetValue(v["href"])
-					row.AddCell().SetValue(v["s_jyhref"])
-					row.AddCell().SetValue(v["projectcode"])
-					row.AddCell().SetValue(v["projectname"])
-					row.AddCell().SetValue(v["projectscope"])
-					if v["budget"] != nil {
-						row.AddCell().SetFloat(util.Float64All(v["budget"]) / 10000)
-					} else {
-						row.AddCell()
-					}
-					if v["bidamount"] != nil {
-						row.AddCell().SetFloat(util.Float64All(v["bidamount"]) / 10000)
-					} else {
-						row.AddCell()
-					}
-					if v["bidopentime"] != nil {
-						row.AddCell().SetValue(time.Unix(util.Int64All(v["bidopentime"]), 0).Format("2006-01-02"))
-					} else {
-						row.AddCell()
-					}
-					row.AddCell().SetValue(v["buyer"])
-					row.AddCell().SetValue(v["buyerperson"])
-					row.AddCell().SetValue(v["buyertel"])
-					row.AddCell().SetValue(v["agency"])
-					row.AddCell().SetValue(v["winner"])
-					row.AddCell().SetValue(v["winnerperson"])
-					row.AddCell().SetValue(v["winnertel"])
-					row.AddCell().SetValue(v["legal_person"])
-					row.AddCell().SetValue(v["company_phone"])
-					row.AddCell().SetValue(v["company_email"])
-				}
-				xf.Sheets = xf.Sheets[1:]
-
-				fname := fmt.Sprintf(gjpath, time.Now().Unix())
-				err := xf.Save(fname)
-				if err != nil {
-					log.Println(err)
-					return ""
-				}
-				return fname
-			}
-		}
-	}
-	return ""
-}
-
-func ResponseXlsx_Rule(id, s string) string {
-	defer util.Catch()
-	var data *map[string]interface{}
-	if s == "private" {
-		data, _ = Mgo.FindById("tags", id, `{}`)
-	} else {
-		data, _ = Mgo.FindById("tags_common", id, `{}`)
-	}
-	if len(*data) == 0 {
-		return ""
-	}
-	xf, err := xlsx.OpenFile("web/res/export_rule.xlsx") //读取导出标签模板表
-	if err != nil {
-		log.Println("export_rule file not foud", err.Error())
-		return ""
-	}
-	sh := xf.Sheets[0]
-	fields_len := len(export_fields)
-	for i, r := range sh.Rows {
-		if i == fields_len {
-			break
-		}
-		field := export_fields[i] //export_fields值的顺序与模板表一致
-		if field == "i_extfieldstype" {
-			r.AddCell().SetValue(export_extfieldstype[fmt.Sprint((*data)[field])])
-			continue
-		}
-		field_val := ""
-		if strings.HasPrefix(field, "s_") {
-			field_val = util.ObjToString((*data)[field])
-			if export_numfield[field] { //找出值为数字的匹配方式,转换成中文
-				field_val = numValToWord(field_val)
-			}
-		} else if strings.HasPrefix(field, "i_") { //i_startime i_endtime
-			t := util.Int64All((*data)[field])
-			if t > 0 {
-				field_val = util.FormatDateByInt64(&t, util.Date_Full_Layout)
-			}
-		}
-		r.AddCell().SetValue(field_val)
-	}
-	o_rules := (*data)["o_rules"].([]interface{})
-	for _, o_rule := range o_rules {
-		new_row := sh.AddRow()
-		o_tmp := o_rule.(map[string]interface{})
-		for _, match := range export_o_rules {
-			cell_val := util.ObjToString(o_tmp[match])
-			if export_numfield[match] { //找出值为数字的匹配方式,转换成中文
-				cell_val = numValToWord(cell_val)
-			}
-			new_row.AddCell().SetValue(cell_val)
-		}
-		if s_topscopeclass := o_tmp["s_topscopeclass"]; s_topscopeclass != "" {
-			new_row.AddCell().SetValue(s_topscopeclass)
-		} else if s_subscopeclass := o_tmp["s_subscopeclass"]; s_subscopeclass != "" {
-			new_row.AddCell().SetValue(s_subscopeclass)
-		}
-	}
-	fname := fmt.Sprintf(rpath, time.Now().Unix())
-	xf.Save(fname)
-	return fname
-}
-
-func ResponseXlsx_Rule1(id string) string {
-	defer util.Catch()
-	var data *map[string]interface{}
-	data, _ = Mgo.FindById("cuserdepartrule", id, `{}`)
-	if len(*data) == 0 {
-		return ""
-	}
-	xf, err := xlsx.OpenFile("web/res/export_rule.xlsx") //读取导出标签模板表
-	if err != nil {
-		log.Println("export_rule file not foud", err.Error())
-		return ""
-	}
-	sh := xf.Sheets[0]
-	fields_len := len(export_fields)
-	for i, r := range sh.Rows {
-		if i == fields_len {
-			break
-		}
-		field := export_fields1[i] //export_fields值的顺序与模板表一致
-		if field == "i_extfieldstype" {
-			r.AddCell().SetValue(export_extfieldstype[fmt.Sprint((*data)[field])])
-			continue
-		}
-		field_val := ""
-		if strings.HasPrefix(field, "s_") {
-			field_val = util.ObjToString((*data)[field])
-			if export_numfield[field] { //找出值为数字的匹配方式,转换成中文
-				field_val = numValToWord(field_val)
-			}
-		} else if strings.HasPrefix(field, "i_") { //i_startime i_endtime
-			t := util.Int64All((*data)[field])
-			if t > 0 {
-				field_val = util.FormatDateByInt64(&t, util.Date_Full_Layout)
-			}
-		}
-		r.AddCell().SetValue(field_val)
-	}
-	o_rules := (*data)["o_rules"].([]interface{})
-	for _, o_rule := range o_rules {
-		new_row := sh.AddRow()
-		o_tmp := o_rule.(map[string]interface{})
-		for _, match := range export_o_rules {
-			cell_val := util.ObjToString(o_tmp[match])
-			if export_numfield[match] { //找出值为数字的匹配方式,转换成中文
-				cell_val = numValToWord(cell_val)
-			}
-			new_row.AddCell().SetValue(cell_val)
-		}
-		if s_topscopeclass := o_tmp["s_topscopeclass"]; s_topscopeclass != "" {
-			new_row.AddCell().SetValue(s_topscopeclass)
-		} else if s_subscopeclass := o_tmp["s_subscopeclass"]; s_subscopeclass != "" {
-			new_row.AddCell().SetValue(s_subscopeclass)
-		}
-	}
-	fname := fmt.Sprintf(rpath, time.Now().Unix())
-	xf.Save(fname)
-	return fname
-}
-
-//匹配方式的数字值,转为对应的汉字
-func numValToWord(numval string) (word string) {
-	field_arr := strings.Split(numval, ",")
-	for i, val := range field_arr {
-		if i == 0 {
-			word = util.ObjToString(export_matchtype[val])
-			continue
-		}
-		word = word + "," + util.ObjToString(export_matchtype[val])
-	}
-	return
-}
-
-/**
- * 导入剑鱼批量修改数据
- */
-func ParsJyData(filebyte []byte) ([]map[string]interface{}, error) {
-	var jyData []map[string]interface{}
-	var keyName []string
-	file, err := xlsx.OpenBinary(filebyte)
-	if err != nil {
-		return jyData, err
-	}
-
-	for i, v := range file.Sheets[0].Rows {
-		data := make(map[string]interface{})
-		for ii, vv := range v.Cells {
-			if i == 0 {
-				keyName = append(keyName, vv.Value)
-			} else {
-				if vv.Value != "" {
-					data[keyName[ii]] = vv.Value
-				}
-			}
-		}
-		if len(data) > 0 {
-			jyData = append(jyData, data)
-		}
-	}
-
-	return jyData, nil
-}

+ 0 - 744
src/util/utiltag.go

@@ -1,744 +0,0 @@
-package util
-
-import (
-	"encoding/json"
-	"errors"
-	"fmt"
-	"models"
-	"qfw/util"
-	"qfw/util/elastic"
-	"regexp"
-	sql "sqlmodel"
-	"strings"
-	"time"
-
-	"go.mongodb.org/mongo-driver/bson"
-)
-
-const (
-	TitleMatchType            = "1"           //标题匹配
-	DetailMatchType           = "2"           //全文匹配
-	PurchasingMatchType       = "3"           //标的物匹配
-	AttachmentsMatchType      = "4"           //附件匹配
-	ProjectnameMatchType      = "5"           //项目名称匹配
-	BuyerMatchType            = "6"           //采购单位匹配
-	SWinnerMatchType          = "7"           //中标单位匹配
-	BuyerMatchType1           = "8"           //采购单位(正则)匹配
-	SWinnerMatchType1         = "9"           //中标单位(正则)匹配
-	TitleMatchTypeStr         = "title"       //标题匹配
-	DetailMatchTypeStr        = "detail"      //全文匹配
-	PurchasingMatchTypeStr    = "purchasing"  //标的物匹配
-	AttachmentsMatchTypeStr   = "attachments" //附件匹配
-	ProjectnameMatchTypeStr   = "projectname" //项目名称匹配
-	BuyerMatchTypeStr         = "buyer"       //项目名称匹配
-	SWinnerMatchTypeStr       = "s_winner"    //项目名称匹配
-	TitleMatchTypeField       = "title"       //标题匹配
-	DetailMatchTypeField      = "detail"      //全文匹配
-	PurchasingMatchTypeField  = "purchasing"  //标的物匹配
-	AttachmentsMatchTypeField = "attachments" //附件匹配
-	ProjectnameMatchTypeField = "projectname" //项目名称匹配
-	BuyerMatchTypeField       = "buyer"       //项目名称匹配
-	SWinnerMatchTypeField     = "s_winner"    //项目名称匹配
-	MultiMatchType            = "phrase"
-	Standard                  = 1          //1:标准字段包,
-	Advanced                  = 2          //2:高级字段包
-	Standardstr               = "standard" //1:标准字段包
-	Advancedstr               = "advanced" //2:高级字段包
-	Url                       = "https://www.jianyu360.cn/article/content/%s.html"
-)
-
-func UtilEsSaveData(sdataid string, datas *[]map[string]interface{}) error {
-	defer util.Catch()
-	Mgo.Del("tagsdata", bson.M{"s_dataid": sdataid})
-	if Mgo.SaveBulk("tagsdata", *datas...) {
-		return nil
-	} else {
-		return errors.New("mongo save err")
-	}
-
-}
-
-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()
-	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("cuserdepartrule", 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 Utiltags(tag map[string]interface{}) string {
-	defer util.Catch()
-	tmpbyte, _ := json.Marshal(tag)
-	tab := models.Tag{}
-	err := json.Unmarshal(tmpbyte, &tab)
-	if err != nil {
-		return "json err:" + err.Error()
-	}
-	QueryObjecct := sql.QueryObjecct{}
-	ffBoolObject := sql.BoolObject{}
-	adsBoolObect := sql.NewEsObject{}
-	if tab.Sarea != "" {
-		adsBoolObect.Bool.Should = append(adsBoolObect.Bool.Should, sql.AreaCityDistrictMust{AreaCityDistrict: &sql.AreaCityDistrict{Area: strings.Split(tab.Sarea, ",")}})
-	}
-	if tab.Scity != "" {
-		adsBoolObect.Bool.Should = append(adsBoolObect.Bool.Should, sql.AreaCityDistrictMust{AreaCityDistrict: &sql.AreaCityDistrict{City: strings.Split(tab.Scity, ",")}})
-	}
-	if tab.Sdistrict != "" {
-		//城市——区县
-		cityds := strings.Split(tab.Sdistrict, ",")
-		var ds []string
-		for _, v := range cityds {
-			ds = append(ds, strings.Split(v, "-")[1])
-		}
-		adsBoolObect.Bool.Should = append(adsBoolObect.Bool.Should, sql.AreaCityDistrictMust{AreaCityDistrict: &sql.AreaCityDistrict{District: ds}})
-	}
-	if len(adsBoolObect.Bool.Should) > 0 {
-		ffBoolObject.Must = append(ffBoolObject.Must, adsBoolObect)
-	}
-	if tab.Stoptype != "" || tab.Ssubtype != "" {
-		if len(tab.Stoptype) > 0 {
-			toptypeSubtype := sql.ToptypeSubtype{}
-			toptypeSubtype.Toptype = strings.Split(tab.Stoptype, ",")
-			ffBoolObject.Must = append(ffBoolObject.Must, sql.ToptypeSubtypeMust{&toptypeSubtype})
-		}
-		if len(tab.Ssubtype) > 0 {
-			toptypeSubtype := sql.ToptypeSubtype{}
-			toptypeSubtype.Subtype = strings.Split(tab.Ssubtype, ",")
-			ffBoolObject.Must = append(ffBoolObject.Must, sql.ToptypeSubtypeMust{&toptypeSubtype})
-		}
-	}
-	if tab.Istarttime > 0 && tab.Iendtime > 0 {
-		ffBoolObject.Must = append(ffBoolObject.Must, sql.PublishtimeMust{PublishtimeObject: &sql.PublishtimeObject{Publishtime: &sql.Publishtime{
-			Gte: tab.Istarttime,
-			Lt:  tab.Iendtime,
-		}}})
-	} else if tab.Istarttime > 0 {
-		ffBoolObject.Must = append(ffBoolObject.Must, sql.PublishtimeMust{PublishtimeObject: &sql.PublishtimeObject{Publishtime1: &sql.Publishtime1{
-			Gte: tab.Istarttime,
-		}}})
-	} else if tab.Iendtime > 0 {
-		ffBoolObject.Must = append(ffBoolObject.Must, sql.PublishtimeMust{PublishtimeObject: &sql.PublishtimeObject{Publishtime2: &sql.Publishtime2{
-			Lt: tab.Iendtime,
-		}}})
-	}
-	if tab.Sbudget != "" {
-		if strings.Contains(tab.Sbudget, "大于") && strings.Contains(tab.Sbudget, "小于") {
-			arr := strings.Split(tab.Sbudget, ",")
-			limit := &sql.BudgetOrBidamount{
-				Gte: util.Float64All(strings.Replace(arr[0], "大于", "", -1)),
-				Lt:  util.Float64All(strings.Replace(arr[1], "小于", "", -1)),
-			}
-			ffBoolObject.Must = append(ffBoolObject.Must, sql.BudgetMust{BudgetObj: &sql.BudgetObj{Budget: limit}})
-		} else if strings.Contains(tab.Sbudget, "大于") {
-			limit := &sql.BudgetOrBidamount{
-				Gte: util.Float64All(strings.Replace(tab.Sbudget, "大于", "", -1)),
-			}
-			ffBoolObject.Must = append(ffBoolObject.Must, sql.BudgetMust{BudgetObj: &sql.BudgetObj{Budget: limit}})
-		} else if strings.Contains(tab.Sbudget, "小于") {
-			limit := &sql.BudgetOrBidamount{
-				Lt: util.Float64All(strings.Replace(tab.Sbudget, "小于", "", -1)),
-			}
-			ffBoolObject.Must = append(ffBoolObject.Must, sql.BudgetMust{BudgetObj: &sql.BudgetObj{Budget: limit}})
-		}
-	}
-	if tab.Sbidamount != "" {
-		if strings.Contains(tab.Sbidamount, "大于") && strings.Contains(tab.Sbidamount, "小于") {
-			arr := strings.Split(tab.Sbidamount, ",")
-			limit := &sql.BudgetOrBidamount{
-				Gte: util.Float64All(strings.Replace(arr[0], "大于", "", -1)),
-				Lt:  util.Float64All(strings.Replace(arr[1], "小于", "", -1)),
-			}
-			ffBoolObject.Must = append(ffBoolObject.Must, sql.BidamountMust{BidamountObj: &sql.BidamountObj{Bidamount: limit}})
-		} else if strings.Contains(tab.Sbidamount, "大于") {
-			limit := &sql.BudgetOrBidamount{
-				Gte: util.Float64All(strings.Replace(tab.Sbidamount, "大于", "", -1)),
-			}
-			ffBoolObject.Must = append(ffBoolObject.Must, sql.BidamountMust{BidamountObj: &sql.BidamountObj{Bidamount: limit}})
-		} else if strings.Contains(tab.Sbidamount, "小于") {
-			limit := &sql.BudgetOrBidamount{
-				Lt: util.Float64All(strings.Replace(tab.Sbidamount, "小于", "", -1)),
-			}
-			ffBoolObject.Must = append(ffBoolObject.Must, sql.BidamountMust{BidamountObj: &sql.BidamountObj{Bidamount: limit}})
-		}
-	}
-	if tab.Sglobalbuyerclass != "" {
-		if len(tab.Sglobalbuyerclass) > 0 {
-			buyerclass := sql.BuyerclassObject{
-				Terms: struct {
-					Buyerclass []string `json:"buyerclass,omitempty"`
-				}{
-					Buyerclass: strings.Split(tab.Sglobalbuyerclass, ","),
-				},
-			}
-			ffBoolObject.Must = append(ffBoolObject.Must, buyerclass)
-		}
-	}
-	if tab.Sglobaltopscopeclass != "" || tab.Sglobalsubscopeclass != "" {
-		if len(tab.Sglobaltopscopeclass) > 0 {
-			topScopeclass := sql.Scopeclass{}
-			topScopeclass.Globaltopscopeclass = strings.Split(tab.Sglobaltopscopeclass, ",")
-			ffBoolObject.Must = append(ffBoolObject.Must, sql.ScopeclassMust{&topScopeclass})
-		} else if len(tab.Sglobalsubscopeclass) > 0 {
-			subScopeclass := sql.Scopeclass{}
-			subScopeclass.Globalsubscopeclass = strings.Split(tab.Sglobalsubscopeclass, ",")
-			ffBoolObject.Must = append(ffBoolObject.Must, sql.ScopeclassMust{&subScopeclass})
-		}
-	}
-	fqBoolObject := sql.BoolObject{}
-	if len(tab.Sexistfields) > 0 {
-		tmpsfields := strings.Split(tab.Sexistfields, ",")
-		for _, v := range tmpsfields {
-			fqBoolObject.MustNot = append(fqBoolObject.MustNot, sql.ExistfieldsObjectMust{
-				ExistfieldsObject: &sql.ExistfieldsObject{Filter: struct {
-					Missing struct {
-						Field string `json:"field,omitempty"`
-					} `json:"missing,omitempty"`
-				}{
-					Missing: struct {
-						Field string `json:"field,omitempty"`
-					}{Field: v},
-				},
-				},
-			})
-		}
-	}
-	newEsObject := sql.NewEsObject{}
-	if tab.Sglobaladdkey != "" && tab.Sglobaladdkeymatch != "" {
-		if tmps := strsToArr(tab.Sglobaladdkeymatch, "str"); tmps != nil {
-			newEsObject = method1(newEsObject, tab.Sglobaladdkey, tab.Sglobaladdkeymatch, tmps)
-		}
-	}
-	if len(newEsObject.Bool.Should) > 0 || len(newEsObject.Bool.MustNot) > 0 || len(newEsObject.Bool.Must) > 0 {
-		fqBoolObject.Must = append(fqBoolObject.Must, newEsObject)
-	}
-
-	nots := sql.NewEsObject{}
-	if tab.Sglobalnotkey != "" && tab.Sglobalnotkeymatch != "" {
-		if tmps := strsToArr(tab.Sglobalnotkeymatch, "str"); tmps != nil {
-			nots = method1(nots, tab.Sglobalnotkey, tab.Sglobalnotkeymatch, tmps)
-		}
-	}
-	if len(nots.Bool.Should) > 0 {
-		fqBoolObject.MustNot = append(fqBoolObject.MustNot, nots)
-	}
-	torules := sql.BoolObject{}
-	for _, v := range tab.Orules {
-		tmpses := sql.NewEsObject{}
-		if skeymatchs := strsToArr(v.Skeymatch, "str"); skeymatchs != nil {
-			tmpnewEsObject := sql.NewEsObject{}
-			tmpnewEsObject = method1(tmpnewEsObject, v.Smatchkey, v.Skeymatch, skeymatchs)
-			if len(tmpnewEsObject.Bool.Should) > 0 || len(tmpnewEsObject.Bool.Must) > 0 || len(tmpnewEsObject.Bool.MustNot) > 0 {
-				tmpses.Bool.Must = append(tmpses.Bool.Must, tmpnewEsObject)
-			}
-		}
-		if saddkeymatchs := strsToArr(v.Saddkeymatch, "str"); saddkeymatchs != nil {
-			addkeyarr := sql.NewEsObject{}
-			addkeyarr = method1(addkeyarr, v.Saddkey, v.Saddkeymatch, saddkeymatchs)
-			if len(addkeyarr.Bool.Should) > 0 {
-				tmpses.Bool.Must = append(tmpses.Bool.Must, addkeyarr)
-			}
-		}
-		if snotkeymatchs := strsToArr(v.Snotkeymatch, "str"); snotkeymatchs != nil {
-			tmpses = method2(tmpses, v.Snotkey, v.Snotkeymatch, snotkeymatchs)
-		}
-		if len(v.Stopscopeclass) > 0 {
-			sArr := strings.Split(v.Stopscopeclass, ",")
-			tmpses.Bool.Must = append(tmpses.Bool.Must, sql.TopscopeclassObject{
-				Terms: struct {
-					Topscopeclass []string `json:"s_topscopeclass,omitempty"`
-				}{
-					Topscopeclass: sArr,
-				},
-			})
-		} else if len(v.Ssubscopeclass) > 0 {
-			tmpses.Bool.Must = append(tmpses.Bool.Must, sql.SubscopeclassObject{
-				Terms: struct {
-					Subscopeclass []string `json:"s_subscopeclass,omitempty"`
-				}{
-					Subscopeclass: strings.Split(v.Ssubscopeclass, ","),
-				},
-			})
-		}
-		if len(v.Sbuyerclass) > 0 {
-			tmpses.Bool.Must = append(tmpses.Bool.Must, sql.BuyerclassObject{
-				Terms: struct {
-					Buyerclass []string `json:"buyerclass,omitempty"`
-				}{
-					Buyerclass: strings.Split(v.Sbuyerclass, ","),
-				},
-			})
-		}
-		torules.Should = append(torules.Should, tmpses)
-	}
-	if len(ffBoolObject.Must) > 0 || len(ffBoolObject.MustNot) > 0 || len(ffBoolObject.Should) > 0 {
-		QueryObjecct.Filtered.Filter = &sql.Filter{}
-		QueryObjecct.Filtered.Filter.Bool = &ffBoolObject
-	}
-	if len(fqBoolObject.Must) > 0 || len(fqBoolObject.MustNot) > 0 || len(fqBoolObject.Should) > 0 {
-		QueryObjecct.Filtered.Query = &sql.Query{}
-		QueryObjecct.Filtered.Query.Bool = &fqBoolObject
-		if len(torules.Should) > 0 {
-			QueryObjecct.Filtered.Query.Bool.Must = append(QueryObjecct.Filtered.Query.Bool.Must, map[string]interface{}{
-				"bool": torules,
-			})
-		}
-	} else if len(torules.Should) > 0 {
-		if QueryObjecct.Filtered.Query == nil {
-			QueryObjecct.Filtered.Query = &sql.Query{}
-			QueryObjecct.Filtered.Query.Bool = &fqBoolObject
-		}
-		QueryObjecct.Filtered.Query.Bool.Must = append(QueryObjecct.Filtered.Query.Bool.Must, map[string]interface{}{
-			"bool": torules,
-		})
-	}
-	rdata := make(map[string]interface{})
-	rdata["query"] = QueryObjecct
-	esbytes, _ := json.Marshal(rdata)
-	esStr := strings.ReplaceAll(string(esbytes), "regexp1", "regexp")
-	esStr = strings.ReplaceAll(esStr, "publishtime1", "publishtime")
-	esStr = strings.ReplaceAll(esStr, "publishtime2", "publishtime")
-	return strings.ReplaceAll(esStr, "regexp2", "regexp")
-}
-
-func strsToArr(strs string, typestr string) []string {
-	if len(strs) > 0 {
-		tmps := strings.Split(strs, ",")
-		switch typestr {
-		case "str":
-			for index, vint := range tmps {
-				switch vint {
-				case TitleMatchType:
-					tmps[index] = TitleMatchTypeStr
-				case DetailMatchType:
-					tmps[index] = DetailMatchTypeStr
-				case PurchasingMatchType:
-					tmps[index] = PurchasingMatchTypeStr
-				case AttachmentsMatchType:
-					tmps[index] = AttachmentsMatchTypeStr
-				case ProjectnameMatchType:
-					tmps[index] = ProjectnameMatchTypeStr
-				case BuyerMatchType:
-					tmps[index] = BuyerMatchTypeStr
-				case SWinnerMatchType:
-					tmps[index] = SWinnerMatchTypeStr
-				case BuyerMatchType1:
-					tmps[index] = BuyerMatchTypeStr
-				case SWinnerMatchType1:
-					tmps[index] = SWinnerMatchTypeStr
-				}
-			}
-			return tmps
-		case "field":
-			for index, vint := range tmps {
-				switch vint {
-				case TitleMatchType:
-					tmps[index] = TitleMatchTypeField
-				case DetailMatchType:
-					tmps[index] = DetailMatchTypeField
-				case PurchasingMatchType:
-					tmps[index] = PurchasingMatchTypeField
-				case AttachmentsMatchType:
-					tmps[index] = AttachmentsMatchTypeField
-				case ProjectnameMatchType:
-					tmps[index] = ProjectnameMatchTypeField
-				case BuyerMatchType:
-					tmps[index] = BuyerMatchTypeField
-				case SWinnerMatchType:
-					tmps[index] = SWinnerMatchTypeField
-				case BuyerMatchType1:
-					tmps[index] = BuyerMatchTypeField
-				case SWinnerMatchType1:
-					tmps[index] = SWinnerMatchTypeField
-				}
-			}
-			return tmps
-		}
-	}
-	return nil
-}
-func init() {
-	EsIndex = util.ObjToString(Sysconfig["elasticsearch_index"])
-	EsType = util.ObjToString(Sysconfig["elasticsearch_type"])
-}
-
-func method1(newEsObject sql.NewEsObject, keyword, keymatch string, tmps []string) sql.NewEsObject {
-	for _, vv := range strings.Split(keyword, ",") {
-		if vv == "" {
-			continue
-		}
-		if len(tmps) == 1 && (strings.Contains(keymatch, "8") || strings.Contains(keymatch, "9")) {
-			//中标单位、采购单位、中标单位(正则)、采购单位(正则)    单选
-			strs := ""
-			if strings.Contains(vv, "&&") {
-				strs = ".*" + strings.Replace(vv, "&&", ".*", -1) + ".*"
-			} else {
-				strs = ".*" + vv + ".*"
-			}
-			if tmps[0] == "buyer" {
-				newEsObject.Bool.Should = append(newEsObject.Bool.Should, sql.Regular{
-					Regexp1: &sql.Regular_Buyer{Buyer: strs},
-				})
-			} else if tmps[0] == "s_winner" {
-				newEsObject.Bool.Should = append(newEsObject.Bool.Should, sql.Regular{
-					Regexp2: &sql.Regular_winner{Winner: strs},
-				})
-			}
-		} else {
-			addkeylines := strings.Split(vv, "&&")
-			if len(addkeylines) > 1 {
-				addkeyline := sql.NewEsObject{}
-				for _, vvv := range addkeylines {
-					if vvv == "" {
-						continue
-					}
-					addkeyline.Bool.Must = append(addkeyline.Bool.Must, sql.ShouldObj{
-						MultiMatch: &sql.MultiMatch{
-							Query:  vvv,
-							Type:   MultiMatchType,
-							Fields: tmps,
-						},
-					})
-				}
-				if len(addkeyline.Bool.Must) > 0 {
-					newEsObject.Bool.Should = append(newEsObject.Bool.Should, addkeyline)
-				}
-			} else {
-				newEsObject.Bool.Should = append(newEsObject.Bool.Should, sql.ShouldObj{
-					MultiMatch: &sql.MultiMatch{
-						Query:  vv,
-						Type:   MultiMatchType,
-						Fields: tmps,
-					},
-				})
-			}
-		}
-	}
-	return newEsObject
-}
-
-func method2(newEsObject sql.NewEsObject, keyword, keymatch string, tmps []string) sql.NewEsObject {
-	for _, vv := range strings.Split(keyword, ",") {
-		if vv == "" {
-			continue
-		}
-		if len(tmps) == 1 && (strings.Contains(keymatch, "8") || strings.Contains(keymatch, "9")) {
-			//中标单位、采购单位、中标单位(正则)、采购单位(正则)    单选
-			strs := ""
-			if strings.Contains(vv, "&&") {
-				strs = ".*" + strings.Replace(vv, "&&", ".*", -1) + ".*"
-			} else {
-				strs = ".*" + vv + ".*"
-			}
-			if tmps[0] == "buyer" {
-				newEsObject.Bool.MustNot = append(newEsObject.Bool.MustNot, sql.Regular{
-					Regexp1: &sql.Regular_Buyer{Buyer: strs},
-				})
-			} else if tmps[0] == "s_winner" {
-				newEsObject.Bool.MustNot = append(newEsObject.Bool.MustNot, sql.Regular{
-					Regexp2: &sql.Regular_winner{Winner: strs},
-				})
-			}
-		} else {
-			addkeylines := strings.Split(vv, "&&")
-			if len(addkeylines) > 1 {
-				addkeyline := sql.NewEsObject{}
-				for _, vvv := range addkeylines {
-					if vvv == "" {
-						continue
-					}
-					addkeyline.Bool.Must = append(addkeyline.Bool.Must, sql.ShouldObj{
-						MultiMatch: &sql.MultiMatch{
-							Query:  vvv,
-							Type:   MultiMatchType,
-							Fields: tmps,
-						},
-					})
-				}
-				if len(addkeyline.Bool.Must) > 0 {
-					newEsObject.Bool.MustNot = append(newEsObject.Bool.MustNot, addkeyline)
-				}
-			} else {
-				newEsObject.Bool.MustNot = append(newEsObject.Bool.MustNot, sql.ShouldObj{
-					MultiMatch: &sql.MultiMatch{
-						Query:  vv,
-						Type:   MultiMatchType,
-						Fields: tmps,
-					},
-				})
-			}
-		}
-	}
-	return newEsObject
-}
-
-/**
- * 一级公告行业处理 d、t、p
- */
-func method3(arr []string) []string {
-	var sArr []string
-	for _, v := range arr {
-		sArr = append(sArr, v+"d")
-		sArr = append(sArr, v+"t")
-		sArr = append(sArr, v+"p")
-	}
-	return sArr
-}

+ 166 - 0
src/web/templates/oprd/bidding_modify.html

@@ -0,0 +1,166 @@
+{{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">
+        <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="col-md-5 form-inline">
+                            <input class="form-control" style="width: 400px" type="text" placeholder="请输入查询的id" id="idSea">
+                            <button class="btn btn-default" onclick="idSearch()">
+                                <span class="glyphicon glyphicon-search" style="color: dodgerblue"></span>
+                            </button>
+                        </div>
+                        <div class="col-md-6 form-inline">
+                            <input class="form-control" style="width: 600px" type="text" placeholder="请输入查询的剑鱼链接" id="jyurlSea">
+                            <button class="btn btn-default" onclick="jyurlSearch()">
+                                <span class="glyphicon glyphicon-search" style="color: dodgerblue"></span>
+                            </button>
+                        </div>
+
+                        <div class="col-xs-12" style="margin-top: 20px">
+                            <textarea id="jsonTextarea" style="width: 100%;height: 350px"></textarea>
+                        </div>
+                        <div class="col-xs-12 text-center" style="margin-top: 20px">
+                            <input class="btn btn-lg btn-info" type="button" value="修改保存" onclick="saveRepair()">
+                            <input class="btn btn-lg btn-success" style="margin-left: 80px" type="button" value="删除" onclick="del_repair()">
+                        </div>
+                    </div>
+                </div>
+            </div>
+        </div>
+    </section>
+</div>
+
+{{include "com/footer.html"}}
+<script>
+    menuActive("/oprd/modify");
+    let id = ""
+    let edit_data = {}
+    function parse(str) {
+        return JSON.stringify(str, null, "\t")
+    }
+
+    function idSearch() {
+        var search_name = $('#idSea').val()
+        $.ajax({
+            url:"/service/oprd/find/id",
+            type:"post",
+            data:{"_id": search_name},
+            success:function(r){
+                if (r.rep) {
+                    $('#jsonTextarea').val(parse(r.data));
+                    edit_data = r.data
+                    id = r.data._id
+                }else {
+                    showTip(r.msg)
+                }
+            }
+        })
+    }
+    function jyurlSearch() {
+        var search_name = $('#jyurlSea').val()
+        $.ajax({
+            url:"/service/jy/find/url",
+            type:"post",
+            data:{"url": search_name},
+            success:function(r){
+                if (r.rep) {
+                    $('#jsonTextarea').val(parse(r.data));
+                    edit_data = r.data
+                    id = r.data._id
+                }else {
+                    showTip(r.msg)
+                }
+            }
+        })
+    }
+
+    function del_repair(){
+        if (id === "") {
+            showTip("id不能为空!")
+            return
+        }
+        showConfirm("确定删除?", function() {
+            $.ajax({
+                url:"/service/oprd/del",
+                type:"post",
+                data:{"_id": id},
+                success:function(r){
+                    if(r.rep){
+                        showTip("删除成功")
+                        location.reload()
+                    }else{
+                        showTip("删除失败");
+                    }
+                }
+            })
+        });
+    }
+
+    function saveRepair() {
+        var curData = document.getElementById('jsonTextarea').value;
+        var data = JSON.parse(curData)
+
+        var updata = {}
+        // 删除、修改
+        for (let editDataKey in edit_data) {
+            if (data[editDataKey] !== edit_data[editDataKey]) {
+                updata[editDataKey] = data[editDataKey]
+            }
+        }
+        //新增
+        for (let dataKey in data) {
+            if (edit_data[dataKey] === undefined) {
+                updata[dataKey] = data[dataKey]
+            }
+        }
+
+        let str = ""
+        if (Object.keys(updata).length === 0) {
+            str = "没有修改任何字段信息!"
+            showTip(str)
+            return
+        }else {
+            str = "确定修改以下字段信息?" + "<br>"
+            for (const k in updata) {
+                if (k === "_id") {
+                    showTip("_id 不能修改!")
+                    return;
+                }
+                str = str + k + ","
+            }
+        }
+        showConfirm(str, function() {
+            $.ajax({
+                url: "/service/oprd/modify/save",
+                type: 'POST',
+                data: {"data": JSON.stringify(updata),
+                    "id": id,
+                },
+                success: function (task) {
+                    if (task.rep) {
+                        showTip("修改成功!");
+                    } else {
+                        showTip("修改出错!");
+                    }
+                }
+            })
+        });
+    }
+
+</script>

+ 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 - 183
src/web/templates/private/common_rule_list.html

@@ -1,183 +0,0 @@
-<!-- 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 - 1538
src/web/templates/private/cuser_rule_create.html

@@ -1,1538 +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/customer/list"> 客户列表</a></li>
-            <li><a href="/service/customer/edit?id={{.T.cid}}"> 编辑客户</a></li>
-            <li><a href="/service/cuser/rule/list?ids={{.T.ids}}"> 客户规则</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>
-                                    </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("/customer/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 ids = {{.T.ids}}
-
-    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_tagname": "",
-        "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_isuse": 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_tagname"] = $('#tagname').val();
-        dataMap["s_globaladdkey"] = $('#g_addkey').val();
-        dataMap["s_globalnotkey"] = $('#g_notkey').val();
-        dataMap["s_globalclearkey"] = $('#s_globalclearkey').val();
-        if (dataMap["s_tagname"] == "") {
-            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);
-        console.log(ids)
-        dataMap["ids"] = ids
-        $.ajax({
-            url: "/service/cuser/rule/create",
-             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/cuser/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 - 1687
src/web/templates/private/cuser_rule_edit.html

@@ -1,1687 +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/customer/list"> 客户列表</a></li>
-            <li><a href="/service/customer/edit?id={{.T.cid}}"> 编辑客户</a></li>
-            <li><a href="/service/cuser/rule/list?ids={{.T.ids}}"> 客户规则</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>
-                                    </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("/customer/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/cuser/rule/create",
-            type: 'POST',
-            data: dataMap,
-            success: function (r) {
-                if (r.rep && r.id) {
-                    dataMap.id = r.id
-                    $('#estxt').val(r.s_esquery);
-                    state = 2;
-                    showTip("保存成功",1000);
-                } else {
-                    showTip("保存失败",1000);
-                }
-            }
-        })
-    }
-
-    //生成数据
-    function produceData() {
-        com.maskShow("正在生成数据...");
-        $.ajax({
-            url: "/service/cuser/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 - 221
src/web/templates/private/cuser_rule_list.html

@@ -1,221 +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 id="addTag" 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/customer/list"> 客户列表</a></li>
-            <li><a href="/service/customer/edit?id={{.T.cid}}"> 编辑客户</a></li>
-            <li><a href="#"> 客户规则</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>
-<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("/customer/list");
-    var ids = {{.T.did}} + "," + {{.T.cid}}
-    $('#addTag').attr("href", "/service/cuser/rule/create?ids="+ids)
-    $(function () {
-        ttable = $('#dataTable').DataTable({
-            "paging": true,
-            "lengthChange": false,
-            "searching": true,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "serverSide": true,
-            "ajax": {
-                "url": "/service/cuser/rule/list",
-                "type": "post",
-                "data": {"ids": ids}
-            },
-            "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": "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='setupRule(\""+row._id+"\",false)'><i class='fa fa-fw fa-circle text-green'></i></a>已启用"
-                        }else{
-                            tmp="<a href='#' title='启用' onclick='setupRule(\""+row._id+"\",true)'><i class='fa fa-fw fa-circle text-red'></i></a>未启用"
-                        }
-                        return tmp
-                    }, width: "10%" },
-                {"data": "_id", width:"11%",render: function (val, a, row, pos) {
-                      tmp = '<div>' +
-                          '<a class="btn btn-sm btn-primary" href="/service/cuser/rule/Edit?id='+val+'">编辑</a>&nbsp;&nbsp;'+
-                          '<a class="btn btn-sm btn-danger" onclick="del(\''+val+'\')">删除</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/cuser/rule/downloadrule?id='+val+'">导出标签</a>&nbsp;&nbsp;'+
-                          '<a class="btn btn-sm btn-info" href="/service/cuser/rule/downloadata?s_dataid='+val+'">导出数据</a>&nbsp;&nbsp;'+
-                          '<a class="btn btn-sm btn-warning" onclick="archive(\'' + val + '\')">存档</a>&nbsp;&nbsp;'+
-                          '</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>&nbsp;&nbsp;'+
-                      '<a class="btn btn-sm btn-success" href="/service/rule/history?tagid='+val+'">变更历史</a>'+
-                      '</div>';
-                  return tmp
-                }}
-            ]
-        });
-    });
-    function del(val){
-        showConfirm("确定删除?", function() {
-            $.ajax({
-                url:"/service/cuser/rule/Del",
-                type:"post",
-                data:{"_id": val},
-                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 setupRule(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/cuser/rule/setup",
-                type:"post",
-                data:{"_id": val, "i_isuse": i_isuse},
-                success:function(r){
-                    if(r.rep){
-                        ttable.ajax.reload()
-                    }else{
-                        showTip("设置失败", 1000);
-                    }
-                }
-            })
-        });
-    }
-  
-    var clipboard = new ClipboardJS('#copy');
-    clipboard.on('success', function () {
-        alert("复制成功!")
-    });
-    clipboard.on('error', function () {
-        alert("复制失败!")
-    });
-</script>

+ 0 - 319
src/web/templates/private/customer_create.html

@@ -1,319 +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/customer/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>
-                    <button class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" onclick="saveCuser()"><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="customername" 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">
-                                            <input type="text" class="form-control" id="seller" placeholder="销售人员名称" required>
-                                        </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="contract" placeholder="客户联系人名称">
-                                        </div>
-                                    </div>
-                                    <div class="box-header with-border">
-                                        <i class="fa fa-tag"></i>
-                                        <h3 class="box-title">部门信息</h3>
-                                    </div>
-                                    <table id="departTable" class="table table-bordered">
-                                        <thead>
-                                        <div style="margin: 10px 10px 0px;">
-                                            <a class="btn btn-default" onclick="showDepart()">新增</a>
-                                            <a class="btn btn-default" onclick="modify_Depart()">修改</a>
-                                            <a class="btn btn-default" onclick="del_Depart()">删除</a>
-                                        </div>
-                                        <tr>
-                                            <th></th>
-                                            <th>编号</th>
-                                            <th>部门名称</th>
-                                            <th>部门联系人</th>
-                                            <th>是否启用</th>
-                                        </tr>
-                                        </thead>
-                                    </table>
-                                </div>
-                            </div>
-                        </form>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </section>
-</div>
-
-<!-- 新增部门 -->
-<div class="modal fade" id="modal-add-depart" tabindex="-1" role="dialog" aria-hidden="true">
-    <div class="modal-dialog" style="width: 30%">
-        <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-3 control-label"><span style="color:red;">* </span>部门名称</label>
-                                <div class="col-sm-6">
-                                    <input class="form-control" placeholder="销售部、销售部-xx子部门" id="depart_name"/></div>
-                            </div>
-                            <div class="form-group">
-                                <label class="col-sm-3 control-label">联系人</label>
-                                <div class="col-sm-6">
-                                    <input class="form-control" placeholder="输入联系人名称" id="depart_contract"/></div>
-                            </div>
-                            <div class="form-group">
-                                <label class="col-sm-3 control-label">是否启用</label>
-                                <div class="col-sm-6">
-                                    <select class="form-control selectpicker" id="isuseSelect">
-                                        <option value = 1 selected>是</option>
-                                        <option value = 0>否</option>
-                                    </select>
-                                </div>
-                            </div>
-                        </form>
-                    </div>
-                </div>
-                <div class="modal-footer">
-                    <input type="button" onclick="saveDepart()" 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("/customer/list");
-
-    var keyTableChecked = false;        //关键词表格数据是否有选中
-    var keyTableAllChecked = true;      //表单数据是否被全选中
-    var selectIndex = [];               //选中的编号
-
-    //表单数据
-    var dataMap = {
-        "_id": "",
-        "s_name": "",
-        "s_customername": "",
-        "s_salesperson": "",
-        "i_state": 0,
-        "s_appid": "",
-    };
-    var departArr = []
-
-    $(document).ready(function () {
-        $('#departTable').DataTable({
-            "paging": false,
-            "lengthChange": true,
-            "searching": false,
-            "ordering": false,
-            "info": false,
-            "autoWidth": true,
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "fnDrawCallback": function () {
-                this.api().column(1).nodes().each(function (cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": function() {
-                        return `<input type="checkbox" name="ckb-keyid" onclick="singleSelect(this)" style="text-align: center">`
-                    }, width: "3%"},
-                {"data": null, width: "5%"},
-                {"data": "s_name", width: "20%"},
-                {"data": "s_contract", width: "40%"},
-                {"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: "20%" },
-            ],
-        });
-    })
-    function cancelModel() {
-        $('#modal-add-depart').modal("hide");
-    }
-    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 saveCuser() {
-        var name = $('#customername').val();
-        var contract = $('#contract').val();
-        var saleperson = $('#seller').val();
-        if (name == "" || saleperson == "") {
-            showTip("请填写必填字段!", 1000)
-            return
-        }
-        dataMap.s_name = name
-        dataMap.s_customername = contract
-        dataMap.s_salesperson = saleperson
-        dataMap["depart"] = JSON.stringify(departArr);
-        $.ajax({
-            url: "/service/customer/save",
-            type: 'POST',
-            data: dataMap,
-            success: function (r) {
-                if (r.rep) {
-                    // showTip("保存成功", 500);
-                    window.location.href="/service/customer/list"
-                } else {
-                    showTip("保存失败", 500);
-                }
-            }
-        })
-    }
-
-    var depart_flag = -1;      // 0:新增,1:修改
-    function showDepart() {
-        depart_flag = 0
-        $('#depart_name').val("");
-        $('#depart_contract').val("");
-        $('#modal-add-depart').modal("show")
-    }
-    //修改部门
-    function modify_Depart() {
-        depart_flag = 1
-        var index = selectIndex[0] - 1;
-        $('#depart_name').val(departArr[index].s_name);
-        $('#depart_contract').val(departArr[index].s_contract);
-        $('#s_depart_name').val(departArr[index].s_subname)
-        $("#isuseSelect").val(departArr[index].i_isuse)
-        $('#modal-add-depart').modal("show");
-    }
-    function del_Depart() {
-        if (keyTableChecked && selectIndex.length > 0) {
-            showConfirm("确定删除?", function() {
-                var tmp = []
-                for (var i in selectIndex) {
-                    var j = selectIndex[i] - 1;
-                    tmp.push(j)
-                }
-                departArr = deleteArrayVal(departArr, tmp)
-
-                keyTableChecked = false;
-                if (departArr.length == 0) {
-                    $('#allCheckbox').prop("checked", false);
-                    $('#departTable').dataTable().fnClearTable();
-                }else {
-                    $('#departTable').dataTable().fnClearTable();
-                    $('#departTable').dataTable().fnAddData(departArr);
-                }
-            })
-        }else {
-            showTip("请选中需要删除的关键词", 500)
-        }
-    }
-    function saveDepart() {
-        var name = $('#depart_name').val();
-        var contract = $('#depart_contract').val();
-        if (name != "") {
-            var depart = {};
-            depart["s_name"] = name;
-            depart["s_contract"] = contract;
-            depart["s_subname"] = $('#s_depart_name').val()
-            depart["i_isuse"] = $('#isuseSelect').val()
-            if (depart_flag == 1) {
-                var index = selectIndex[0] - 1;
-                departArr.splice(index, 1, depart)
-            }else {
-                departArr.push(depart)
-            }
-            $('#departTable').dataTable().fnClearTable();
-            $('#departTable').dataTable().fnAddData(departArr);
-            $('#modal-add-depart').modal('hide');
-        }else {
-            showTip("部门名称不能为空", 500)
-        }
-    }
-    function setup(val, bol) {
-        if (dataMap._id == "") {
-            showTip("请先保存客户信息再操作", 1000)
-            return
-        }
-        var msg = ""
-        var i_isuse = 0
-        if (bol) {
-            msg = "确定启用?"
-            i_isuse = 1
-        }else {
-            msg = "确定停用?"
-            i_isuse = 0
-        }
-        showConfirm(msg, function() {
-            $.ajax({
-                url:"/service/customer/setup",
-                type:"post",
-                data:{"_id": val, "i_isuse": i_isuse},
-                success:function(r){
-                    if(r.rep){
-                        window.location.reload()
-                    }else{
-                        showTip("启用失败", 1000);
-                    }
-                }
-            })
-        });
-    }
-</script>

+ 0 - 727
src/web/templates/private/customer_edit.html

@@ -1,727 +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/customer/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="tab_2"><a href="#tab_2" data-toggle="tab" aria-expanded="false">私有标签</a></li>
-                </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>
-                                    <a class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" onclick="saveCuser()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存</a>
-                                </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="customername" placeholder="公司名称"
-                                                   value="{{.T.data.s_name}}" 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="seller" placeholder="销售人员名称"
-                                                   value="{{.T.data.s_salesperson}}" required>
-                                        </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="contract" placeholder="客户联系人名称"
-                                                   value="{{.T.data.s_customername}}">
-                                        </div>
-                                    </div>
-                                    <div id="pushDiv">
-                                        <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">推送设置</label>
-                                                <div class="col-sm-3">
-                                                    <input id="pushSwitch" type="checkbox" checked/>
-                                                </div>
-                                                <script>
-                                                    $('#pushSwitch').on('switchChange.bootstrapSwitch', function (event, state) {
-                                                        if (state) {
-                                                            dataMap["i_push"] = 1
-                                                        }else {
-                                                            dataMap["i_push"] = 0
-                                                        }
-                                                    })
-                                                </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 selectpicker" id="pushModelSelect">
-                                                        <option value=0>全局模式</option>
-                                                        <option value=1>部门模式</option>
-                                                        <option value=2>标签模式</option>
-                                                        <option value=3>部门+标签模式</option>
-                                                        <option value=4>规则模式(不去重)</option>
-                                                    </select>
-                                                </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 selectpicker" id="pushTypeSelect">
-                                                        <option value=0 code="email">邮箱</option>
-                                                        <option value=1 code="interface">接口</option>
-                                                    </select>
-                                                </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="expandSelect">
-                                                        <option value="hospitalgrade" >医院等级</option>
-                                                        <option value="enterpise" >企业信息</option>
-                                                    </select>
-                                                    <script>
-                                                        $('#expandSelect').on('hide.bs.select', function () {
-                                                            var arr = $('#expandSelect').val();
-                                                            var arrStr = "";
-                                                            for (var i in arr) {
-                                                                if (arrStr === "") {
-                                                                    arrStr = arr[i]
-                                                                } else {
-                                                                    arrStr = arrStr + "," + arr[i]
-                                                                }
-                                                            }
-                                                            dataMap["s_extends"] = arrStr
-                                                        })
-                                                    </script>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <div class="box-header with-border">
-                                        <i class="fa fa-tag"></i>
-                                        <h3 class="box-title">部门信息</h3>
-                                    </div>
-                                    <table id="departTable" class="table table-bordered">
-                                        <thead>
-                                        <div style="margin: 10px 10px 0px;">
-                                            <a class="btn btn-default" onclick="showDepart()">新增</a>
-                                            <a class="btn btn-default" onclick="modify_Depart()">修改</a>
-                                            <a class="btn btn-default" onclick="del_Depart()">删除</a>
-                                        </div>
-                                        <tr>
-                                            <th></th>
-                                            <th>编号</th>
-                                            <th>部门名称</th>
-                                            <th>部门联系人</th>
-                                            <th>修改时间</th>
-                                            <th>是否启用</th>
-                                            <th>功能</th>
-                                        </tr>
-                                        </thead>
-                                    </table>
-                                </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>
-                                <a class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" href="/service/euser/tag/edit?cid={{.T.data._id}}"><i class="fa fa-fw fa-file-code-o fa-lg"></i>新建标签</a>
-                            </div>
-                            <table id="tagrule" class="table table-bordered">
-                                <thead>
-                                <tr>
-                                    <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-depart" 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>
-                        <form class="form-horizontal">
-                            <div class="form-group">
-                                <label class="col-sm-3 control-label"><span style="color:red;">* </span>部门名称</label>
-                                <div class="col-sm-6">
-                                    <input class="form-control" placeholder="销售部、销售部-xx子部门" id="depart_name"/></div>
-                            </div>
-                            <div class="form-group">
-                                <label class="col-sm-3 control-label">联系人</label>
-                                <div class="col-sm-6">
-                                    <input class="form-control" placeholder="输入联系人名称" id="depart_contract"/></div>
-                            </div>
-                            <div class="form-group">
-                                <label class="col-sm-3 control-label">是否启用</label>
-                                <div class="col-sm-6">
-                                    <select class="form-control selectpicker" id="isuseSelect">
-                                        <option value=1 selected>是</option>
-                                        <option value=0>否</option>
-                                    </select>
-                                </div>
-                            </div>
-                        </form>
-                    </div>
-                </div>
-                <div class="modal-footer">
-                    <input type="button" onclick="saveDepart()" 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-associated" 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>
-                        <div class="content">
-                            <table id="cuserRule" class="table table-bordered">
-                                <thead>
-                                <tr>
-                                    <th>编号</th>
-                                    <th><input type="checkbox" id="selrow" onclick="allSelect(this)"/></th>
-                                    <th>规则名称</th>
-                                    <th>部门名称</th>
-                                    <th>创建时间</th>
-                                </tr>
-                                </thead>
-                            </table>
-                        </div>
-                    </div>
-                </div>
-                <div class="modal-footer">
-                    <input type="button" onclick="saveTagrule()" 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("/customer/list");
-    var dataMap = {{.T.data}}
-    var departArr = {{.T.depart}}
-    var tagruleArr = []
-    var ruleArr = []
-
-    var selectIndex = [];               //选中的编号
-
-    $(document).ready(function () {
-        if (dataMap.i_state == 0) {
-            $('.tab_2').hide()
-            $('#pushDiv').hide()
-        }else {
-            tagruleArr = {{.T.tagrule}}
-            $('#pushSwitch').bootstrapSwitch({
-                onText: "开启",
-                offText: "关闭",
-            })
-            if (dataMap.i_push && dataMap.i_push == 1) {
-                $('#pushSwitch').bootstrapSwitch('state', true);
-            }else {
-                $('#pushSwitch').bootstrapSwitch('state', false);
-            }
-            $('#pushModelSelect').val(dataMap.i_pushmodel)
-            if (dataMap.i_pushtype == 0) {
-                $('#pushTypeSelect').val(0)
-            }else {
-                $('#pushTypeSelect').val(1)
-            }
-            if (dataMap.s_extends && dataMap.s_extends.indexOf("hospitalgrade") >= 0 && dataMap.s_extends.indexOf("enterpise") >= 0) {
-                $('#expandSelect').find("option[value = hospitalgrade]").attr("selected","selected");
-                $('#expandSelect').find("option[value = enterpise]").attr("selected","selected");
-            }else if (dataMap.s_extends && dataMap.s_extends.indexOf("hospitalgrade") >= 0){
-                $('#expandSelect').find("option[value = hospitalgrade]").attr("selected","selected");
-            }else if (dataMap.s_extends && dataMap.s_extends.indexOf("enterpise") >= 0) {
-                $('#expandSelect').find("option[value = enterpise]").attr("selected","selected");
-            }
-        }
-        $('#departTable').DataTable({
-            "paging": false,
-            "lengthChange": true,
-            "searching": false,
-            "ordering": false,
-            "info": false,
-            "autoWidth": true,
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "data": departArr,
-            "fnDrawCallback": function () {
-                this.api().column(1).nodes().each(function (cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data":function() {
-                        return `<input type="checkbox" name="ckb-depart" onclick="singleSelect1(this)" style="text-align: center">`
-                    }, width: "3%"},
-                {"data": null, width: "3%"},
-                {"data": "s_name", width: "10%"},
-                {"data": function (row) {
-                        if (row.s_contract == "") {
-                            return ""
-                        }else {
-                            return row.s_contract
-                        }
-                    }, width: "10%"},
-                {"data": "i_updatetime", render: function (val) {
-                        var dt = new Date();
-                        dt.setTime(parseInt(val) * 1000);
-                        return dt.format("yyyy-MM-dd hh:mm:ss")
-                    }, width: "20%"},
-                {"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: "10%" },
-                {"data": "_id", width: "20%", render: function (val, a, row, pos) {
-                        var s = [val, row.s_userid];
-                        tmp = '<div>' +
-                            '<a class="btn btn-sm btn-primary" href="/service/cuser/rule/list?ids=' + s + '">规则列表</a>&nbsp&nbsp'
-                            '</div>';
-                        return tmp
-                    }
-                }
-            ],
-        });
-        $('#tagrule').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": tagruleArr,
-            "columns": [
-                {"data": null, width: "1%"},
-                {"data": "s_name", 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 hh:mm:ss")
-                    }},
-                {"data": "i_isuse", render: function (val, a, row) {
-                        tmp = ""
-                        if(val == 1){
-                            tmp="<a href='#' title='停用' onclick='setupTag(\""+row._id+"\",false)'><i class='fa fa-fw fa-circle text-green'></i></a>已启用"
-                        }else{
-                            tmp="<a href='#' title='启用' onclick='setupTag(\""+row._id+"\",true)'><i class='fa fa-fw fa-circle text-red'></i></a>未启用"
-                        }
-                        return tmp
-                    }, width: "10%" },
-                {"data": "_id", width:"11%",render: function (val, a, row, pos) {
-                        tmp = '<div>' +
-                            '<a class="btn btn-sm btn-primary" href="/service/euser/tag/edit?id='+val+'&cid='+row.s_userid+'">编辑</a>&nbsp&nbsp'+
-                            '<a class="btn btn-sm btn-danger" onclick="delTag(\''+val+'\')">删除</a>'+
-                            '</div>';
-                        return tmp
-                    }},
-                {"data": "_id", width:"11%",render: function (val, a, row, pos) {
-                        var s = [val, row.s_userid]
-                        tmp = '<div>' +
-                            '<a class="btn btn-sm btn-primary" onclick="associated(\''+s+'\')">关联数据范围</a>&nbsp&nbsp'+
-                            '</div>';
-                        return tmp
-                    }},
-            ],
-        });
-    })
-    function cancelModel() {
-        $('#modal-add-depart').modal("hide")
-        $('#modal-associated').modal("hide")
-    }
-    //表格全选
-    function allSelect(obj) {
-        if ($(obj).is(':checked')) {
-            keyTableChecked = true;
-            keyTableAllChecked = true;
-            $('input[name="ckb-rule"]').each(function () {
-                this.checked = true;
-                selectIndex.push($(this).parents("tr").index());
-            })
-        } 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-rule"]').each(function () {
-            if (this.checked) {
-                keyTableChecked = true;
-                selectIndex.push($(this).parents("tr").index());
-            }else {
-                tag = false
-            }
-        });
-        if (tag) {
-            keyTableAllChecked = true;
-            $('#allCheckbox').prop("checked", true);
-        }else {
-            keyTableAllChecked = false;
-            $('#allCheckbox').prop("checked", false);
-        }
-    }
-    function singleSelect1(obj) {
-        var tag = true;
-        selectIndex.length = 0;
-        $('input[name="ckb-depart"]').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 saveCuser() {
-        var name = $('#customername').val();
-        var contract = $('#contract').val();
-        var saleperson = $('#seller').val();
-        if (name == "" || saleperson == "") {
-            showTip("请填写必填字段!", 1000)
-            return
-        }
-        dataMap.s_name = name
-        dataMap.s_customername = contract
-        dataMap.s_salesperson = saleperson
-        if (dataMap.i_state == 1) {
-            dataMap.i_pushmodel = $('#pushModelSelect option:selected').val()
-            dataMap.i_pushtype = $('#pushTypeSelect option:selected').val()
-        }
-        dataMap.id = dataMap._id
-        $.ajax({
-            url: "/service/customer/save",
-            type: 'POST',
-            data: dataMap,
-            success: function (r) {
-                if (r.rep) {
-                    showTip("保存成功", 500);
-                } else {
-                    showTip("保存失败", 500);
-                }
-            }
-        })
-    }
-
-    var depart_flag = -1;      // 0:新增,1:修改
-    function showDepart() {
-        depart_flag = 0
-        $('#depart_name').val("");
-        $('#depart_contract').val("");
-        $('#s_depart_name').val("");
-        $('#modal-add-depart').modal("show")
-    }
-    //修改部门
-    function modify_Depart() {
-        depart_flag = 1
-        var index = selectIndex[0] - 1;
-        $('#depart_name').val(departArr[index].s_name);
-        $('#depart_contract').val(departArr[index].s_contract);
-        $('#s_depart_name').val(departArr[index].s_subname)
-        $("#isuseSelect").val(departArr[index].i_isuse)
-        $('#modal-add-depart').modal("show");
-    }
-    function del_Depart() {
-        if (keyTableChecked && selectIndex.length > 0) {
-            showConfirm("确定删除?", function() {
-                var tmp = []
-                for (var i in selectIndex) {
-                    var j = selectIndex[i] - 1;
-                    tmp.push(j)
-                }
-                var did = departArr[tmp[0]]._id
-                var bol = false
-                $.ajax({
-                    url: "/service/depart/del",
-                    type: "post",
-                    data: {"id": did},
-                    success: function (r) {
-                        bol = r.rep
-                        if(r.rep){
-                            // showTip("删除成功", 1000)
-                            window.location.reload()
-                        }else{
-                            showTip("删除失败", 1000);
-                        }
-                    }
-                })
-                if (!bol) {
-                    return
-                }
-                departArr = deleteArrayVal(departArr, tmp)
-
-                keyTableChecked = false;
-                if (departArr.length == 0) {
-                    $('#allCheckbox').prop("checked", false);
-                    $('#departTable').dataTable().fnClearTable();
-                }else {
-                    $('#departTable').dataTable().fnClearTable();
-                    $('#departTable').dataTable().fnAddData(departArr);
-                }
-            })
-        }else {
-            showTip("请选中需要删除的关键词", 1000)
-        }
-    }
-    function saveDepart() {
-        var name = $('#depart_name').val();
-        if (name != "") {
-            if (depart_flag == 1) {
-                var index = selectIndex[0] - 1;
-                var depart = departArr[index]
-                depart["id"] = depart["_id"]
-            }else {
-                var depart = {}
-                depart["s_userid"] = dataMap._id
-            }
-            depart["s_name"] = name;
-            depart["s_contract"] = $('#depart_contract').val();
-            depart["s_subname"] = $('#s_depart_name').val()
-            depart["i_isuse"] =  $('#isuseSelect').val()
-            if (depart_flag == 1) {
-                var index = selectIndex[0] - 1;
-                departArr.splice(index, 1, depart)
-            }else {
-                departArr.push(depart)
-            }
-            $('#departTable').dataTable().fnClearTable();
-            $('#departTable').dataTable().fnAddData(departArr);
-            $('#modal-add-depart').modal('hide');
-
-            $.ajax({
-                url: "/service/depart/edit",
-                type: "post",
-                data: depart,
-                success: function (r) {
-                    if(r.rep){
-                        // showTip("保存成功", 1000)
-                        window.location.reload()
-                    }else{
-                        showTip("保存失败", 1000);
-                    }
-                }
-            })
-        }else {
-            showTip("部门名称不能为空", 500)
-        }
-    }
-    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/customer/setup",
-                type:"post",
-                data:{"_id": val, "i_isuse": i_isuse},
-                success:function(r){
-                    if(r.rep){
-                        // showTip("设置成功", 1000);
-                        window.location.reload()
-                    }else{
-                        showTip("设置失败", 1000);
-                    }
-                }
-            })
-        });
-    }
-    function setupTag(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/euser/tag/setup",
-                type:"post",
-                data:{"_id": val, "i_isuse": i_isuse},
-                success:function(r){
-                    if(r.rep){
-                        // showTip("设置成功", 1000);
-                        window.location.reload()
-                    }else{
-                        showTip("设置失败", 1000);
-                    }
-                }
-            })
-        });
-    }
-    function delTag(val) {
-        showConfirm("确定删除?", function () {
-            $.ajax({
-                url: "/service/euser/tag/del",
-                type: "post",
-                data: {"_id": val},
-                success: function (r) {
-                    if (r.rep) {
-                        window.location.reload()
-                    } else {
-                        showTip("删除失败", 1000);
-                    }
-                }
-            })
-        });
-    }
-    var tagid = ""
-    //关联规则
-    function associated(val) {
-        tagid = val.split(",")[0]
-        $('#cuserRule').DataTable({
-            "destroy": true,
-            "paging": true,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "serverSide": true,
-            "ajax": {
-                url: "/service/tag/ruleList",
-                type: "post",
-                data: {"eid": val.split(",")[1]},
-            },
-            "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-rule" onclick="singleSelect(this)" style="text-align: center">`
-                    }},
-                {"data": "s_tagname", width: "20%"},
-                {"data": "s_depart", width: "10%"},
-                {"data": "i_updatetime", width:"10%", render: function (val) {
-                        var dt = new Date()
-                        dt.setTime(parseInt(val) * 1000);
-                        return dt.format("yyyy-MM-dd hh:mm:ss")
-                    }},
-            ],
-        });
-        $('#modal-associated').modal("show")
-    }
-    function saveTagrule() {
-        var ids = [];
-        var table = $('#cuserRule').dataTable();
-        var nTrs = table.fnGetNodes();
-        for (var i = 0; i < nTrs.length; i++) {
-            if ($(nTrs[i].childNodes[1]).find("input").prop("checked")) {
-                ids.push(table.fnGetData(nTrs[i])._id);
-            }
-        }
-        $.ajax({
-            url: "/service/euser/tag/associated",
-            type: "post",
-            data: {"_id": tagid, "ids": ids.join(",")},
-            success: function (r) {
-                if (r.rep) {
-                    // window.location.reload()
-                    showTip("关联成功", 1000);
-                    $('#modal-associated').modal("hide")
-                } else {
-                    showTip("关联失败", 1000);
-                }
-            }
-        })
-    }
-</script>

+ 0 - 351
src/web/templates/private/customer_edit_euser.html

@@ -1,351 +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/entCustomer/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="tab_2"><a href="#tab_2" data-toggle="tab" aria-expanded="false">私有标签</a></li>
-                </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="customername" placeholder="客户名称"
-                                                   value="{{.T.data.s_name}}" disabled>
-                                        </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="contract" placeholder="客户联系人名称"
-                                                   value="{{.T.data.s_customername}}" disabled>
-                                        </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="seller" placeholder="销售人员名称"
-                                                   value="{{.T.data.s_salesperson}}" disabled>
-                                        </div>
-                                    </div>
-                                    <div id="pushDiv">
-                                        <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">推送设置</label>
-                                                <div class="col-sm-3">
-                                                    <input id="pushSwitch" type="checkbox"/>
-                                                </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 selectpicker" id="pushModelSelect" disabled>
-                                                        <option value=0>全局模式</option>
-                                                        <option value=1>部门模式</option>
-                                                        <option value=2>便签模式</option>
-                                                        <option value=3>部门+标签模式</option>
-                                                        <option value=4>规则模式(不去重)</option>
-                                                    </select>
-                                                </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 selectpicker" id="pushTypeSelect" disabled>
-                                                        <option value=0 code="email">邮箱</option>
-                                                        <option value=1 code="interface">接口</option>
-                                                    </select>
-                                                </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="expandSelect" disabled>
-                                                        <option value="hospitalgrade" >医院等级</option>
-                                                        <option value="enterpise" >企业信息</option>
-                                                    </select>
-                                                </div>
-                                            </div>
-                                        </div>
-                                    </div>
-                                    <div class="box-header with-border">
-                                        <i class="fa fa-tag"></i>
-                                        <h3 class="box-title">部门信息</h3>
-                                    </div>
-                                    <table id="departTable" class="table table-bordered">
-                                        <thead>
-                                        <tr>
-                                            <th>编号</th>
-                                            <th>部门名称</th>
-                                            <th>部门联系人</th>
-                                            <th>修改时间</th>
-                                            <th>是否启用</th>
-                                            <th>功能</th>
-                                        </tr>
-                                        </thead>
-                                    </table>
-                                </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>
-                            <table id="tagrule" class="table table-bordered">
-                                <thead>
-                                <tr>
-                                    <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("/entCustomer/list");
-    var dataMap = {{.T.data}}
-    var departArr = {{.T.depart}}
-    var tagruleArr = []
-    var ruleArr = []
-
-    var selectIndex = [];               //选中的编号
-
-    $(document).ready(function () {
-        if (dataMap.i_state == 0) {
-            $('.tab_2').hide()
-            $('#pushDiv').hide()
-        }else {
-            tagruleArr = {{.T.tagrule}}
-            $('#pushSwitch').bootstrapSwitch({
-                onText: "开启",
-                offText: "关闭",
-            })
-            if (dataMap.i_push && dataMap.i_push == 1) {
-                $('#pushSwitch').bootstrapSwitch('state', true);
-            }else {
-                $('#pushSwitch').bootstrapSwitch('state', false);
-            }
-            $('#pushSwitch').bootstrapSwitch('disabled', true)
-            $('#pushModelSelect').val(dataMap.i_pushmodel)
-            if (dataMap.i_pushtype == 0) {
-                $('#pushTypeSelect').val(0)
-            }else {
-                $('#pushTypeSelect').val(1)
-            }
-            if (dataMap.s_extends && dataMap.s_extends.indexOf("hospitalgrade") >= 0 && dataMap.s_extends.indexOf("enterpise") >= 0) {
-                $('#expandSelect').find("option[value = hospitalgrade]").attr("selected","selected");
-                $('#expandSelect').find("option[value = enterpise]").attr("selected","selected");
-            }else if (dataMap.s_extends && dataMap.s_extends.indexOf("hospitalgrade") >= 0){
-                $('#expandSelect').find("option[value = hospitalgrade]").attr("selected","selected");
-            }else if (dataMap.s_extends && dataMap.s_extends.indexOf("enterpise") >= 0) {
-                $('#expandSelect').find("option[value = enterpise]").attr("selected","selected");
-            }
-        }
-        $('#departTable').DataTable({
-            "paging": false,
-            "lengthChange": true,
-            "searching": false,
-            "ordering": false,
-            "info": false,
-            "autoWidth": true,
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "data": departArr,
-            "fnDrawCallback": function () {
-                this.api().column(0).nodes().each(function (cell, i) {
-                    cell.innerHTML = i + 1;
-                });
-            },
-            "columns": [
-                {"data": null, width: "3%"},
-                {"data": "s_name", width: "10%"},
-                {"data": function (row) {
-                        if (row.s_contract == "") {
-                            return ""
-                        }else {
-                            return row.s_contract
-                        }
-                    }, width: "10%"},
-                {"data": "i_updatetime", render: function (val) {
-                        var dt = new Date();
-                        dt.setTime(parseInt(val) * 1000);
-                        return dt.format("yyyy-MM-dd hh:mm:ss")
-                    }, width: "20%"},
-                {"data": "i_isuse", render: function (val, a, row) {
-                        tmp = ""
-                        if(val == 1){
-                            tmp="<a href='#' title='停用'><i class='fa fa-fw fa-circle text-green'></i></a>已启用"
-                        }else{
-                            tmp="<a href='#' title='启用'><i class='fa fa-fw fa-circle text-red'></i></a>未启用"
-                        }
-                        return tmp
-                    }, width: "10%" },
-                {"data": "_id", width: "20%", render: function (val, a, row, pos) {
-                        var s = [val, row.s_userid];
-                        tmp = '<div>' +
-                            '<a class="btn btn-sm btn-primary" href="/service/euser/rule/list?ids=' + s + '">规则列表</a>&nbsp&nbsp'
-                            '</div>';
-                        return tmp
-                    }
-                }
-            ],
-        });
-        $('#tagrule').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": tagruleArr,
-            "columns": [
-                {"data": null, width: "1%"},
-                {"data": "s_name", 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 hh:mm:ss")
-                    }},
-                {"data": "i_isuse", render: function (val, a, row) {
-                        tmp = ""
-                        if(val == 1){
-                            tmp="<a href='#' title='停用'><i class='fa fa-fw fa-circle text-green'></i></a>已启用"
-                        }else{
-                            tmp="<a href='#' title='启用'><i class='fa fa-fw fa-circle text-red'></i></a>未启用"
-                        }
-                        return tmp
-                    }, width: "10%" },
-                {"data": "_id", width:"11%",render: function (val, a, row, pos) {
-                        tmp = '<div>' +
-                            '<a class="btn btn-sm btn-primary" href="/service/euser/tag?id='+val+'&cid='+row.s_userid+'">查看</a>&nbsp&nbsp'+
-                            '</div>';
-                        return tmp
-                    }},
-                {"data": "_id", width:"11%",render: function (val, a, row, pos) {
-                        var s = [val, row.s_userid]
-                        tmp = '<div>' +
-                            '<a class="btn btn-sm btn-primary" onclick="associated(\''+s+'\')">关联数据范围</a>&nbsp&nbsp'+
-                            '</div>';
-                        return tmp
-                    }},
-            ],
-        });
-    })
-    var tagid = ""
-    //关联规则
-    function associated(val) {
-        tagid = val.split(",")[0]
-        $('#cuserRule').DataTable({
-            "destroy": true,
-            "paging": true,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "serverSide": true,
-            "ajax": {
-                url: "/service/tag/ruleList",
-                type: "post",
-                data: {"eid": val.split(",")[1]},
-            },
-            "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-rule" onclick="singleSelect(this)" style="text-align: center">`
-                    }},
-                {"data": "s_tagname", width: "20%"},
-                {"data": "s_depart", width: "10%"},
-                {"data": "i_updatetime", width:"10%", render: function (val) {
-                        var dt = new Date()
-                        dt.setTime(parseInt(val) * 1000);
-                        return dt.format("yyyy-MM-dd hh:mm:ss")
-                    }},
-            ],
-        });
-        $('#modal-associated').modal("show")
-    }
-    function saveTagrule() {
-        var ids = [];
-        var table = $('#cuserRule').dataTable();
-        var nTrs = table.fnGetNodes();
-        for (var i = 0; i < nTrs.length; i++) {
-            if ($(nTrs[i].childNodes[1]).find("input").prop("checked")) {
-                ids.push(table.fnGetData(nTrs[i])._id);
-            }
-        }
-        $.ajax({
-            url: "/service/euser/tag/associated",
-            type: "post",
-            data: {"_id": tagid, "ids": ids.join(",")},
-            success: function (r) {
-                if (r.rep) {
-                    // window.location.reload()
-                    showTip("关联成功", 1000);
-                    $('#modal-associated').modal("hide")
-                } else {
-                    showTip("关联失败", 1000);
-                }
-            }
-        })
-    }
-</script>

+ 0 - 106
src/web/templates/private/customer_ent_list.html

@@ -1,106 +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></small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="#"> 企业客户</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("/entCustomer/list");
-    $(function () {
-        ttable = $('#dataTable').DataTable({
-            "paging": true,
-            "lengthChange": false,
-            "searching": true,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "serverSide": true,
-            "ajax": {
-                "url": "/service/entCustomer/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_name"},
-                {"data": "s_customername"},
-                {"data": "s_salesperson"},
-                {
-                    "data": "i_toservicetime", width: "22%", render: function (val) {
-                        var dt = new Date()
-                        dt.setTime(parseInt(val) * 1000);
-                        return dt.format("yyyy-MM-dd hh:mm:ss")
-                    }
-                },
-                {
-                    "data": "i_lastsynctime", width: "22%", render: function (val) {
-                        var dt = new Date()
-                        dt.setTime(parseInt(val) * 1000);
-                        return dt.format("yyyy-MM-dd hh:mm:ss")
-                    }
-                },
-                {
-                    "data": "_id", width: "20%", render: function (val, a, row, pos) {
-                        var tmp = '<div>' +
-                            '<a class="btn btn-sm btn-primary" href="/service/customer/euser?id=' + val + '">查看</a>&nbsp;&nbsp;' +
-                            '</div>';
-                        return tmp
-                    }
-                }
-            ]
-        });
-    });
-</script>

+ 0 - 176
src/web/templates/private/customer_list.html

@@ -1,176 +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/customer/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/customer/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("/customer/list");
-    $(function () {
-        ttable = $('#dataTable').DataTable({
-            "paging": true,
-            "lengthChange": false,
-            "searching": true,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "serverSide": true,
-            "ajax": {
-                "url": "/service/customer/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_name"},
-                {"data": "s_customername"},
-                {"data": "s_salesperson"},
-                {
-                    "data": "i_updatetime", width: "12%", render: function (val) {
-                        var dt = new Date()
-                        dt.setTime(parseInt(val) * 1000);
-                        return dt.format("yyyy-MM-dd hh:mm:ss")
-                    }
-                },
-                {
-                    "data": "_id", width: "11%", render: function (val, a, row, pos) {
-                        var tmp
-                        if (row.i_state == 1) {
-                            tmp = '<div>' +
-                                '<a class="btn btn-sm btn-primary" href="/service/customer/edit?id=' + val + '">编辑</a>&nbsp;&nbsp;' +
-                                '<a class="btn btn-sm btn-default" disabled="true">删除</a>' +
-                                '</div>';
-                        }else {
-                            tmp = '<div>' +
-                                '<a class="btn btn-sm btn-primary" href="/service/customer/edit?id=' + val + '">编辑</a>&nbsp;&nbsp;' +
-                                '<a class="btn btn-sm btn-danger" onclick="delCuser(\''+val+'\')">删除</a>' +
-                                '</div>';
-                        }
-                        return tmp
-                    }
-                },
-                {
-                    "data": "_id", width: "20%", render: function (val, a, row, pos) {
-                        var tmp
-                        if (row.i_state == 1) {
-                            tmp = '<div>' +
-                                '<a class="btn btn-sm btn-default" disabled="true">转企</a>&nbsp;&nbsp;' +
-                                '<a class="btn btn-sm btn-warning" onclick="SynEnt(\'' + val + '\')">同步</a>' +
-                                '</div>';
-                        }else {
-                            tmp = '<div>' +
-                                '<a class="btn btn-sm btn-primary" onclick="toEnt(\''+ val +'\')">转企</a>&nbsp;&nbsp;' +
-                                '<a class="btn btn-sm btn-default" disabled="true">同步</a>' +
-                                '</div>';
-                        }
-                        return tmp
-                    }
-                }
-            ]
-        });
-    });
-    function toEnt(val) {
-        showConfirm("确认转企操作吗?", function () {
-            $.ajax({
-                url:"/service/cuser/converted",
-                type:"post",
-                data:{"_id": val},
-                success:function(r){
-                    if(r.rep){
-                        showTip("转企成功", 1000);
-                        ttable.ajax.reload()
-                    }else{
-                        showTip("转企失败", 1000);
-                    }
-                }
-            })
-        })
-    }
-    function SynEnt(val) {
-        showConfirm("确认同步企业信息吗?", function() {
-            $.ajax({
-                url: "/service/euser/synchronous",
-                type: "post",
-                data: {"_id": val},
-                success: function(r){
-                    if(r.rep){
-                        showTip("同步成功", 1000);
-                        ttable.ajax.reload()
-                    }else{
-                        showTip("同步失败", 1000);
-                    }
-                }
-            })
-        })
-    }
-    
-    function delCuser(val) {
-        showConfirm("确认删除该客户信息吗?", function () {
-            $.ajax({
-                url:"/service/customer/del",
-                type:"post",
-                data:{"_id": val},
-                success:function(r){
-                    if(r.rep){
-                        ttable.ajax.reload()
-                    }else{
-                        showTip("删除失败", 1000);
-                    }
-                }
-            })
-        })
-    }
-</script>

+ 0 - 961
src/web/templates/private/euser_rule_edit.html

@@ -1,961 +0,0 @@
-{{include "com/inc.html"}}
-<!-- Main Header -->
-{{include "com/header.html"}}
-<!-- Left side column. 权限菜单 -->
-{{include "com/menu.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>
-                <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/entCustomer/list"> 客户列表</a></li>
-            <li><a href="/service/customer/euser?id={{.T.cid}}"> 查看客户</a></li>
-            <li><a href="/service/euser/rule/list?ids={{.T.ids}}"> 客户规则</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>
-                </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}}" disabled>
-                                        </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" disabled></select>
-                                        </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" disabled></select>
-                                        </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" disabled></select>
-                                        </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" disabled>
-                                                <option selected:disabled style="diaplay:none" value=0>请选择</option>
-                                                <option value=1>一级公告类别</option>
-                                                <option value=2>二级公告类别</option>
-                                            </select>
-                                        </div>
-                                        <label class="col-sm-2 control-label">公告类别选择</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control selectpicker" multiple id="typeSelectVal" disabled></select>
-                                        </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" disabled></select>
-                                        </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)" disabled />
-                                        </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)"disabled />
-                                        </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)" disabled />
-                                        </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)" disabled />
-                                        </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}}" disabled />
-                                        </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" disabled />
-                                        </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}}" disabled />
-                                        </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">
-                                        </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}}" disabled>
-                                        </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" disabled />
-                                        </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" value="{{.T.data.s_globalbuyerclass}}" disabled />
-                                        </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" disabled />
-                                        </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}}" disabled />
-                                        </div>
-                                        <label class="col-sm-2 control-label ">高级字段包</label>
-                                        <div class="col-sm-3">
-                                            <select class="form-control" id="extfiledselect" style="border-radius:3px" disabled>
-                                                <option value="1">否</option>
-                                                <option value="2">是</option>
-                                            </select>
-                                        </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>
-                            <table id="keywords" class="table table-bordered">
-                                <thead>
-                                <tr>
-                                    <th>编号</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>
-
-<!-- 预览数据模态框 -->
-<div class="modal fade" id="modal-preview" tabindex="-1" role="dialog" aria-hidden="true">
-    <div class="modal-dialog" style="width: 80%">
-        <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 class="btn_content">
-                            <div style="text-align: right">
-                                <span id="dataCount">高级字段包</span>
-                            </div>
-                            <table id="previewData" class="table table-bordered" style="white-space: nowrap">
-                                <thead>
-                                <tr>
-                                    <th rowspan="2" style="align-content: center">序号</th>
-                                    <th rowspan="2">关键词</th>
-                                    <th rowspan="2">省份</th>
-                                    <th rowspan="2">城市</th>
-                                    <th rowspan="2">公告标题</th>
-                                    <th rowspan="2">公告类别</th>
-                                    <th rowspan="2">公告内容</th>
-                                    <th rowspan="2">发布时间</th>
-                                    <th rowspan="2">公告地址</th>
-                                    <th rowspan="2">项目编号</th>
-                                    <th rowspan="2">项目名称</th>
-                                    <th rowspan="2">项目范围</th>
-                                    <th rowspan="2">预算金额<br>(万元)</th>
-                                    <th rowspan="2">中标金额<br>(万元)</th>
-                                    <th rowspan="2">开标日期</th>
-                                    <th colspan="3" style="text-align: center">采购单位信息</th>
-                                    <th rowspan="2">招标代理机构</th>
-                                    <th colspan="3">中标单位信息(来源招标公告)</th>
-                                    <th colspan="3">中标单位信息(来源企业公示)</th>
-                                </tr>
-                                <tr>
-                                    <th>单位名称</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>
-    </div><!-- /.modal -->
-</div>
-{{include "com/footer.html"}}
-<script>
-    menuActive("/entCustomer/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];
-            opt.value = existField[i];
-            if (dataMap.s_existfields && dataMap.s_existfields.indexOf(existField[i]) != -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": "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%", render: function (val) {
-                        if (val == undefined) {
-                            val = ""
-                        }
-                        return val
-                    }},
-                {"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%", render: function (val) {
-                        if (val == undefined) {
-                            val = ""
-                        }
-                        return val
-                    }},
-                {"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,
-    });
-
-    //生成数据
-    function produceData() {
-        com.maskShow("正在生成数据...");
-        $.ajax({
-            url: "/service/cuser/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)
-        }
-    }
-
-    //下载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);
-                    }
-                }
-            })
-        });
-    }
-</script>

+ 0 - 178
src/web/templates/private/euser_rule_list.html

@@ -1,178 +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></small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/entCustomer/list"> 客户列表</a></li>
-            <li><a href="/service/customer/euser?id={{.T.cid}}"> 查看客户</a></li>
-            <li><a href="#"> 客户规则</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>
-<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("/entCustomer/list");
-    var ids = {{.T.did}} + "," + {{.T.cid}}
-    $('#addTag').attr("href", "/service/cuser/rule/create?ids="+ids)
-    $(function () {
-        ttable = $('#dataTable').DataTable({
-            "paging": true,
-            "lengthChange": false,
-            "searching": true,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "serverSide": true,
-            "ajax": {
-                "url": "/service/cuser/rule/list",
-                "type": "post",
-                "data": {"ids": ids}
-            },
-            "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": "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='停用'><i class='fa fa-fw fa-circle text-green'></i></a>已启用"
-                        }else{
-                            tmp="<a href='#' title='启用'><i class='fa fa-fw fa-circle text-red'></i></a>未启用"
-                        }
-                        return tmp
-                    }, width: "10%" },
-                {"data": "_id", width:"11%",render: function (val, a, row, pos) {
-                      tmp = '<div>' +
-                          '<a class="btn btn-sm btn-primary" href="/service/euser/rule?id='+val+'">查看</a>&nbsp;&nbsp;'+
-                          '</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/cuser/rule/downloadrule?id='+val+'">导出标签</a>&nbsp;&nbsp;'+
-                          '<a class="btn btn-sm btn-info" href="/service/cuser/rule/downloadata?s_dataid='+val+'">导出数据</a>&nbsp;&nbsp;'+
-                          '<a class="btn btn-sm btn-warning" onclick="archive(\'' + val + '\')">存档</a>&nbsp;&nbsp;'+
-                          '</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>&nbsp;&nbsp;'+
-                      '<a class="btn btn-sm btn-success" href="/service/rule/history?tagid='+val+'">变更历史</a>'+
-                      '</div>';
-                  return tmp
-                }}
-            ]
-        });
-    });
-    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");
-    }
-  
-    var clipboard = new ClipboardJS('#copy');
-    clipboard.on('success', function () {
-        alert("复制成功!")
-    });
-    clipboard.on('error', function () {
-        alert("复制失败!")
-    });
-</script>

+ 0 - 636
src/web/templates/private/euser_tag_rule.html

@@ -1,636 +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/customer/list"> 客户列表</a></li>
-            <li><a href="/service/customer/edit?id={{.T.cid}}"> 编辑客户</a></li>
-            <li><a href="#"> 新建标签规则</a></li>
-        </ol>
-    </section>
-    <!-- Main content -->
-    <div class="content">
-        <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>
-                        <a class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" onclick="saveTag1()"><i class="fa fa-fw fa-file-text fa-lg"></i>保存</a>
-                    </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">
-                                <input id="useSelect" type="checkbox" checked/>
-                            </div>
-                            <script>
-                                $('#useSelect').on('switchChange.bootstrapSwitch', function (event, state) {
-                                    if (state) {
-                                        dataMap["i_isuse"] = 1
-                                    }else {
-                                        dataMap["i_isuse"] = 0
-                                    }
-                                })
-                            </script>
-                        </div>
-                    </div>
-                    <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>
-                    <div class="box-body">
-                        <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>
-                            </tr>
-                            </thead>
-                        </table>
-                    </div>
-                </div>
-        </form>
-    </div>
-</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-6">
-                                    <input type="text" class="form-control" placeholder="输入标签名称" id="rulename"/></div>
-                            </div>
-                            <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>
-                            <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="notword_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("/customer/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_name": "",
-        "i_isuse": 0,
-        "s_userid": {{.T.cid}}
-    }
-
-    $(document).ready(function () {
-        $('#useSelect').bootstrapSwitch({
-            onText: "开启",
-            offText: "关闭",
-        })
-        if ({{.T.tagrule}}) {
-            dataMap = {{.T.tagrule}}
-            $('#tagname').val(dataMap.s_name)
-            if (dataMap.i_isuse == 1) {
-                $('#useSelect').bootstrapSwitch('state', true);
-            }else {
-                $('#useSelect').bootstrapSwitch('state', false);
-            }
-            o_list = dataMap.o_list
-        }
-        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;
-                });
-            },
-            "data": 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%"},
-                {"data": "s_tagname", width: "10%"},
-            ],
-            "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/esuer/tag/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 saveTag1() {
-        dataMap.s_name = $('#tagname').val()
-        if (dataMap.s_tagname == "") {
-            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;
-                }
-                if (o_list[i].s_notkey && !o_list[i].s_notkeymatch) {
-                    showMsg("保存失败,关键词规则中有附加词未对应匹配方式!")
-                    return;
-                }
-            }
-        }
-        dataMap["o_list"] = JSON.stringify(o_list);
-        $.ajax({
-            url: "/service/euser/tag/edit",
-            type: "post",
-            data: dataMap,
-            success: function (r) {
-                if (r.rep && r.id) {
-                    // showTip("保存成功", 1000);
-                    window.location.href = "/service/customer/edit?id=" + r.id
-                } 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;
-                    }
-                }
-                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_list[j]["s_notkeymatch"] = 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");
-            $('#rulename').val(o_list[index].s_tagname)
-            $('#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 tagname = $('#rulename').val()
-        var key = $('#keyword_txt').val()
-        var addkey = $('#addword_txt').val()
-        var notkey = $('#notword_txt').val()
-        if (tagname != "" || key != "") {
-            var rule = {};
-            rule["s_tagname"] = tagname
-            rule["s_matchkey"] = key.replace(",", ",");
-            if (addkey != "") rule["s_addkey"] = addkey.replace(",", ",");
-            if (notkey != "") rule["s_notkey"] = 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("必填项不能为空", 1000)
-        }
-    }
-    //关键词删除
-    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 - 240
src/web/templates/private/euser_tag_rule_l.html

@@ -1,240 +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></small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/entCustomer/list"> 企业客户</a></li>
-            <li><a href="/service/customer/euser?id={{.T.cid}}"> 查看客户</a></li>
-            <li><a href="#"> 查看标签</a></li>
-        </ol>
-    </section>
-    <!-- Main content -->
-    <div class="content">
-        <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="标签规则名称" disabled>
-                            </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 id="useSelect" type="checkbox" checked/>
-                            </div>
-                        </div>
-                    </div>
-                    <div class="box-header with-border">
-                        <i class="fa fa-bookmark"></i>
-                        <h3 class="box-title">关键词规则</h3>
-                    </div>
-                    <div class="box-body">
-                        <table id="keywords" class="table table-bordered">
-                            <thead>
-                            <tr>
-                                <th>编号</th>
-                                <th>关键词</th>
-                                <th>匹配方式</th>
-                                <th>附加词</th>
-                                <th>匹配方式</th>
-                                <th>排除词</th>
-                                <th>匹配方式</th>
-                                <th>标签名称</th>
-                            </tr>
-                            </thead>
-                        </table>
-                    </div>
-                </div>
-        </form>
-    </div>
-</div>
-
-{{include "com/footer.html"}}
-<script>
-    menuActive("/customer/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_name": "",
-        "i_isuse": 0,
-        "s_userid": {{.T.cid}}
-    }
-
-    $(document).ready(function () {
-        $('#useSelect').bootstrapSwitch({
-            onText: "开启",
-            offText: "关闭",
-        })
-        if ({{.T.tagrule}}) {
-            dataMap = {{.T.tagrule}}
-            $('#tagname').val(dataMap.s_name)
-            if (dataMap.i_isuse == 1) {
-                $('#useSelect').bootstrapSwitch('state', true);
-            }else {
-                $('#useSelect').bootstrapSwitch('state', false);
-            }
-            $('#useSelect').bootstrapSwitch('disabled', true)
-            o_list = dataMap.o_list
-        }
-        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;
-                });
-            },
-            "data": o_list,
-            "columns": [
-                {"data": null, width: "1%"},
-                {"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_tagname", width: "10%"},
-            ],
-            "columnDefs": [{
-                "targets": [1],
-                "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": [3],
-                "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": [5],
-                "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
-                    }
-                }
-            }]
-        });
-    })
-</script>

+ 0 - 152
src/web/templates/private/feedback_detail.html

@@ -1,152 +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 class="btn btn-primary" href="/service/rule/edit?dataid={{.T.data.s_dataid}}">编辑标签</a></small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/feedback/list"><i class="active"></i> 反馈列表</a></li>
-            <li><a href="#"><i class="active"></i> 反馈详情</a></li>
-        </ol>
-    </section>
-    <!-- Main content -->
-    <section class="content">
-        <div class="row">
-            <div class="col-xs-12">
-                <div class="box box-primary">
-                    <div class="box-body">
-                        <form class="form-horizontal" role="form">
-                            <div class="form-group">
-                                <label class="col-sm-1 control-label">客户名称</label>
-                                <div class="col-sm-3">
-                                    <input type="text" class="form-control" id="username"
-                                           value={{.T.data.s_customer}}>
-                                </div>
-                                <label class="col-sm-1 control-label">标签名称</label>
-                                <div class="col-sm-3">
-                                    <input type="text" class="form-control" id="feedbackrule"
-                                           value={{.T.data.s_tagname}}>
-                                </div>
-                                <label class="col-sm-1 control-label">反馈日期</label>
-                                <div class="col-sm-3">
-                                    <input type="text" class="form-control" id="feedbacktime">
-                                </div>
-                            </div>
-                            <div class="form-group">
-                                <label class="col-sm-1 control-label">反馈数量</label>
-                                <div class="col-sm-3">
-                                    <input type="text" class="form-control" id="feedbacknum" value={{.T.data.i_num}}>
-                                </div>
-                                <label class="col-sm-1 control-label">反馈意见</label>
-                                <div class="col-sm-7">
-                                    <textarea type="text" style="height:34px" class="form-control"
-                                              id="feedbackview">{{.T.data.s_opinion}}</textarea>
-                                </div>
-                            </div>
-                        </form>
-                        <hr>
-                        <table id="dataTable" class="table table-bordered table-striped">
-                            <thead>
-                            <tr>
-                                <td>关键词</td>
-                                <td>项目名称</td>
-                                <td>公告标题</td>
-                                <td>公告行业</td>
-                                <td>采购单位行业</td>
-                                <td>标的物</td>
-                                <td>剑鱼标讯地址</td>
-                            </tr>
-                            </thead>
-                        </table>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </section>
-</div>
-{{include "com/footer.html"}}
-<script>
-    menuActive("/feedback/list")
-    $(function () {
-        ttable = $('#dataTable').DataTable({
-            "paging": true,
-            "lengthChange": false,
-            "searching": true,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "serverSide": true,
-            "ajax": {
-                "url": "/service/feedback/detail",
-                "type": "post",
-                "data": {"id":{{.T.id}}}
-            },
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "columns": [
-                {"data": "s_matchkey", width: "8%"},
-                {"data": "s_projectname", width: "15%"},
-                {"data": "s_title"},
-                {"data": "s_subtype"},
-                {"data": "s_buyerclass"},
-                {"data": "s_purchasing"},
-                {"data": function (row) {
-						if (row.s_jyhref != undefined) {
-							var shref = row.s_jyhref;
-							tmp = '<a class="" target="_blank" href='+shref+'>剑鱼地址</a>';
-							return tmp
-						}else {
-							return ""
-						}
-					}, width: "10%"}
-            ],
-            "fnDrawCallback": function (table) {
-                $("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);
-                });
-            },
-            "fnServerParams": function (e) {
-                var matchkey = $("#matchkey").val()
-                if (matchkey) {
-                    e.matchkey = matchkey;
-                } else {
-                    e.matchkey = "-1";
-                }
-            }
-        });
-        ttable.on('init.dt', function () {
-            //反馈日期类型转换并赋值
-            var dt = new Date()
-            dt.setTime(parseInt({{.T.data.l_feedbacktime}}) * 1000)
-            $("#feedbacktime").val(dt.format("yyyy-MM-dd hh:mm:ss"))
-            //关键词筛选
-            var matchkey = "<option value='-1'>全部</option>"
-            var matchkeys ={{.T.data.o_matchkey}}
-            for (k in matchkeys) {
-                matchkey += "<option value='" + matchkeys[k] + "'>" + matchkeys[k] + "</option>"
-            }
-            var selectMatchkey = "<div class='form-group'><label for='name'>关键词筛选:</label>" +
-                "<select id='matchkey' onchange='checkclick(this.value)' class='form-control input-sm'>" +
-                matchkey +
-                "</select></div>"
-            $("#dataTable_filter").prepend("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
-            $("#dataTable_filter").prepend(selectMatchkey);
-        });
-    })
-
-    function checkclick(me) {
-        ttable.ajax.reload();
-    }
-</script>

+ 0 - 101
src/web/templates/private/feedback_list.html

@@ -1,101 +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 class="btn btn-primary opr" opr="new">新增逻辑</a>--></small>
-        </h1>
-        <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
-            <li><a href="/service/feedback/list"><i class="active"></i> 反馈列表</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-striped">
-                            <thead>
-                            <tr>
-                                <th>客户名称</th>
-                                <th>标签名称</th>
-                                <th>反馈意见</th>
-                                <th>反馈数量</th>
-                                <th>反馈时间</th>
-                                <th class="hidden-xs">操作</th>
-                            </tr>
-                            </thead>
-                        </table>
-                    </div>
-                </div>
-            </div>
-        </div>
-    </section>
-</div>
-{{include "com/footer.html"}}
-<script>
-    menuActive("/feedback/list");
-    $(function () {
-        ttable = $('#dataTable').DataTable({
-            "paging": true,
-            "lengthChange": false,
-            "searching": true,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "serverSide": true,
-            "ajax": {
-                "url": "/service/feedback/list",
-                "type": "post",
-                "data": {}
-            },
-            "language": {
-                "url": "/dist/js/dataTables.chinese.lang"
-            },
-            "columns": [
-                {"data": "s_customer"},
-                {"data": "s_tagname"},
-                {"data": "s_opinion"},
-                {"data": "i_num"},
-                {"data": "l_feedbacktime", render: function (val) {
-                        var dt = new Date()
-                        dt.setTime(parseInt(val) * 1000)
-                        return dt.format("yyyy-MM-dd hh:mm:ss")
-                    }
-                },
-                {"data": "_id", "width": "25%", render: function (val, a, row, pos) {
-                        if (row.b_tagdel) {
-                            tmp = '<div>' +
-                                '<a class="btn btn-sm btn-primary" disabled="true" href="javascript:return false;">编辑标签</a> ' +
-                                '<a class="btn btn-sm btn-success" href="/service/feedback/detail?_id=' + val + '">查看</a> ' +
-                                '</div>';
-                        } else {
-                            tmp = '<div>' +
-                                '<a class="btn btn-sm btn-primary" href="/service/rule/edit?dataid=' + encodeURI(row.s_dataid) + '">编辑标签</a> ' +
-                                '<a class="btn btn-sm btn-success" href="/service/feedback/detail?_id=' + val + '">查看</a> ' +
-                                '</div>';
-                        }
-
-                        return tmp
-                    }
-                }
-            ],
-            "fnDrawCallback": function (table) {
-                $("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);
-                });
-            }
-        });
-    })
-</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 - 87
src/web/templates/private/rule_history.html

@@ -1,87 +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/history?tagid={{.T.tagid}}"> 变更历史</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>ID</th>
-                                <th>状态</th>
-                                <th>变更时间</th>
-                            </tr>
-                            </thead>
-                        </table>
-                    </div>
-                    <!-- /.box-body -->
-                </div>
-                <!-- /.box -->
-            </div>
-        </div>
-    </section>
-</div>
-{{include "com/footer.html"}}
-<script>
-    $(function () {
-        ttable = $('#dataTable').DataTable({
-            "paging": true,
-            "lengthChange": false,
-            "searching": false,
-            "ordering": false,
-            "info": true,
-            "autoWidth": false,
-            "ajax": {
-                "url": "/service/rule/history",
-                "type": "post",
-                "data": {"tagid":{{.T.tagid}}}
-            },
-            "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_changeperson"},
-                {"data": "_id"},
-                {"data": "s_state"},
-                {"data": "l_changetime", render: function (val) {
-                  var dt = new Date()
-                  dt.setTime(parseInt(val) * 1000)
-                  return dt.format("yyyy-MM-dd hh:mm:ss")
-                }}
-            ]
-        });
-    });
-    
-</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 - 695
src/web/templates/private/tag_rule_edit.html

@@ -1,695 +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() == "") {
-            dataMap["s_globaladdkey"] = ""
-            dataMap["s_globaladdkeymatch"] = ""
-        }else {
-            dataMap["s_globaladdkey"] = $('#g_addkey').val();
-        }
-        if ($('#g_notkey').val() == "") {
-            dataMap["s_globalnotkey"] = ""
-            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;
-                }
-            }
-        }
-        console.log(dataMap)
-        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>