Browse Source

no message

Jianghan 5 years ago
parent
commit
2b98188c3c

+ 2 - 2
src/models/rules_es.go → sqlutil/src/sqlmodel/rules_es.go

@@ -1,9 +1,9 @@
-package models
+package sqlmodel
 
 type QueryObjecct struct {
 	Filtered struct {
 		Filter *Filter `json:"filter,omitempty"`
-		Query *Query `json:"query,omitempty"`
+		Query *Query   `json:"query,omitempty"`
 	} `json:"filtered,omitempty"`
 }
 

BIN
src/doc/关键词导入模版.xlsx


BIN
src/doc/标签系统导入模版.xlsx


+ 87 - 2
src/service/customer_service.go

@@ -6,6 +6,8 @@ import (
 	"github.com/go-xweb/xweb"
 	"github.com/lauyoume/gopinyin"
 	"gopkg.in/mgo.v2/bson"
+	"io/ioutil"
+	"net/http"
 	qu "qfw/util"
 	"strings"
 	"time"
@@ -35,9 +37,11 @@ type Customer struct {
 	cuserRuleCreate xweb.Mapper `xweb:"/service/cuser/rule/create"` 		//新建规则
 	cuserRuleEdit 	xweb.Mapper `xweb:"/service/cuser/rule/Edit"`
 	cuserRuleDel 	xweb.Mapper `xweb:"/service/cuser/rule/Del"`
+	cuserRuleSetup  xweb.Mapper `xweb:"/service/euser/rule/setup"`
 	productData      xweb.Mapper `xweb:"/service/cuser/produce"`          //生成预览数据
 	//企业标签
 	euserTagEdit	xweb.Mapper `xweb:"/service/euser/tag/edit"`
+	euserImport		xweb.Mapper `xweb:"/service/esuer/tag/import"`
 	tagSetup		xweb.Mapper `xweb:"/service/euser/tag/setup"`
 	tagDel			xweb.Mapper `xweb:"/service/euser/tag/del"`
 	cuserRuleList	xweb.Mapper `xweb:"/service/tag/ruleList"`			//规则列表	客户
@@ -269,12 +273,52 @@ func (c *Customer) CuserToEuser() {
 	b = Mgo.SaveBulk("euserdepartrule", *ruleMap...)
 
 	//3、调用接口生成appid
-
+	b = GetCustomerAppId(_id, qu.ObjToString((*cuser)["s_name"]))
 
 	c.ServeJson(map[string]interface{}{
 		"rep": b,
 	})
 }
+
+func GetCustomerAppId(id , customer string ) bool {
+	defer qu.Catch()
+	rep := false
+	user, _ := MgoCus.FindOne("user", map[string]interface{}{"username": customer})
+	appid := ""
+	if len(*user) > 0 { //存在,获取appid
+		appid = qu.ObjToString((*user)["appid"])
+	} else { //不存在调接口生成
+		client := &http.Client{}
+		url := CustomerApi + "?username=" + customer
+		req, err := http.NewRequest("POST", url, nil)
+		if err == nil {
+			resp, err := client.Do(req)
+			defer resp.Body.Close()
+			body, err := ioutil.ReadAll(resp.Body)
+			if err == nil {
+				resp := map[string]interface{}{}
+				json.Unmarshal(body, &resp)
+				if qu.ObjToString(resp["msg"]) == "ok" {
+					user, _ := MgoCus.FindOne("user", map[string]interface{}{"username": customer})
+					if len(*user) > 0 {
+						appid = qu.ObjToString((*user)["appid"])
+					}
+				}
+			}
+		} else {
+			fmt.Println("调企业用户接口失败", err)
+		}
+	}
+	if appid != "" { //保存
+		set := map[string]interface{}{
+			"$set": map[string]interface{}{
+				"s_appid": appid,
+			},
+		}
+		rep = Mgo.UpdateById("cuser", id, set)
+	}
+	return rep
+}
 //同步
 func (c *Customer) SynEuser() {
 	defer qu.Catch()
@@ -387,6 +431,7 @@ func (c *Customer) CuserRule() {
 	} else {
 		c.T["did"] = ids[0] //部门id
 		c.T["cid"] = ids[1] //客户id
+		c.T["preview_href"] = PreviewHref
 		c.Render("private/cuser_rule_list.html", &c.T)
 	}
 }
@@ -484,13 +529,30 @@ func (c *Customer) CuserRuleDel() {
 	})
 }
 
