Jianghan 5 tahun lalu
induk
melakukan
69bc55e2d8

+ 124 - 4
src/service/customer_service.go

@@ -31,8 +31,14 @@ type Customer struct {
 	//企业客户
 	entEuserList 	xweb.Mapper `xweb:"/service/entCustomer/list"`
 
-	cuserRule       xweb.Mapper `xweb:"/service/cuser/rule/list"`   //规则列表
-	cuserRuleCreate xweb.Mapper `xweb:"/service/cuser/rule/create"` //新建规则
+	cuserRule       xweb.Mapper `xweb:"/service/cuser/rule/list"`  	 	//规则列表
+	cuserRuleCreate xweb.Mapper `xweb:"/service/cuser/rule/create"` 		//新建规则
+	cuserRuleEdit 	xweb.Mapper `xweb:"/service/cuser/rule/Edit"`
+	cuserRuleDel 	xweb.Mapper `xweb:"/service/cuser/rule/Del"`
+	//企业标签
+	euserTagEdit	xweb.Mapper `xweb:"/service/esuer/tag/edit"`
+	tagSetup		xweb.Mapper `xweb:"/service/esuer/tag/setup"`
+	tagDel			xweb.Mapper `xweb:"/service/esuer/tag/del"`
 }
 
 func (c *Customer) CustomerList() {
@@ -82,6 +88,10 @@ func (c *Customer) CustomerEdit() {
 	data, _ := Mgo.FindOneByField("cuser", query, `{}`)
 	depart, _ := Mgo.Find("cuserdepart", bson.M{"s_userid": id}, nil, nil, false, -1, -1)
 	(*data)["_id"] = qu.BsonIdToSId((*data)["_id"])
+	if (*data)["i_state"]  == 1 {
+		tagRule, _ := Mgo.Find("eusertagrule", bson.M{"s_userid": id}, 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)
@@ -92,15 +102,15 @@ func (c *Customer) CustomerSave() {
 	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 == "" {
-			delete(data, "id")
 			departArr := []map[string]interface{}{}
 			departArrStr := data["depart"].(string)
 			json.Unmarshal([]byte(departArrStr), &departArr)
 			delete(data, "depart")
-			data["i_updatetime"] = i_createtime
 			data["b_delete"] = false
 			data["i_createtime"] = i_createtime
 			data["i_state"] = 0
@@ -290,6 +300,10 @@ func (c *Customer) SynEuser() {
 	Mgo.SaveBulk("euserdepart", *departMap...)
 	ruleMap, _ := Mgo.Find("cuserdepartrule", bson.M{"s_userid": _id, "i_isuse": 1, "b_delete": false}, nil, nil, false, -1, -1)
 	b = Mgo.SaveBulk("euserdepartrule", *ruleMap...)
+
+	c.ServeJson(map[string]interface{}{
+		"rep": b,
+	})
 }
 
 func (c *Customer) EntEuserList() {
@@ -411,3 +425,109 @@ func (c *Customer) CuserRuleCreate() {
 		c.Render("private/cuser_rule_create.html", &c.T)
 	}
 }
+
+func (c *Customer) CuserRuleEdit() {
+	defer qu.Catch()
+	id := c.GetString("id")
+	query := bson.M{"_id": qu.StringTOBsonId(id)}
+	data, _ := Mgo.FindOneByField("cuserdepartrule", query, `{}`)
+	(*data)["id"] = qu.BsonIdToSId((*data)["_id"])
+	c.T["data"] = *data
+	c.T["province"] = Province
+	c.T["city"] = ProvinceCitys
+	c.T["district"] = CityDistricts
+	c.T["topTypeArr"] = TopTypeArr
+	c.T["subTypeArr"] = SubTypeArr
+	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) 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) 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": qu.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) 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("cuserdepartrule", _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("tagrule", _id, set)
+	c.ServeJson(map[string]interface{}{
+		"rep": b,
+	})
+}
+

+ 1 - 1
src/web/templates/private/cuser_rule_create.html

@@ -8,7 +8,7 @@
 <script src="/time/js/wui-date.js"></script>
 <div class="content-wrapper">
     <section class="content-header">
-        <h1> 新建规则
+        <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>

+ 1686 - 0
src/web/templates/private/cuser_rule_edit.html

@@ -0,0 +1,1686 @@
+{{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("/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];
+            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": "", 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>

+ 5 - 6
src/web/templates/private/cuser_rule_list.html

@@ -107,10 +107,9 @@
                   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/customer/edit?id='+val+'">编辑</a>'+
-                          '<a class="btn btn-sm btn-danger" onclick="del(\''+s+'\')">删除</a>'+
+                          '<a class="btn btn-sm btn-primary" href="/service/cuser/rule/Edit?id='+val+'">编辑</a>'+
+                          '<a class="btn btn-sm btn-danger" onclick="del(\''+val+'\')">删除</a>'+
                           '</div>';
                       return tmp
                 }},
@@ -134,12 +133,12 @@
             ]
         });
     });
-    function del(s){
+    function del(val){
         showConfirm("确定删除?", function() {
             $.ajax({
-                url:"/service/rule/del",
+                url:"/service/cuser/rule/Del",
                 type:"post",
-                data:{"_id": s.split(",")[0], "s_dataid": s.split(",")[1]},
+                data:{"_id": val},
                 success:function(r){
                   if(r.rep){
                     ttable.ajax.reload();

+ 2 - 15
src/web/templates/private/customer_create.html

@@ -63,7 +63,6 @@
                                             <th></th>
                                             <th>编号</th>
                                             <th>部门名称</th>
-                                            <th>子部门名称</th>
                                             <th>部门联系人</th>
                                             <th>是否启用</th>
                                         </tr>
@@ -98,17 +97,12 @@
                                     <input class="form-control" placeholder="输入部门名称" 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="s_depart_name"/></div>
-                            </div>
-                            <div class="form-group">
-                                <label class="col-sm-3 control-label">部门联系人</label>
+                                <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>
+                                <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>
@@ -169,13 +163,6 @@
                     }, width: "3%"},
                 {"data": null, width: "5%"},
                 {"data": "s_name", width: "20%"},
-                {"data": function (row) {
-                        if (row.s_subname != "") {
-                            return row.s_subname
-                        }else {
-                            return ""
-                        }
-                    }, width: "20%"},
                 {"data": "s_contract", width: "40%"},
                 {"data": "i_isuse", render: function (val, a, row) {
                         tmp = ""

+ 140 - 455
src/web/templates/private/customer_edit.html

@@ -19,16 +19,17 @@
             <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>
-                    <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>
+                    <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>
+                                    <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>
                                 </div>
                                 <div class="box-body">
                                     <div class="form-group">
@@ -52,46 +53,47 @@
                                                    value="{{.T.data.s_salesperson}}" required>
                                         </div>
                                     </div>
-                                    <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) {
-                                                    console.log(state, 'test')
-                                                    if (state) {
-                                                        dataMap["i_push"] = 1
-                                                    }else {
-                                                        dataMap["i_push"] = 0
-                                                    }
-                                                })
-                                            </script>
+                                    <div id="pushDiv">
+                                        <div class="box-header with-border">
+                                            <i class="fa fa-tag"></i>
+                                            <h3 class="box-title">推送设置</h3>
                                         </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="pushSelect">
-                                                    <option value=0 selected>全局模式</option>
-                                                    <option value=1>部门模式</option>
-                                                    <option value=1>便签模式</option>
-                                                    <option value=1>部门+标签模式</option>
-                                                    <option value=1>不去重</option>
-                                                </select>
+                                        <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>
-                                        <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="pushSelect">
-                                                    <option value=0 selected>邮箱</option>
-                                                    <option value=1>接口</option>
-                                                </select>
+                                            <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>
                                     </div>
@@ -110,11 +112,10 @@
                                             <th></th>
                                             <th>编号</th>
                                             <th>部门名称</th>
-                                            <th>子部门名称</th>
                                             <th>部门联系人</th>
                                             <th>修改时间</th>
                                             <th>是否启用</th>
-                                            <th>操作</th>
+                                            <th>功能</th>
                                         </tr>
                                         </thead>
                                     </table>
@@ -126,27 +127,17 @@
                         <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>
+                                <h3 class="box-title">私有标签</h3>
+                                <a class="btn btn-primary btn-sm" style="float: right;margin-top: 7px;margin-right: 10px" href="/service/esuer/tag/edit?cid={{.T.data._id}}"><i class="fa fa-fw fa-file-code-o fa-lg"></i>新建标签</a>
                             </div>
-                            <table id="keywords" class="table table-bordered">
+                            <table id="tagrule" 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>
@@ -177,17 +168,12 @@
                                     <input class="form-control" placeholder="输入部门名称" 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="s_depart_name"/></div>
-                            </div>
-                            <div class="form-group">
-                                <label class="col-sm-3 control-label">部门联系人</label>
+                                <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>
+                                <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>
@@ -207,114 +193,38 @@
         </div>
     </div><!-- /.modal -->
 </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("/customer/list");
     var dataMap = {{.T.data}}
     var departArr = {{.T.depart}}
+    var tagruleArr = []
 
-    var matchTypeMap = {{.T.matchTypeMap}};
-
-    var keyTableChecked = false;        //关键词表格数据是否有选中
-    var keyTableAllChecked = true;      //表单数据是否被全选中
-
-    var setValue = 0;                   // 4: 关键词匹配方式,6:附加词匹配方式
     var selectIndex = [];               //选中的编号
-    var matchCode = [];     //匹配方式code
-    var matchName = [];     //匹配名字
 
     $(document).ready(function () {
-        $('#pushSwitch').bootstrapSwitch({
-            onText: "开启",
-            offText: "关闭",
-        })
-        if (dataMap.i_push && dataMap.i_push == 1) {
-            $('#pushSwitch').bootstrapSwitch('state', true);
-
-        }else {
-            $('#pushSwitch').bootstrapSwitch('state', false);
-        }
         if (dataMap.i_state == 0) {
             $('.tab_2').hide()
-            $('.tab_3').hide()
-        }
-        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"]}">`;
+            $('#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 {
-                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"]}">`;
+                $('#pushTypeSelect').val(1)
             }
         }
-        $("#btnGroupMatch").append(btnMatchHtml1);
-        $("#btnGroupMatch2").append(btnMatchHtml2);
         $('#departTable').DataTable({
             "paging": false,
             "lengthChange": true,
@@ -337,13 +247,6 @@
                     }, width: "3%"},
                 {"data": null, width: "3%"},
                 {"data": "s_name", width: "10%"},
-                {"data": function (row) {
-                        if (row.s_subname == "") {
-                            return ""
-                        }else {
-                            return row.s_subname
-                        }
-                    }, width: "10%"},
                 {"data": function (row) {
                         if (row.s_contract == "") {
                             return ""
@@ -368,16 +271,14 @@
                 {"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' +
-                            '<a class="btn btn-sm btn-info" href="/service/rule/downloadata?s_dataid=' + val + '">导出数据</a>&nbsp&nbsp' +
-                            '<a class="btn btn-sm btn-warning" onclick="archive(\'' + val + '\')">存档</a>' +
+                            '<a class="btn btn-sm btn-primary" href="/service/cuser/rule/list?ids=' + s + '">规则</a>&nbsp&nbsp'
                             '</div>';
                         return tmp
                     }
                 }
             ],
         });
-        $('#keywords').DataTable({
+        $('#tagrule').DataTable({
             "paging": false,
             "lengthChange": false,
             "searching": false,
@@ -392,130 +293,36 @@
                     cell.innerHTML = i + 1;
                 });
             },
+            "data": tagruleArr,
             "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_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")
                     }},
-                {"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
+                {"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 ""
-                    }, width: "5%"},
+                        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/esuer/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
+                    }},
             ],