+func (c *Customer) CuserRuleSetup()  {
+	defer qu.Catch()
+	if c.Method() == "POST" {
+		_id := c.GetString("_id")
+		i_isuse, _ := c.GetInteger("i_isuse")
+		set := bson.M{
+			"$set": bson.M{
+				"i_isuse": i_isuse,
+			},
+		}
+		b := Mgo.UpdateById("cuserdepartrule", _id, set)
+		c.ServeJson(map[string]interface{}{
+			"rep": b,
+		})
+	}
+}
+
 func (c *Customer) ProductData() {
 	defer qu.Catch()
 	if c.Method() == "POST" {
 		rep := false
 		id := c.GetString("id")
 		tag, _ := Mgo.FindById("cuserdepartrule", id, `{}`)
-		err, count := UtilEsFind(*tag)
+		err, count := UtilEsFind1(*tag)
 		if err == nil {
 			rep = true
 		}
@@ -541,6 +603,29 @@ func (c *Customer) EuserTagEdit() {
 	}
 }
 
+func (c *Customer) EuserImport() {
+	defer qu.Catch()
+	if c.Method() == "POST" {
+		mf, _, err := c.GetFile("xlsx")
+		if err == nil {
+			binary, err := ioutil.ReadAll(mf)
+			if err == nil {
+				rdata, err := Parsxlsx1(binary)
+				if err == nil {
+					c.ServeJson(map[string]interface{}{
+						"rdata": rdata,
+						"rep":   true,
+					})
+					return
+				}
+			}
+		}
+		c.ServeJson(map[string]interface{}{
+			"rep": false,
+		})
+	}
+}
+
 func (c *Customer) TagSetup() {
 	defer qu.Catch()
 	if c.Method() == "POST" {

+ 4 - 3
src/service/private_service.go

@@ -34,19 +34,20 @@ type Private struct {
 }
 
 func (f *Private) Keydatademo(world string) {
-	log.Println(world) //RVpIW1JNBAEHAwwXCF8dDEoC
 	tmp := make(map[string]interface{})
 	destr := qu.SE.DecodeString(world)
 	typeStr := f.GetString("type")
 
-	log.Println(destr)
+	qu.Debug(destr)
 	if len(destr) > 10 {
 		ctime := destr[:10]
 		ctimeint := qu.Int64All(ctime)
 		if time.Now().Sub(time.Unix(ctimeint, 0)).Hours()/24 < Subday {
 			var tagfield *map[string]interface{}
 			if typeStr == "private" {
-				tagfield, _ = Mgo.FindOneByField("tags", bson.M{"s_dataid": world}, bson.M{"i_extfieldstype": 1, "i_estotal": 1, "s_customer": 1})
+				tagfield, _ = Mgo.FindOneByField("cuserdepartrule", bson.M{"s_dataid": world}, bson.M{"i_extfieldstype": 1, "i_estotal": 1, "s_userid": 1})
+				customer, _ := Mgo.FindById("cuser", qu.ObjToString((*tagfield)["s_userid"]), bson.M{"s_name": 1})
+				(*tagfield)["s_customer"] = (*customer)["s_name"]
 			}else {
 				tagfield, _ = Mgo.FindOneByField("tags_common", bson.M{"s_dataid": world}, bson.M{"i_extfieldstype": 1, "i_estotal": 1, "s_customer": 1})
 			}

+ 64 - 0
src/util/parsxlsx.go

@@ -21,6 +21,8 @@ const (
 	Globaladdkey   = "s_globaladdkey"   // 全局附加词
 	Globalnotkey   = "s_globalnotkey"   //全局排除词
 	Globalclearkey = "s_globalclearkey" //全局排除词
+
+	Tagname			= "s_tagname"		//标签的关键词规则名称
 )
 
 //通用标签相关字段
@@ -97,6 +99,33 @@ func Parsxlsx(filebyte []byte) (map[string]interface{}, error) {
 	return rdata, nil
 }
 
+/**
+ * 导入关键词表格
+ */
+func Parsxlsx1(filebyte []byte) (map[string]interface{}, error) {
+	rdata := make(map[string]interface{})
+	tmps := make([]map[string]string, 0)
+	file, err := xlsx.OpenBinary(filebyte)
+	if err != nil {
+		return rdata, err
+	}
+	for _, v := range file.Sheets {
+		for ii, vv := range v.Rows {
+			rule := make(map[string]string)
+			if ii == 0 {
+				//第一行跳过
+				continue
+			}
+			for iii, vvv := range vv.Cells {
+				writeMap1(rule, iii, vvv.Value)
+			}
+			tmps = append(tmps, rule)
+		}
+	}
+	rdata["o_rules"] = tmps
+	return rdata, nil
+}
+
 func writeMap(tmp map[string]string, i int, v string, addArr, notArr, clearkeyArr []string) ([]string, []string, []string) {
 	switch i {
 	case 0:
@@ -168,6 +197,41 @@ func writeMap(tmp map[string]string, i int, v string, addArr, notArr, clearkeyAr
 	return addArr, notArr, clearkeyArr
 }
 
+func writeMap1(tmp map[string]string, i int, v string) {
+	switch i {
+	case 0:
+		if v != "" {
+			//空格
+			v = strings.TrimSpace(v)
+			//中文逗号
+			v = strings.ReplaceAll(v, ",", ",")
+			tmp[Matchkey] = v
+		}
+		break
+	case 1:
+		if v != "" {
+			v = strings.TrimSpace(v)
+			v = strings.ReplaceAll(v, ",", ",")
+			tmp[Addkey] = v
+		}
+		break
+	case 2:
+		if v != "" {
+			v = strings.TrimSpace(v)
+			v = strings.ReplaceAll(v, ",", ",")
+			tmp[Notkey] = v
+		}
+		break
+	case 3:
+		if v != "" {
+			v = strings.TrimSpace(v)
+			v = strings.ReplaceAll(v, ",", ",")
+			tmp[Tagname] = v
+		}
+
+	}
+}
+
 var bzpath, gjpath, rpath string = "web/res/标准字段包%d.xlsx", "web/res/高级字段包%d.xlsx", "web/res/标签导出%d.xlsx"
 
 func ResponseXlsx_Data(id string) string {

+ 199 - 65
src/util/utiltag.go

@@ -10,6 +10,7 @@ import (
 	"regexp"
 	"strings"
 	"time"
+	sql "sqlmodel"
 
 	"gopkg.in/mgo.v2/bson"
 )
@@ -190,6 +191,139 @@ func UtilEsFind(tags map[string]interface{}) (error, int64) {
 		return err, 0
 	}
 }
+//客户规则
+func UtilEsFind1(tags map[string]interface{}) (error, int64) {
+	defer util.Catch()
+	sdataid := util.ObjToString(tags["s_dataid"])
+	esquery := util.ObjToString(tags["s_esquery"])
+	if len(esquery) < 1 || len(sdataid) < 1 {
+		return errors.New("s_esquery or s_dataid no found"), 0
+	}
+	i_maxnum := util.Int64All(tags["i_maxnum"])
+	if i_maxnum <= 0 {
+		i_maxnum = 100
+	}
+	maths := make([]map[string]string, 0)
+	if orules, ok := tags["o_rules"].([]interface{}); ok {
+		for _, v := range orules {
+			orule, _ := v.(map[string]interface{})
+			maths = append(maths, map[string]string{
+				"s_matchkey": util.ObjToString(orule["s_matchkey"]),
+				"s_keymatch": util.ObjToString(orule["s_keymatch"]),
+			})
+		}
+	} else if orules, ok := tags["o_rules"].([]map[string]interface{}); ok {
+		for _, v := range orules {
+			maths = append(maths, map[string]string{
+				"s_matchkey": util.ObjToString(v["s_matchkey"]),
+				"s_keymatch": util.ObjToString(v["s_keymatch"]),
+			})
+		}
+	} else {
+		return errors.New("o_rules no found"), 0
+	}
+	client := elastic.GetEsConn()
+	defer elastic.DestoryEsConn(client)
+	esquery = esquery[:len(esquery)-1] + `,"size":` + fmt.Sprintf("%d", i_maxnum) + `}`
+	searchResult, err := client.Search(EsIndex).Source(esquery).Do()
+	if err == nil && searchResult.Hits != nil {
+		datas := make([]map[string]interface{}, 0)
+		util.Debug("es查询到的数量:", searchResult.Hits.TotalHits)
+		for _, v := range searchResult.Hits.Hits {
+			item := make(map[string]interface{})
+			if json.Unmarshal(*v.Source, &item) == nil {
+				delete(item,"_id")
+				item["info_id"] = v.Id
+				item["s_dataid"] = sdataid
+				item["s_jyhref"] = fmt.Sprintf(Url, util.CommonEncodeArticle("content", v.Id))
+				item["i_createtime"] = time.Now().Unix()
+				var d *DFA = &DFA{}
+				var analyKeys []string		 //找到的关键词
+				var matchType []string		 //匹配方式
+				for _, math := range maths {
+					fileds := strsToArr(math["s_keymatch"], "field")
+					d.AddWord(strings.Split(math["s_matchkey"], ",")...)
+					mkMap := make(map[string]interface{})
+					tmpMap := make(map[string]interface{})
+					for _, mk := range strings.Split(math["s_matchkey"], ",") {
+						if strings.Contains(mk, "&&") {
+							arr := strings.Split(mk, "&&")
+							for _, s := range arr{
+								if s != "" {
+									tmpMap[s] = mk
+									if b, _ := regexp.MatchString("[A-Z]", s); b {
+										mkMap[strings.ToLower(s)] = s
+										d.AddWord(strings.ToLower(s))
+									}else {
+										d.AddWord(s)
+									}
+								}
+							}
+						}else {
+							if b, _ := regexp.MatchString("[A-Z]", mk); b {
+								mkMap[strings.ToLower(mk)] = mk
+								d.AddWord(strings.ToLower(mk))
+							}else {
+								d.AddWord(mk)
+							}
+						}
+					}
+					for _, filed := range fileds {
+						filed1 := strings.ToLower(util.ObjToString(item[filed]))
+						ddds := d.Analy(filed1)
+						analyKeys = append(analyKeys, ddds...)
+					}
+					if len(analyKeys) > 0 {
+						matchType = append(matchType, strings.Join(fileds, ","))
+						for k, v := range analyKeys{
+							if tmpMap[v] != "" && tmpMap[v] != nil {
+								analyKeys[k] = util.ObjToString(tmpMap[v])
+							}
+						}
+						for _, v1 := range analyKeys{
+							if mkMap[v1] != "" && mkMap[v1] != nil {
+								analyKeys = deleteSlice(analyKeys, v1)
+								analyKeys = append(analyKeys, util.ObjToString(mkMap[v1]))
+							}
+						}
+					}
+					d.Clear()
+				}
+				//去重
+				ssavekey := make(map[string]bool)
+				for _, v := range analyKeys {
+					ssavekey[v] = true
+				}
+				ssavekeys := []string{}
+				for k := range ssavekey {
+					ssavekeys = append(ssavekeys, k)
+				}
+				item["s_matchkey"] = strings.Join(ssavekeys, ",")
+				item["s_matchtype"] = strings.Join(matchType, ",")
+				findwinner := strings.TrimSpace(util.ObjToString(item["winner"]))
+				if findwinner != "" {
+					finddata, _ := MgoEn.FindOne(MgoEnC, bson.M{"company_name": findwinner})
+					if finddata != nil && (*finddata) != nil {
+						item["legal_person"] = util.ObjToString((*finddata)["legal_person"])
+						item["company_email"] = util.ObjToString((*finddata)["company_email"])
+						item["company_phone"] = util.ObjToString((*finddata)["company_phone"])
+						item["qyk"] = finddata
+					}
+				}
+				datas = append(datas, item)
+			}
+		}
+		Mgo.Update("cuser", bson.M{"_id": tags["_id"]}, bson.M{
+			"$set": bson.M{
+				"i_estotal": searchResult.Hits.TotalHits,
+			}}, false, false)
+		count := searchResult.Hits.TotalHits
+		return UtilEsSaveData(sdataid, &datas), count
+	} else {
+		util.Debug(err)
+		return err, 0
+	}
+}
 
 func Utiltags(tag map[string]interface{}) string {
 	defer util.Catch()
@@ -199,14 +333,14 @@ func Utiltags(tag map[string]interface{}) string {
 	if err != nil {
 		return "json err:" + err.Error()
 	}
-	QueryObjecct := models.QueryObjecct{}
-	ffBoolObject := models.BoolObject{}
-	adsBoolObect := models.NewEsObject{}
+	QueryObjecct := sql.QueryObjecct{}
+	ffBoolObject := sql.BoolObject{}
+	adsBoolObect := sql.NewEsObject{}
 	if tab.Sarea != "" {
-		adsBoolObect.Bool.Should = append(adsBoolObect.Bool.Should, models.AreaCityDistrictMust{AreaCityDistrict: &models.AreaCityDistrict{Area: strings.Split(tab.Sarea, ",")}})
+		adsBoolObect.Bool.Should = append(adsBoolObect.Bool.Should, sql.AreaCityDistrictMust{AreaCityDistrict: &sql.AreaCityDistrict{Area: strings.Split(tab.Sarea, ",")}})
 	}
 	if tab.Scity != "" {
-		adsBoolObect.Bool.Should = append(adsBoolObect.Bool.Should, models.AreaCityDistrictMust{AreaCityDistrict: &models.AreaCityDistrict{City: strings.Split(tab.Scity, ",")}})
+		adsBoolObect.Bool.Should = append(adsBoolObect.Bool.Should, sql.AreaCityDistrictMust{AreaCityDistrict: &sql.AreaCityDistrict{City: strings.Split(tab.Scity, ",")}})
 	}
 	if tab.Sdistrict != "" {
 		//城市——区县
@@ -215,80 +349,80 @@ func Utiltags(tag map[string]interface{}) string {
 		for _, v := range cityds{
 			ds = append(ds, strings.Split(v, "-")[1])
 		}
-		adsBoolObect.Bool.Should = append(adsBoolObect.Bool.Should, models.AreaCityDistrictMust{AreaCityDistrict: &models.AreaCityDistrict{District: ds}})
+		adsBoolObect.Bool.Should = append(adsBoolObect.Bool.Should, sql.AreaCityDistrictMust{AreaCityDistrict: &sql.AreaCityDistrict{District: ds}})
 	}
 	if len(adsBoolObect.Bool.Should) > 0 {
 		ffBoolObject.Must = append(ffBoolObject.Must, adsBoolObect)
 	}
 	if tab.Stoptype != "" || tab.Ssubtype != "" {
 		if len(tab.Stoptype) > 0 {
-			toptypeSubtype := models.ToptypeSubtype{}
+			toptypeSubtype := sql.ToptypeSubtype{}
 			toptypeSubtype.Toptype = strings.Split(tab.Stoptype, ",")
-			ffBoolObject.Must = append(ffBoolObject.Must, models.ToptypeSubtypeMust{&toptypeSubtype})
+			ffBoolObject.Must = append(ffBoolObject.Must, sql.ToptypeSubtypeMust{&toptypeSubtype})
 		}
 		if len(tab.Ssubtype) > 0 {
-			toptypeSubtype := models.ToptypeSubtype{}
+			toptypeSubtype := sql.ToptypeSubtype{}
 			toptypeSubtype.Subtype = strings.Split(tab.Ssubtype, ",")
-			ffBoolObject.Must = append(ffBoolObject.Must, models.ToptypeSubtypeMust{&toptypeSubtype})
+			ffBoolObject.Must = append(ffBoolObject.Must, sql.ToptypeSubtypeMust{&toptypeSubtype})
 		}
 	}
 	if tab.Istarttime > 0 && tab.Iendtime > 0 {
-		ffBoolObject.Must = append(ffBoolObject.Must, models.PublishtimeMust{PublishtimeObject: &models.PublishtimeObject{Publishtime: &models.Publishtime{
+		ffBoolObject.Must = append(ffBoolObject.Must, sql.PublishtimeMust{PublishtimeObject: &sql.PublishtimeObject{Publishtime: &sql.Publishtime{
 			Gte: tab.Istarttime,
 			Lt:  tab.Iendtime,
 		}}})
 	}else if tab.Istarttime > 0 {
-		ffBoolObject.Must = append(ffBoolObject.Must, models.PublishtimeMust{PublishtimeObject: &models.PublishtimeObject{Publishtime1: &models.Publishtime1{
+		ffBoolObject.Must = append(ffBoolObject.Must, sql.PublishtimeMust{PublishtimeObject: &sql.PublishtimeObject{Publishtime1: &sql.Publishtime1{
 			Gte: tab.Istarttime,
 		}}})
 	}else if tab.Iendtime > 0 {
-		ffBoolObject.Must = append(ffBoolObject.Must, models.PublishtimeMust{PublishtimeObject: &models.PublishtimeObject{Publishtime2: &models.Publishtime2{
+		ffBoolObject.Must = append(ffBoolObject.Must, sql.PublishtimeMust{PublishtimeObject: &sql.PublishtimeObject{Publishtime2: &sql.Publishtime2{
 			Lt: tab.Iendtime,
 		}}})
 	}
 	if tab.Sbudget != "" {
 		if strings.Contains(tab.Sbudget, "大于") && strings.Contains(tab.Sbudget, "小于") {
 			arr := strings.Split(tab.Sbudget, ",")
-			limit := &models.BudgetOrBidamount{
+			limit := &sql.BudgetOrBidamount{
 				Gte: util.Float64All(strings.Replace(arr[0], "大于", "", -1)),
 				Lt: util.Float64All(strings.Replace(arr[1], "小于", "", -1)),
 			}
-			ffBoolObject.Must = append(ffBoolObject.Must, models.BudgetMust{BudgetObj: &models.BudgetObj{Budget: limit}})
+			ffBoolObject.Must = append(ffBoolObject.Must, sql.BudgetMust{BudgetObj: &sql.BudgetObj{Budget: limit}})
 		}else if strings.Contains(tab.Sbudget, "大于") {
-			limit := &models.BudgetOrBidamount{
+			limit := &sql.BudgetOrBidamount{
 				Gte: util.Float64All(strings.Replace(tab.Sbudget, "大于", "", -1)),
 			}
-			ffBoolObject.Must = append(ffBoolObject.Must, models.BudgetMust{BudgetObj: &models.BudgetObj{Budget: limit}})
+			ffBoolObject.Must = append(ffBoolObject.Must, sql.BudgetMust{BudgetObj: &sql.BudgetObj{Budget: limit}})
 		}else if strings.Contains(tab.Sbudget, "小于") {
-			limit := &models.BudgetOrBidamount{
+			limit := &sql.BudgetOrBidamount{
 				Lt: util.Float64All(strings.Replace(tab.Sbudget, "小于", "", -1)),
 			}
-			ffBoolObject.Must = append(ffBoolObject.Must, models.BudgetMust{BudgetObj: &models.BudgetObj{Budget: limit}})
+			ffBoolObject.Must = append(ffBoolObject.Must, sql.BudgetMust{BudgetObj: &sql.BudgetObj{Budget: limit}})
 		}
 	}
 	if tab.Sbidamount != "" {
 		if strings.Contains(tab.Sbidamount, "大于") && strings.Contains(tab.Sbidamount, "小于") {
 			arr := strings.Split(tab.Sbidamount, ",")
-			limit := &models.BudgetOrBidamount{
+			limit := &sql.BudgetOrBidamount{
 				Gte: util.Float64All(strings.Replace(arr[0], "大于", "", -1)),
 				Lt: util.Float64All(strings.Replace(arr[1], "小于", "", -1)),
 			}
-			ffBoolObject.Must = append(ffBoolObject.Must, models.BidamountMust{BidamountObj: &models.BidamountObj{Bidamount: limit}})
+			ffBoolObject.Must = append(ffBoolObject.Must, sql.BidamountMust{BidamountObj: &sql.BidamountObj{Bidamount: limit}})
 		}else if strings.Contains(tab.Sbidamount, "大于") {
-			limit := &models.BudgetOrBidamount{
+			limit := &sql.BudgetOrBidamount{
 				Gte: util.Float64All(strings.Replace(tab.Sbidamount, "大于", "", -1)),
 			}
-			ffBoolObject.Must = append(ffBoolObject.Must, models.BidamountMust{BidamountObj: &models.BidamountObj{Bidamount: limit}})
+			ffBoolObject.Must = append(ffBoolObject.Must, sql.BidamountMust{BidamountObj: &sql.BidamountObj{Bidamount: limit}})
 		}else if strings.Contains(tab.Sbidamount, "小于") {
-			limit := &models.BudgetOrBidamount{
+			limit := &sql.BudgetOrBidamount{
 				Lt: util.Float64All(strings.Replace(tab.Sbidamount, "小于", "", -1)),
 			}
-			ffBoolObject.Must = append(ffBoolObject.Must, models.BidamountMust{BidamountObj: &models.BidamountObj{Bidamount: limit}})
+			ffBoolObject.Must = append(ffBoolObject.Must, sql.BidamountMust{BidamountObj: &sql.BidamountObj{Bidamount: limit}})
 		}
 	}
 	if tab.Sglobalbuyerclass != "" {
 		if len(tab.Sglobalbuyerclass) > 0 {
-			buyerclass := models.BuyerclassObject{
+			buyerclass := sql.BuyerclassObject{
 				Terms: struct {
 					Buyerclass []string `json:"buyerclass,omitempty"`
 				}{
@@ -300,21 +434,21 @@ func Utiltags(tag map[string]interface{}) string {
 	}
 	if tab.Sglobaltopscopeclass != "" || tab.Sglobalsubscopeclass != "" {
 		if len(tab.Sglobaltopscopeclass) > 0 {
-			topScopeclass := models.Scopeclass{}
+			topScopeclass := sql.Scopeclass{}
 			topScopeclass.Globaltopscopeclass = strings.Split(tab.Sglobaltopscopeclass, ",")
-			ffBoolObject.Must = append(ffBoolObject.Must, models.ScopeclassMust{&topScopeclass})
+			ffBoolObject.Must = append(ffBoolObject.Must, sql.ScopeclassMust{&topScopeclass})
 		}else if len(tab.Sglobalsubscopeclass) > 0 {
-			subScopeclass := models.Scopeclass{}
+			subScopeclass := sql.Scopeclass{}
 			subScopeclass.Globalsubscopeclass = strings.Split(tab.Sglobalsubscopeclass, ",")
-			ffBoolObject.Must = append(ffBoolObject.Must, models.ScopeclassMust{&subScopeclass})
+			ffBoolObject.Must = append(ffBoolObject.Must, sql.ScopeclassMust{&subScopeclass})
 		}
 	}
-	fqBoolObject := models.BoolObject{}
+	fqBoolObject := sql.BoolObject{}
 	if len(tab.Sexistfields) > 0 {
 		tmpsfields := strings.Split(tab.Sexistfields, ",")
 		for _, v := range tmpsfields {
-			fqBoolObject.MustNot = append(fqBoolObject.MustNot, models.ExistfieldsObjectMust{
-				ExistfieldsObject: &models.ExistfieldsObject{Filter: struct {
+			fqBoolObject.MustNot = append(fqBoolObject.MustNot, sql.ExistfieldsObjectMust{
+				ExistfieldsObject: &sql.ExistfieldsObject{Filter: struct {
 					Missing struct {
 						Field string `json:"field,omitempty"`
 					} `json:"missing,omitempty"`
@@ -327,7 +461,7 @@ func Utiltags(tag map[string]interface{}) string {
 			})
 		}
 	}
-	newEsObject := models.NewEsObject{}
+	newEsObject := sql.NewEsObject{}
 	if tab.Sglobaladdkey != "" && tab.Sglobaladdkeymatch != "" {
 		if tmps := strsToArr(tab.Sglobaladdkeymatch, "str"); tmps != nil {
 			newEsObject  = method1(newEsObject, tab.Sglobaladdkey, tab.Sglobaladdkeymatch, tmps)
@@ -337,7 +471,7 @@ func Utiltags(tag map[string]interface{}) string {
 		fqBoolObject.Must = append(fqBoolObject.Must, newEsObject)
 	}
 
-	nots := models.NewEsObject{}
+	nots := sql.NewEsObject{}
 	if tab.Sglobalnotkey != "" && tab.Sglobalnotkeymatch != "" {
 		if tmps := strsToArr(tab.Sglobalnotkeymatch, "str"); tmps != nil {
 			nots = method1(nots, tab.Sglobalnotkey, tab.Sglobalnotkeymatch, tmps)
@@ -346,18 +480,18 @@ func Utiltags(tag map[string]interface{}) string {
 	if len(nots.Bool.Should) > 0 {
 		fqBoolObject.MustNot = append(fqBoolObject.MustNot, nots)
 	}
-	torules := models.BoolObject{}
+	torules := sql.BoolObject{}
 	for _, v := range tab.Orules {
-		tmpses := models.NewEsObject{}
+		tmpses := sql.NewEsObject{}
 		if skeymatchs := strsToArr(v.Skeymatch, "str"); skeymatchs != nil {
-			tmpnewEsObject := models.NewEsObject{}
+			tmpnewEsObject := sql.NewEsObject{}
 			tmpnewEsObject = method1(tmpnewEsObject, v.Smatchkey, v.Skeymatch, skeymatchs)
 			if len(tmpnewEsObject.Bool.Should) > 0 || len(tmpnewEsObject.Bool.Must) > 0 || len(tmpnewEsObject.Bool.MustNot) > 0 {
 				tmpses.Bool.Must = append(tmpses.Bool.Must, tmpnewEsObject)
 			}
 		}
 		if saddkeymatchs := strsToArr(v.Saddkeymatch, "str"); saddkeymatchs != nil {
-			addkeyarr := models.NewEsObject{}
+			addkeyarr := sql.NewEsObject{}
 			addkeyarr = method1(addkeyarr, v.Saddkey, v.Saddkeymatch, saddkeymatchs)
 			if len(addkeyarr.Bool.Should) > 0 {
 				tmpses.Bool.Must = append(tmpses.Bool.Must, addkeyarr)
@@ -368,7 +502,7 @@ func Utiltags(tag map[string]interface{}) string {
 		}
 		if len(v.Stopscopeclass) > 0 {
 			sArr := strings.Split(v.Stopscopeclass, ",")
-			tmpses.Bool.Must = append(tmpses.Bool.Must, models.TopscopeclassObject{
+			tmpses.Bool.Must = append(tmpses.Bool.Must, sql.TopscopeclassObject{
 				Terms: struct {
 					Topscopeclass []string `json:"s_topscopeclass,omitempty"`
 				}{
@@ -376,7 +510,7 @@ func Utiltags(tag map[string]interface{}) string {
 				},
 			})
 		}else if len(v.Ssubscopeclass) > 0 {
-			tmpses.Bool.Must = append(tmpses.Bool.Must, models.SubscopeclassObject{
+			tmpses.Bool.Must = append(tmpses.Bool.Must, sql.SubscopeclassObject{
 				Terms: struct {
 					Subscopeclass []string `json:"s_subscopeclass,omitempty"`
 				}{
@@ -385,7 +519,7 @@ func Utiltags(tag map[string]interface{}) string {
 			})
 		}
 		if len(v.Sbuyerclass) > 0 {
-			tmpses.Bool.Must = append(tmpses.Bool.Must, models.BuyerclassObject{
+			tmpses.Bool.Must = append(tmpses.Bool.Must, sql.BuyerclassObject{
 				Terms: struct {
 					Buyerclass []string `json:"buyerclass,omitempty"`
 				}{
@@ -396,11 +530,11 @@ func Utiltags(tag map[string]interface{}) string {
 		torules.Should = append(torules.Should, tmpses)
 	}
 	if len(ffBoolObject.Must) > 0 || len(ffBoolObject.MustNot) > 0 || len(ffBoolObject.Should) > 0 {
-		QueryObjecct.Filtered.Filter = &models.Filter{}
+		QueryObjecct.Filtered.Filter = &sql.Filter{}
 		QueryObjecct.Filtered.Filter.Bool = &ffBoolObject
 	}
 	if len(fqBoolObject.Must) > 0 || len(fqBoolObject.MustNot) > 0 || len(fqBoolObject.Should) > 0 {
-		QueryObjecct.Filtered.Query = &models.Query{}
+		QueryObjecct.Filtered.Query = &sql.Query{}
 		QueryObjecct.Filtered.Query.Bool = &fqBoolObject
 		if len(torules.Should) > 0 {
 			QueryObjecct.Filtered.Query.Bool.Must = append(QueryObjecct.Filtered.Query.Bool.Must, map[string]interface{}{
@@ -409,7 +543,7 @@ func Utiltags(tag map[string]interface{}) string {
 		}
 	}else if len(torules.Should) > 0 {
 		if QueryObjecct.Filtered.Query == nil{
-			QueryObjecct.Filtered.Query = &models.Query{}
+			QueryObjecct.Filtered.Query = &sql.Query{}
 			QueryObjecct.Filtered.Query.Bool = &fqBoolObject
 		}
 		QueryObjecct.Filtered.Query.Bool.Must = append(QueryObjecct.Filtered.Query.Bool.Must, map[string]interface{}{
@@ -486,7 +620,7 @@ func init() {
 	EsType = util.ObjToString(Sysconfig["elasticsearch_type"])
 }
 
-func method1(newEsObject models.NewEsObject, keyword, keymatch string, tmps []string) models.NewEsObject {
+func method1(newEsObject sql.NewEsObject, keyword, keymatch string, tmps []string) sql.NewEsObject {
 	for _, vv := range strings.Split(keyword, ",") {
 		if vv == "" {
 			continue
@@ -500,24 +634,24 @@ func method1(newEsObject models.NewEsObject, keyword, keymatch string, tmps []st
 				strs = ".*" + vv + ".*"
 			}
 			if tmps[0] == "buyer" {
-				newEsObject.Bool.Should = append(newEsObject.Bool.Should, models.Regular{
-					Regexp1: &models.Regular_Buyer{Buyer: strs},
+				newEsObject.Bool.Should = append(newEsObject.Bool.Should, sql.Regular{
+					Regexp1: &sql.Regular_Buyer{Buyer: strs},
 				})
 			}else if tmps[0] == "s_winner" {
-				newEsObject.Bool.Should = append(newEsObject.Bool.Should, models.Regular{
-					Regexp2: &models.Regular_winner{Winner: strs},
+				newEsObject.Bool.Should = append(newEsObject.Bool.Should, sql.Regular{
+					Regexp2: &sql.Regular_winner{Winner: strs},
 				})
 			}
 		}else {
 			addkeylines := strings.Split(vv, "&&")
 			if len(addkeylines) > 1 {
-				addkeyline := models.NewEsObject{}
+				addkeyline := sql.NewEsObject{}
 				for _, vvv := range addkeylines {
 					if vvv == "" {
 						continue
 					}
-					addkeyline.Bool.Must = append(addkeyline.Bool.Must, models.ShouldObj{
-						MultiMatch: &models.MultiMatch{
+					addkeyline.Bool.Must = append(addkeyline.Bool.Must, sql.ShouldObj{
+						MultiMatch: &sql.MultiMatch{
 							Query:  vvv,
 							Type:   MultiMatchType,
 							Fields: tmps,
@@ -528,8 +662,8 @@ func method1(newEsObject models.NewEsObject, keyword, keymatch string, tmps []st
 					newEsObject.Bool.Should = append(newEsObject.Bool.Should, addkeyline)
 				}
 			} else {
-				newEsObject.Bool.Should = append(newEsObject.Bool.Should, models.ShouldObj{
-					MultiMatch: &models.MultiMatch{
+				newEsObject.Bool.Should = append(newEsObject.Bool.Should, sql.ShouldObj{
+					MultiMatch: &sql.MultiMatch{
 						Query:  vv,
 						Type:   MultiMatchType,
 						Fields: tmps,
@@ -541,7 +675,7 @@ func method1(newEsObject models.NewEsObject, keyword, keymatch string, tmps []st
 	return newEsObject
 }
 
-func method2(newEsObject models.NewEsObject, keyword, keymatch string, tmps []string) models.NewEsObject {
+func method2(newEsObject sql.NewEsObject, keyword, keymatch string, tmps []string) sql.NewEsObject {
 	for _, vv := range strings.Split(keyword, ",") {
 		if vv == "" {
 			continue
@@ -555,24 +689,24 @@ func method2(newEsObject models.NewEsObject, keyword, keymatch string, tmps []st
 				strs = ".*" + vv + ".*"
 			}
 			if tmps[0] == "buyer" {
-				newEsObject.Bool.MustNot = append(newEsObject.Bool.MustNot, models.Regular{
-					Regexp1: &models.Regular_Buyer{Buyer: strs},
+				newEsObject.Bool.MustNot = append(newEsObject.Bool.MustNot, sql.Regular{
+					Regexp1: &sql.Regular_Buyer{Buyer: strs},
 				})
 			}else if tmps[0] == "s_winner" {
-				newEsObject.Bool.MustNot = append(newEsObject.Bool.MustNot, models.Regular{
-					Regexp2: &models.Regular_winner{Winner: strs},
+				newEsObject.Bool.MustNot = append(newEsObject.Bool.MustNot, sql.Regular{
+					Regexp2: &sql.Regular_winner{Winner: strs},
 				})
 			}
 		}else {
 			addkeylines := strings.Split(vv, "&&")
 			if len(addkeylines) > 1 {
-				addkeyline := models.NewEsObject{}
+				addkeyline := sql.NewEsObject{}
 				for _, vvv := range addkeylines {
 					if vvv == "" {
 						continue
 					}
-					addkeyline.Bool.Must = append(addkeyline.Bool.Must, models.ShouldObj{
-						MultiMatch: &models.MultiMatch{
+					addkeyline.Bool.Must = append(addkeyline.Bool.Must, sql.ShouldObj{
+						MultiMatch: &sql.MultiMatch{
 							Query:  vvv,
 							Type:   MultiMatchType,
 							Fields: tmps,
@@ -583,8 +717,8 @@ func method2(newEsObject models.NewEsObject, keyword, keymatch string, tmps []st
 					newEsObject.Bool.MustNot = append(newEsObject.Bool.MustNot, addkeyline)
 				}
 			} else {
-				newEsObject.Bool.MustNot = append(newEsObject.Bool.MustNot, models.ShouldObj{
-					MultiMatch: &models.MultiMatch{
+				newEsObject.Bool.MustNot = append(newEsObject.Bool.MustNot, sql.ShouldObj{
+					MultiMatch: &sql.MultiMatch{
 						Query:  vv,
 						Type:   MultiMatchType,
 						Fields: tmps,

+ 62 - 47
src/web/templates/private/common_rule_create.html

@@ -1117,39 +1117,44 @@
                 },
                 "columns": [
                     {"data": null, width: "2%"},
-                    {"data": function(row) {
+                    {"data": function (row) {
                             if (row.s_matchkey) {
                                 return row.s_matchkey
-                            }else {
+                            } else {
                                 return ""
                             }
                         }, width: "8%"},
-                    {"data": function(row) {
+                    {"data": function (row) {
                             if (row.area) {
                                 return row.area
-                            }else {
+                            } else {
                                 return ""
                             }
                         }, width: "4%"},
-                    {"data": function(row) {
+                    {"data": function (row) {
                             if (row.city) {
                                 return row.city
-                            }else {
+                            } else {
                                 return ""
                             }
                         }, width: "4%"},
                     {"data": function (row) {
                             if (row.s_jyhref) {
-                                tmp = '<a class="" target="_blank" href='+row.s_jyhref+'>'+row.title+'</a>';
+                                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 {
+                            } else {
                                 return row.title
                             }
                         }, width: "5%"},
-                    {"data": function(row) {
+                    {"data": function (row) {
                             if (row.subtype) {
                                 return row.subtype
-                            }else {
+                            } else {
                                 return ""
                             }
                         }, width: "4%"},
@@ -1157,24 +1162,32 @@
                             var str = com.trimStr(row.detail);
                             if (str.length > 14) {
                                 return str.substring(0, 14) + "..."
-                            }else {
+                            } else {
                                 return str
                             }
                         }, width: "5%"},
-                    {"data": function(row) {
+                    {"data": function (row) {
                             var dt = new Date();
-                            dt.setTime(parseInt(row.publishtime)*1000);
+                            dt.setTime(parseInt(row.publishtime) * 1000);
                             return dt.format("yyyy-MM-dd")
                         }, width: "4%"},
                     {"data": function (row) {
-                            if (row.href != undefined) {
+                            if (row.href) {
                                 var shref = row.href;
-                                tmp = '<a class="" target="_blank" href='+shref+'>公告地址</a>';
+                                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) {
@@ -1184,39 +1197,32 @@
                                 }
                             }
                             return ""
-                        }, width: "5%"},
-                    {"data": "projectname", width: "5%"},
-                    {"data": function (row) {
-                            if (row.projectscope) {
-                                return row.projectscope
-                            }
-                            return ""
                         }, width: "3%"},
                     {"data": function (row) {
-                            if (row.budget) {
+                            if (row.budget == undefined) {
                                 return ""
-                            }else {
+                            } else {
                                 return row.budget
                             }
                         }, width: "3%"},
                     {"data": function (row) {
-                            if (row.bidamount) {
+                            if (row.bidamount == undefined) {
                                 return ""
-                            }else {
+                            } else {
                                 return row.bidamount
                             }
                         }, width: "3%"},
                     {"data": "bidopentime", width: "3%", render: function (val) {
                             if (val) {
                                 var dt = new Date();
-                                dt.setTime(parseInt(val)*1000);
+                                dt.setTime(parseInt(val) * 1000);
                                 return dt.format("yyyy-MM-dd")
-                            }else {
+                            } else {
                                 return ""
                             }
                         }},
                     {"data": "buyer", width: "3%", render: function (val) {
-                            if (val) {
+                            if (val == undefined) {
                                 val = ""
                             }
                             return val
@@ -1224,64 +1230,73 @@
                     {"data": function (row) {
                             if (row.buyerperson) {
                                 return row.buyerperson
-                            }else {
+                            } else {
                                 return ""
                             }
-                        }, width: "4%"},
+                        }, width: "4%"
+                    },
                     {"data": function (row) {
                             if (row.buyertel) {
                                 return row.buyertel
-                            }else {
+                            } else {
                                 return ""
                             }
-                        }, width: "4%"},
+                        }, width: "4%"
+                    },
                     {"data": "agency", width: "5%", render: function (val) {
-                            if (val) {
+                            if (val == undefined) {
                                 val = ""
                             }
                             return val
-                        }},
+                        }
+                    },
                     {"data": "winner", width: "3%", render: function (val) {
-                            if (val) {
+                            if (val == undefined) {
                                 val = ""
                             }
                             return val
-                        }},
+                        }
+                    },
                     {"data": function (row) {
                             if (row.winnerperson) {
                                 return row.winnerperson
-                            }else {
+                            } else {
                                 return ""
                             }
-                        }, width: "4%"},
+                        }, width: "4%"
+                    },
                     {"data": function (row) {
                             if (row.winnertel) {
                                 return row.winnertel
-                            }else {
+                            } else {
                                 return ""
                             }
-                        }, width: "4%"},
+                        }, width: "4%"
+                    },
                     {"data": function (row) {
                             if (row.legal_person) {
                                 return row.legal_person
-                            }else {
+                            } else {
                                 return ""
                             }
-                        }, width: "4%"},
+                        }, width: "4%"
+                    },
                     {"data": function (row) {
                             if (row.company_phone) {
                                 return row.company_phone
-                            }else {
+                            } else {
                                 return ""
                             }
-                        }, width: "4%"},
+                        }, width: "4%"
+                    },
                     {"data": function (row) {
                             if (row.company_email) {
                                 return row.company_email
-                            }else {
+                            } else {
                                 return ""
                             }
-                        }, width: "4%"},
+                        }, width: "4%"
+                    },
                 ]
             });
             $('#modal-preview').modal("show");

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

@@ -1162,7 +1162,7 @@
         }
         com.maskShow("正在生成数据...");
         $.ajax({
-            url:"/service/rule/produce",
+            url:"/service/cuser/produce",
             type:"post",
             data: {"id": dataMap.id},
             success:function(r){

+ 2 - 2
src/web/templates/private/cuser_rule_edit.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>
@@ -1258,7 +1258,7 @@
     function produceData() {
         com.maskShow("正在生成数据...");
         $.ajax({
-            url: "/service/rule/produce",
+            url: "/service/cuser/produce",
             type: "post",
             data: {"id": dataMap.id},
             success: function (r) {

+ 36 - 17
src/web/templates/private/cuser_rule_list.html

@@ -6,7 +6,7 @@
 <div class="content-wrapper" id="showbtn">
     <section class="content-header">
         <h1>
-            <small><a id="addTag" class="btn btn-primary opr">新增标签</a></small>
+            <small><a id="addTag" class="btn btn-primary opr">新增规则</a></small>
         </h1>
         <ol class="breadcrumb">
             <li><a href="#"><i class="fa fa-dashboard"></i> 首页</a></li>
@@ -25,8 +25,9 @@
                             <thead>
                             <tr>
                                 <th>编号</th>
-                                <th>标签名称</th>
+                                <th>规则名称</th>
                                 <th>修改时间</th>
+                                <th>状态</th>
                                 <th>操作</th>
                                 <th>功能</th>
                                 <th>查看</th>
@@ -106,9 +107,18 @@
                   dt.setTime(parseInt(val) * 1000);
                   return dt.format("yyyy-MM-dd")
                 }},
+                {"data": "i_isuse", render: function (val, a, row) {
+                        tmp = ""
+                        if(val == 1){
+                            tmp="<a href='#' title='停用' onclick='setupRule(\""+row._id+"\",false)'><i class='fa fa-fw fa-circle text-green'></i></a>已启用"
+                        }else{
+                            tmp="<a href='#' title='启用' onclick='setupRule(\""+row._id+"\",true)'><i class='fa fa-fw fa-circle text-red'></i></a>未启用"
+                        }
+                        return tmp
+                    }, width: "10%" },
                 {"data": "_id", width:"11%",render: function (val, a, row, pos) {
                       tmp = '<div>' +
-                          '<a class="btn btn-sm btn-primary" href="/service/cuser/rule/Edit?id='+val+'">编辑</a>'+
+                          '<a class="btn btn-sm btn-primary" href="/service/cuser/rule/Edit?id='+val+'">编辑</a>&nbsp;&nbsp;'+
                           '<a class="btn btn-sm btn-danger" onclick="del(\''+val+'\')">删除</a>'+
                           '</div>';
                       return tmp
@@ -116,16 +126,15 @@
                 {"data": "_id", width:"26%",render: function (val, a, row, pos) {
                     var s = [val, row.s_dataid];
                       tmp = '<div>' +
-                          '<a class="btn btn-sm btn-primary" href="/service/rule/downloadrule?id='+val+'">导出标签</a>'+
-                          '<a class="btn btn-sm btn-info" href="/service/rule/downloadata?s_dataid='+val+'">导出数据</a>'+
-                          '<a class="btn btn-sm btn-warning" onclick="archive(\'' + val + '\')">存档</a>'+
-                          '<a class="btn btn-sm btn-danger" onclick="getcustomerappid(\'' + val + '\',\'' + row.s_customer + '\')">客户关联</a>'+
+                          '<a class="btn btn-sm btn-primary" href="/service/rule/downloadrule?id='+val+'">导出标签</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>&nbsp;&nbsp;'+
                           '</div>';
                       return tmp
                 }},
                 {"data": "_id",width:"15%", render: function (val, a, row, pos) {
                   tmp = '<div xmlns="http://www.w3.org/1999/html">' +
-                       '<button class="btn btn-sm btn-instagram" onclick="preview(\'' + row.s_dataid + '\')">链接地址</button>'+
+                       '<button class="btn btn-sm btn-instagram" onclick="preview(\'' + row.s_dataid + '\')">链接地址</button>&nbsp;&nbsp;'+
                       '<a class="btn btn-sm btn-success" href="/service/rule/history?tagid='+val+'">变更历史</a>'+
                       '</div>';
                   return tmp
@@ -175,18 +184,28 @@
     function cancelModel() {
         $('#modal-preview-href').modal("hide");
     }
-    function getcustomerappid(_id,customer){
-      showConfirm("确定关联?", function() {
+
+    function setupRule(val) {
+        var msg = ""
+        var i_isuse = 0
+        if (bol) {
+            msg = "确定启用?"
+            i_isuse = 1
+        }else {
+            msg = "确定停用?"
+            i_isuse = 0
+        }
+        showConfirm(msg, function() {
             $.ajax({
-                url:"/service/rule/getcustomerappid",
+                url:"/service/euser/rule/setup",
                 type:"post",
-                data:{"_id": _id,"customer":customer},
+                data:{"_id": val, "i_isuse": i_isuse},
                 success:function(r){
-                  if(r.rep){
-                    showTip("关联成功",1000);
-                  }else{
-                    alert("关联失败");
-                  }
+                    if(r.rep){
+                        ttable.ajax.reload()
+                    }else{
+                        showTip("设置失败", 1000);
+                    }
                 }
             })
         });

+ 3 - 2
src/web/templates/private/customer_edit.html

@@ -157,7 +157,7 @@
                                 <thead>
                                 <tr>
                                     <th>编号</th>
-                                    <th>规则名称</th>
+                                    <th>标签名称</th>
                                     <th>修改时间</th>
                                     <th>启用状态</th>
                                     <th>操作</th>
@@ -235,7 +235,7 @@
                                 <tr>
                                     <th>编号</th>
                                     <th><input type="checkbox" id="selrow" onclick="allSelect(this)"/></th>
-                                    <th>标签名称</th>
+                                    <th>规则名称</th>
                                     <th>部门名称</th>
                                     <th>创建时间</th>
                                 </tr>
@@ -703,6 +703,7 @@
                 if (r.rep) {
                     // window.location.reload()
                     showTip("关联成功", 1000);
+                    $('#modal-associated').modal("hide")
                 } else {
                     showTip("关联失败", 1000);
                 }

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

@@ -91,7 +91,7 @@
                         if (row.i_state == 1) {
                             tmp = '<div>' +
                                 '<a class="btn btn-sm btn-primary" href="/service/customer/edit?id=' + val + '">编辑</a>&nbsp;&nbsp;' +
-                                '<a class="btn btn-sm btn-danger" disabled="true">删除</a>' +
+                                '<a class="btn btn-sm btn-default" disabled="true">删除</a>' +
                                 '</div>';
                         }else {
                             tmp = '<div>' +
@@ -107,13 +107,13 @@
                         var tmp
                         if (row.i_state == 1) {
                             tmp = '<div>' +
-                                '<a class="btn btn-sm btn-primary" disabled="true">转企</a>&nbsp;&nbsp;' +
+                                '<a class="btn btn-sm btn-default" disabled="true">转企</a>&nbsp;&nbsp;' +
                                 '<a class="btn btn-sm btn-warning" onclick="SynEnt(\'' + val + '\')">同步</a>' +
                                 '</div>';
                         }else {
                             tmp = '<div>' +
                                 '<a class="btn btn-sm btn-primary" onclick="toEnt(\''+ val +'\')">转企</a>&nbsp;&nbsp;' +
-                                '<a class="btn btn-sm btn-warning" disabled="true">同步</a>' +
+                                '<a class="btn btn-sm btn-default" disabled="true">同步</a>' +
                                 '</div>';
                         }
                         return tmp

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

@@ -360,7 +360,7 @@
                 var myform = new FormData();
                 myform.append('xlsx', $("#file")[0].files[0]);
                 $.ajax({
-                    url: "/service/tag_rule/import",
+                    url: "/service/esuer/tag/import",
                     type: 'POST',
                     data: myform,
                     async: false,