-            "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-depart').modal("hide");
-        $('#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 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;
@@ -537,175 +344,6 @@
         }
     }
 
-    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 saveCuser() {
         var name = $('#customername').val();
         var contract = $('#customername').val();
@@ -717,6 +355,10 @@
         dataMap.s_name = name
         dataMap.s_customername = name
         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",
@@ -774,7 +416,8 @@
                     data: {"id": tmp[0]._id},
                     success: function (r) {
                         if(r.rep){
-                            showTip("删除成功", 1000)
+                            // showTip("删除成功", 1000)
+                            window.location.reload()
                         }else{
                             showTip("删除失败", 1000);
                         }
@@ -799,7 +442,7 @@
             depart["s_name"] = name;
             depart["s_contract"] = $('#depart_contract').val();
             depart["s_subname"] = $('#s_depart_name').val()
-            depart["i_isuse"] =  $("#isuseSelect").val()
+            depart["i_isuse"] =  $('#isuseSelect').val()
             if (depart_flag == 1) {
                 var index = selectIndex[0] - 1;
                 departArr.splice(index, 1, depart)
@@ -853,4 +496,46 @@
             })
         });
     }
+    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/esuer/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/esuer/tag/del",
+                type: "post",
+                data: {"_id": val},
+                success: function (r) {
+                    if (r.rep) {
+                        window.location.reload()
+                    } else {
+                        alert("删除失败");
+                    }
+                }
+            })
+        });
+    }
 </script>

+ 5 - 5
src/web/templates/private/customer_list.html

@@ -137,12 +137,12 @@
             }
         })
     }
-    function SynEnt() {
+    function SynEnt(val) {
         $.ajax({
-            url:"/service/euser/synchronous",
-            type:"post",
-            data:{"_id": val},
-            success:function(r){
+            url: "/service/euser/synchronous",
+            type: "post",
+            data: {"_id": val},
+            success: function(r){
                 if(r.rep){
                     showTip("同步成功", 1000);
                     ttable.ajax.reload()

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

@@ -0,0 +1,634 @@
+{{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 -->
+    <div class="content">
+        <form class="form-horizontal">
+                <div class="box box-primary">
+                    <div class="box-header with-border">
+                        <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>
+                        <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">
+                                <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": "",
+        "s_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/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_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/esuer/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");
+            $('#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>