Browse Source

新增被检人员

mxs 1 year ago
parent
commit
27a25e8d34

+ 47 - 13
src/front/front.go

@@ -19,7 +19,6 @@ import (
 	"strconv"
 	"strings"
 	"sync"
-	task "taskManager"
 	"time"
 	u "util"
 )
@@ -141,24 +140,46 @@ func (f *Front) LoadIndex() {
 				map[string]interface{}{"param_common.1": map[string]interface{}{"$regex": search}},
 			}
 		}
-		if auth == u.Role_Examine { //审核员
-			if state > -1 {
-				query["state"] = state
-			} else {
-				query["state"] = Sp_state_1
-			}
-
-		} else if auth == u.Role_Dev { //开发员
+		if auth == u.Role_Dev { //开发员
 			if state > -1 {
 				query["state"] = state
 			}
 			query["createuserid"] = f.GetSession("userid")
-
-		} else { //管理员
+		} else {
+			identity := qu.IntAll(f.GetSession("identity"))
+			if identity == 0 { //外包管理员
+				ids := []string{}
+				if tmpIds := f.GetSession("ids"); tmpIds != nil {
+					ids = qu.ObjArrToStringArr(tmpIds.([]interface{}))
+				}
+				query["createuserid"] = map[string]interface{}{
+					"$in": ids,
+				}
+			}
 			if state > -1 {
 				query["state"] = state
+			} else if auth == u.Role_Examine {
+				query["state"] = Sp_state_1
 			}
 		}
+		//if auth == u.Role_Examine { //审核员
+		//	if state > -1 {
+		//		query["state"] = state
+		//	} else {
+		//		query["state"] = Sp_state_1
+		//	}
+		//
+		//} else if auth == u.Role_Dev { //开发员
+		//	if state > -1 {
+		//		query["state"] = state
+		//	}
+		//	query["createuserid"] = f.GetSession("userid")
+		//
+		//} else { //管理员
+		//	if state > -1 {
+		//		query["state"] = state
+		//	}
+		//}
 		sort := `{"%s":%d}`
 		orderIndex := f.GetString("order[0][column]")
 		orderName := f.GetString(fmt.Sprintf("columns[%s][data]", orderIndex))
@@ -201,7 +222,7 @@ func (f *Front) LoadIndex() {
 		for k, _ := range util.Config.Uploadevents {
 			events = append(events, k)
 		}
-		f.T["modifyusers"] = task.GetModifyUsers()
+		f.T["modifyusers"] = u.GetModifyUsers()
 		sort.Strings(events)
 		f.T["events"] = events
 		f.Render("index.html", &f.T)
@@ -482,10 +503,13 @@ func saveLua(o map[string]interface{}) (bool, string) {
 	param["spiderhistorymaxpage"] = 1 //历史最大页
 	param["pendstate"] = 0            //
 	param["grade"] = 0                //爬虫难易度(主要用于python爬虫使用)
+	param["spiderimportant"] = false  //是否为重点网站爬虫
 	//qu.Debug("param---", param)
+
 	ok := spider.SaveSpider(o["code"].(string), param)
 	if ok { //保存成功,校验新导入的爬虫对应站点是否存在,否则加站点记录
-		if u.MgoEB.Count("site", map[string]interface{}{"site": o["name"]}) == 0 {
+		site, _ := u.MgoEB.FindOneByField("site", map[string]interface{}{"site": o["name"]}, map[string]interface{}{"important": 1})
+		if len(*site) == 0 {
 			qu.Debug("补充站点信息:", o["name"])
 			domain := u.DomainReg.FindString(qu.ObjToString(AutoTpl["Base.SpiderTargetChannelUrl"]))
 			if domain != "" {
@@ -530,6 +554,16 @@ func saveLua(o map[string]interface{}) (bool, string) {
 				"type_plate":     "",
 			}
 			u.MgoEB.Save("site", siteInfo)
+		} else if qu.IntAll((*site)["important"]) == 1 { //重点网站
+			u.MgoEB.Update("luaconfig", map[string]interface{}{"code": o["code"]}, map[string]interface{}{"$set": map[string]interface{}{"spiderimportant": true}}, false, false)
+			u.MgoEB.Update("site_code_baseinfo", map[string]interface{}{"spidercode": o["code"]}, map[string]interface{}{"$set": map[string]interface{}{
+				"site":       o["name"],
+				"channel":    o["channel"],
+				"spidercode": o["code"],
+				"platform":   o["platform"],
+				"modifyuser": (*one)["s_name"],
+				"state":      0,
+			}}, true, false)
 		}
 	}
 	return ok, (*one)["s_name"].(string)

+ 0 - 1
src/front/heart.go

@@ -41,7 +41,6 @@ func (f *Front) Heart() {
 		count := u.MgoS.Count("spider_heart", query)
 		for _, l := range *list {
 			code := qu.ObjToString(l["code"])
-			qu.Debug(code)
 			//d, _ := u.MgoE.FindOneByField("luaconfig", map[string]interface{}{"code": code}, map[string]interface{}{"state": 1, "param_common": 1, "str_list": 1, "type_list": 1})
 			d, _ := u.MgoEB.FindOneByField("luaconfig", map[string]interface{}{"code": code}, map[string]interface{}{"state": 1, "param_common": 1, "str_list": 1, "type_list": 1, "pendtime": 1})
 			l["state"] = (*d)["state"]

+ 24 - 0
src/front/site.go

@@ -317,10 +317,12 @@ func (s *Site) UpdateSite() {
 	defer qu.Catch()
 	id := s.GetString("id")
 	val := s.GetString("val")
+	site := s.GetString("site")
 	updatetype := s.GetString("updatetype")
 	update := map[string]interface{}{}
 	if updatetype == "important" { //重点
 		update["important"] = qu.IntAll(val)
+		UpdateSiteCodeBaseInfo(site, qu.IntAll(val)) //更新重点网站爬虫信息
 	} else if updatetype == "toptype" { //一级类型
 		update["site_toptype"] = val
 		update["site_subtype"] = "" //更新一级类型,二级类型置空
@@ -344,3 +346,25 @@ func (s *Site) UpdateSite() {
 	}
 	s.Write("n")
 }
+
+// UpdateSiteCodeBaseInfo 更新重点网站爬虫信息
+func UpdateSiteCodeBaseInfo(site string, important int) {
+	query := map[string]interface{}{"site": site}
+	set := map[string]interface{}{}
+	if important == 0 { //变为非重点网站
+		ok := util.MgoEB.Del("site_code_baseinfo", query)
+		qu.Debug("删除重点网站爬虫信息:", site, ok)
+		set["spiderimportant"] = false
+	} else { //变为重点网站
+		set["spiderimportant"] = true
+		list, _ := util.MgoEB.Find("luaconfig", query, nil, map[string]interface{}{"site": 1, "code": 1, "channel": 1, "state": 1, "modifyuser": 1, "platform": 1}, false, -1, -1)
+		if len(*list) > 0 {
+			for _, l := range *list {
+				l["spidercode"] = l["code"]
+				delete(l, "code")
+			}
+			util.MgoEB.SaveBulk("site_code_baseinfo", *list...)
+		}
+	}
+	util.MgoEB.Update("luaconfig", query, map[string]interface{}{"$set": set}, false, true)
+}

+ 23 - 2
src/front/user.go

@@ -28,6 +28,7 @@ func (f *Front) Login() error {
 		f.SetSession("auth", (*user)["i_auth"])
 		f.SetSession("platform", (*user)["s_platform"])
 		f.SetSession("identity", (*user)["i_identity"])
+		f.SetSession("ids", (*user)["ids"])
 		comeintime := time.Unix((*user)["l_comeintime"].(int64), 0).Format("2006-01-02")
 		f.SetSession("comeintime", comeintime)
 		if qu.IntAll((*user)["i_auth"]) > u.Role_Admin {
@@ -103,7 +104,8 @@ func (f *Front) User() {
 			})
 		}
 	} else {
-		f.Render("user.html")
+		f.T["modifyusers"] = u.GetModifyUsers()
+		f.Render("user.html", &f.T)
 	}
 
 }
@@ -150,6 +152,7 @@ func (f *Front) UpdateUser() {
 	self := f.GetString("self")
 	identity, _ := f.GetInteger("identity")
 	platform := f.GetString("platform")
+	id := f.GetString("id")
 	//log.Println("userid----:", userid, "platform----:", platform, "identity----:", identity, "password----:", password, "auth----:", auth, "self----:", self)
 	query := map[string]interface{}{
 		"_id": mongodb.StringTOBsonId(userid),
@@ -165,8 +168,18 @@ func (f *Front) UpdateUser() {
 			update["i_auth"] = 1
 		} else if userAuth == "审核员" {
 			update["i_auth"] = 2
+			ids := []string{}
+			if id != "" {
+				ids = strings.Split(id, ",")
+			}
+			update["ids"] = ids
 		} else if userAuth == "管理员" {
 			update["i_auth"] = 3
+			ids := []string{}
+			if id != "" {
+				ids = strings.Split(id, ",")
+			}
+			update["ids"] = ids
 		}
 	} else {
 		f.ServeJson("没有权限!")
@@ -240,12 +253,20 @@ func (f *Front) SaveNewUser() {
 		userAuth := f.GetString("userAuth")
 		platform := f.GetString("platform")
 		identity, _ := f.GetInteger("identity")
+		id := f.GetString("id")
+		ids := []string{}
 		if userAuth == "开发员" {
 			i_auth = 1
 		} else if userAuth == "审核员" {
 			i_auth = 2
+			if id != "" {
+				ids = strings.Split(id, ",")
+			}
 		} else {
 			i_auth = 3
+			if id != "" {
+				ids = strings.Split(id, ",")
+			}
 		}
 		time := time.Now().Unix()
 		save := map[string]interface{}{
@@ -259,6 +280,7 @@ func (f *Front) SaveNewUser() {
 			"i_identity":   identity,
 			"i_scope":      -1,
 			"s_platform":   platform,
+			"ids":          ids,
 		}
 		ok := u.MgoEB.Save("user", save)
 		if ok != "" {
@@ -271,7 +293,6 @@ func (f *Front) SaveNewUser() {
 			})
 		}
 	}
-
 }
 
 func (f *Front) Logout() {

+ 0 - 1
src/main.go

@@ -95,7 +95,6 @@ func init() {
 	//udp.InitUdp()//异常数据重采,暂取消该功能
 }
 
-//
 func main() {
 	//定时任务
 	go timetask.TimeTask()

+ 8 - 0
src/spider/script.go

@@ -245,6 +245,14 @@ func (s *Script) LoadScript(site *string, downloadnode, script string, isfile ..
 		time.Sleep(1 * time.Second)
 		return 0
 	}))
+	s.L.SetGlobal("runSleep", s.L.NewFunction(func(S *lua.LState) int {
+		t := S.ToInt(-1)
+		if t <= 0 {
+			t = 1
+		}
+		time.Sleep(time.Duration(t) * time.Second)
+		return 0
+	}))
 	//编码解码
 	s.L.SetGlobal("transCode", s.L.NewFunction(func(S *lua.LState) int {
 		codeType := strings.ToLower(S.ToString(-2))

+ 33 - 34
src/taskManager/taskManager.go

@@ -45,10 +45,10 @@ type TaskM struct {
 
 }
 
-//session是否失效
+// session是否失效
 var SessionFailuer bool //检测每次登陆
 
-//任务导入
+// 任务导入
 func (t *TaskM) Taskfile() {
 	auth := qu.IntAll(t.GetSession("auth"))
 	if auth != u.Role_Admin {
@@ -172,7 +172,7 @@ func (t *TaskM) ManagerTask() {
 	draw, _ := t.GetInteger("draw")
 	start, _ := t.GetInteger("start")
 	limit, _ := t.GetInteger("length")
-	if auth == u.Role_Admin {
+	if auth >= u.Role_Examine {
 		if t.Method() == "GET" {
 			events := []string{}
 			for k, _ := range util.Config.Uploadevents {
@@ -180,10 +180,14 @@ func (t *TaskM) ManagerTask() {
 			}
 			sort.Strings(events)
 			t.T["events"] = events
-			t.T["modifyusers"] = GetModifyUsers()
+			t.T["modifyusers"] = u.GetModifyUsers()
 			t.Render("task.html", &t.T)
 		} else {
-			query := queryCriteria(userid, platform, taskState, event, stype)
+			ids := []string{}
+			if tmpIds := t.GetSession("ids"); tmpIds != nil {
+				ids = qu.ObjArrToStringArr(tmpIds.([]interface{}))
+			}
+			query := queryCriteria(userid, platform, taskState, event, stype, ids)
 			if search != "" {
 				query["$or"] = []interface{}{
 					map[string]interface{}{"s_code": map[string]interface{}{"$regex": search}},
@@ -238,7 +242,7 @@ func findLua(code string) []interface{} {
 	return param
 }
 
-//我的任务
+// 我的任务
 func (t *TaskM) Mytask() {
 	auth := qu.IntAll(t.GetSession("auth"))
 	if auth != u.Role_Dev {
@@ -260,7 +264,7 @@ func (t *TaskM) Mytask() {
 		//search := strings.Replace(searchStr, " ", "", -1)
 		search := strings.TrimSpace(searchStr)
 		//查询自己的任务
-		query = queryCriteria(userid, platform, taskState, event, stype)
+		query = queryCriteria(userid, platform, taskState, event, stype, []string{})
 		if search != "" {
 			query["$or"] = []interface{}{
 				map[string]interface{}{"s_code": map[string]interface{}{"$regex": search}},
@@ -330,7 +334,7 @@ func (t *TaskM) Mytask() {
 	}
 }
 
-//检验任务是否存在
+// 检验任务是否存在
 func (t *TaskM) CheckCode() {
 	code := t.GetString("code")
 	status := "notHasCode"
@@ -362,9 +366,9 @@ func (t *TaskM) CheckCode() {
 	}
 }
 
-//查询维护人员
+// 查询维护人员
 func (t *TaskM) SearchMintainer() {
-	users := GetModifyUsers()
+	users := u.GetModifyUsers()
 	if len(users) > 0 {
 		//t.SetSession("mintainer", mintainer)
 		t.ServeJson(map[string]interface{}{
@@ -375,16 +379,7 @@ func (t *TaskM) SearchMintainer() {
 	}
 }
 
-func GetModifyUsers() []map[string]interface{} {
-	query := map[string]interface{}{
-		"i_auth":   1,
-		"i_delete": 0,
-	}
-	user, _ := u.MgoEB.Find("user", query, nil, nil, false, -1, -1)
-	return *user
-}
-
-//保存新建任务
+// 保存新建任务
 func (t *TaskM) SaveNewTask() {
 	auth := qu.IntAll(t.GetSession("auth"))
 	if auth != u.Role_Admin {
@@ -459,7 +454,7 @@ func (t *TaskM) SaveNewTask() {
 	}
 }
 
-//编辑 查看任务
+// 编辑 查看任务
 func (t *TaskM) EditTask(ids string) error {
 	auth := qu.IntAll(t.GetSession("auth"))
 	//code := strings.Split(codes, "__")[0]
@@ -513,7 +508,7 @@ func (t *TaskM) EditTask(ids string) error {
 	return nil
 }
 
-//删除任务
+// 删除任务
 func (t *TaskM) Del() {
 	auth := qu.IntAll(t.GetSession("auth"))
 	id := t.GetString("id")
@@ -534,7 +529,7 @@ func (t *TaskM) Del() {
 	})
 }
 
-//修改任务
+// 修改任务
 func (t *TaskM) UpdateTask() {
 	auth := qu.IntAll(t.GetSession("auth"))
 	if auth != u.Role_Admin {
@@ -600,7 +595,7 @@ func (t *TaskM) UpdateTask() {
 	})
 }
 
-//修改任务状态为处理中
+// 修改任务状态为处理中
 func (t *TaskM) UpdateTaskState() {
 	xgTime := time.Unix(time.Now().Unix(), 0).Format("2006-01-02 15:04:05")
 	//判断之前是否已有
@@ -634,7 +629,7 @@ func (t *TaskM) UpdateTaskState() {
 	})
 }
 
-//保存记录
+// 保存记录
 func (t *TaskM) SaveRecord() {
 	auth := qu.IntAll(t.GetSession("auth"))
 	if auth != u.Role_Dev {
@@ -670,7 +665,7 @@ func (t *TaskM) SaveRecord() {
 	})
 }
 
-//审核任务
+// 审核任务
 func (t *TaskM) Audit() {
 	auth := qu.IntAll(t.GetSession("auth"))
 	if auth != u.Role_Examine {
@@ -774,7 +769,7 @@ func (t *TaskM) Audit() {
 	}
 }
 
-//更新task
+// 更新task
 func UpdateOldTask(id, descript, urgency string, complete int64) {
 	queryT := map[string]interface{}{
 		"_id": mongodb.StringTOBsonId(id),
@@ -796,7 +791,7 @@ func UpdateOldTask(id, descript, urgency string, complete int64) {
 
 }
 
-//分发任务
+// 分发任务
 func (t *TaskM) AssignChangeTaskState() {
 	id := t.GetString("id")
 	code := t.GetString("code")
@@ -844,7 +839,7 @@ func (t *TaskM) AssignChangeTaskState() {
 
 }
 
-//关闭任务
+// 关闭任务
 func (t *TaskM) CloseChangeTaskState() {
 	id := t.GetString("id")
 	code := t.GetString("code")
@@ -874,7 +869,7 @@ func (t *TaskM) CloseChangeTaskState() {
 
 }
 
-//批量分发任务
+// 批量分发任务
 func (t *TaskM) BatchAssign() {
 	ids := strings.Split(t.GetString("ids"), ",")
 	codes := strings.Split(t.GetString("codes"), ",")
@@ -915,7 +910,7 @@ func (t *TaskM) BatchAssign() {
 
 }
 
-//批量关闭任务
+// 批量关闭任务
 func (t *TaskM) BatchClose() {
 	ids := strings.Split(t.GetString("ids"), ",")
 	codes := strings.Split(t.GetString("codes"), ",")
@@ -946,7 +941,7 @@ func (t *TaskM) BatchClose() {
 	}
 }
 
-//批量处理任务
+// 批量处理任务
 func (t *TaskM) BatchDeal() {
 	ids := strings.Split(t.GetString("ids"), ",")
 	auth := qu.IntAll(t.GetSession("auth"))
@@ -980,7 +975,7 @@ func (t *TaskM) GetJumpMark() {
 	}
 }
 
-//更新closerate
+// 更新closerate
 func updateClose(code string) {
 	defer qu.Catch()
 	query := map[string]interface{}{
@@ -1004,10 +999,14 @@ func updateClose(code string) {
 		fmt.Println("closerate关闭任务:code	", flag)
 	}
 }
-func queryCriteria(userid, platform string, taskState, event, stype int) (query map[string]interface{}) {
+func queryCriteria(userid, platform string, taskState, event, stype int, ids []string) (query map[string]interface{}) {
 	query = map[string]interface{}{}
 	if userid != "" && userid != "-1" {
 		query["s_modifyid"] = userid
+	} else {
+		query["s_modifyid"] = map[string]interface{}{
+			"$in": ids,
+		}
 	}
 	if platform != "" && platform != "-1" {
 		query["s_platform"] = platform

+ 16 - 4
src/timetask/timetask.go

@@ -22,10 +22,11 @@ func TimeTask() {
 	c := cron.New()
 	c.Start()
 	c.AddFunc("0 20 9 ? * MON-FRI", CheckCreateTask)
-	c.AddFunc("0 30 23 * * *", UpdateSiteInfo)   //定时更新站点信息
-	c.AddFunc("0 0 23 * * *", UpdateCodeHeart)   //定时更新爬虫心跳信息
-	c.AddFunc("0 0 */1 ? * *", CheckLuaMove)     //7000节点转增量爬虫失败告警
-	c.AddFunc("0 */10 * * * *", SpiderMoveEvent) //7000节点转增量爬虫
+	c.AddFunc("0 30 23 * * *", UpdateSiteInfo)    //定时更新站点信息
+	c.AddFunc("0 0 23 * * *", UpdateCodeHeart)    //定时更新爬虫心跳信息
+	c.AddFunc("0 0 */1 ? * *", CheckLuaMove)      //7000节点转增量爬虫失败告警
+	c.AddFunc("0 */10 * * * *", SpiderMoveEvent)  //7000节点转增量爬虫
+	c.AddFunc("0 0 8 * * *", UpdateImportantCode) //更新重点网站爬虫信息
 }
 
 // 检测创建任务失败的爬虫
@@ -85,6 +86,17 @@ func UpdateSiteInfo() {
 
 }
 
+// 更新重点网站爬虫信息
+func UpdateImportantCode() {
+	data, _ := util.MgoEB.Find("site_code_baseinfo", nil, nil, map[string]interface{}{"spidercode": 1}, false, -1, -1)
+	for _, d := range *data {
+		lua, _ := util.MgoEB.FindOneByField("luaconfig", map[string]interface{}{"code": d["spidercode"]}, map[string]interface{}{"state": 1, "modifyuser": 1, "platform": 1, "channel": 1, "_id": 0})
+		if len(*lua) > 0 {
+			util.MgoEB.UpdateById("site_code_baseinfo", d["_id"], map[string]interface{}{"$set": *lua})
+		}
+	}
+}
+
 func UpdateCodeHeart() {
 	qu.Debug("定时更新爬虫心跳信息...")
 	defer qu.Catch()

+ 9 - 0
src/util/util.go

@@ -330,6 +330,15 @@ func SpiderPassCheckListAndDetail_back(list []map[string]interface{}, data map[s
 	return
 }
 
+func GetModifyUsers() []map[string]interface{} {
+	query := map[string]interface{}{
+		"i_auth":   1,
+		"i_delete": 0,
+	}
+	user, _ := MgoEB.Find("user", query, nil, nil, false, -1, -1)
+	return *user
+}
+
 func GetLuasInfoBySite(site, area, city, district string) (domain, status, event, platform, infotype, specialtype string, remarktime int64) {
 	shelveUp := 0
 	eventMap, platformMap := map[int]interface{}{}, map[string]interface{}{}

+ 8 - 24
src/web/staticres/js/head.js

@@ -193,30 +193,6 @@ function cancel(){
 	$("#myModal-feedback").modal("hide");
 }
 
-//保存修改密码
-function editUser(){
-	var password = $("#password").val().trim().replace(/\s/g,"");
-	var auth = $("input:radio[name='auth-box']:checked").val();
-	var identity = $("input:radio[name='identity-box']:checked").val();
-	var platform = $("input:radio[name='platform-box']:checked").val();
-	$("#myModal-edit").modal("hide");
-	var self =sessionStorage.getItem("self");
-	var id =sessionStorage.getItem("userid");
-	//console.log(id+"  "+$auth+"  "+username+"  "+self+"  "+password)
-	$.post("/center/user/updateUser",{"password":password,"userAuth":auth,"self":self,"userid":id,"identity":identity,"platform":platform},function(r){
-		if("y" == r.status){
-			//alert("修改成功");
-			showTip("修改成功", 1000);
-		}else{
-			//alert("修改失败");
-			showTip("修改失败", 1000);
-		}
-		$('#com-alert').on('hidden.bs.modal', function () {
-			window.location.reload();
-		})
-	})
-}
-
 //新建任务
 function createTask(code){
 	sessionStorage.setItem("code","");
@@ -342,6 +318,14 @@ $(document).ready(function() {
 		}
 		showInfoError(whichOne)
     });
+
+	$('input[type=radio][name=auth-box]').change(function() {
+		if (this.value == "审核员" || this.value == "管理员"){
+			$(".affiliater").css("display","block");
+		}else{
+			$(".affiliater").css("display","none");
+		}
+	});
 });
 
 function getTime(){

+ 16 - 13
src/web/templates/head.html

@@ -27,7 +27,6 @@
     <link rel="stylesheet" href="/time/css/wui.min.css">
     <link rel="stylesheet" href="/time/css/style.css">
 	<link rel="stylesheet"  href="/css/otherStyle.css">
-	<link rel="stylesheet" href="/datepicker/bootstrap-datepicker.min.css">
 
 	<script src="/plugins/jQuery/jquery-2.2.3.min.js"></script>
 	<script src="/js/common.js"></script>
@@ -233,16 +232,15 @@
 						    <label for="modify" class="col-sm-2 control-label">任务类型:</label>
 						    <div class="col-sm-10">
 						      <select class="form-control" id="stype">
-                    <option value="-1">--请选择--</option>
-                    <option value="8">采集频率异常</option>
-                    <option value="7">列表页异常</option>
-                    <option value="6">附件异常</option>
-                    <option value="5">下载异常</option>
-                    <option value="4">运行异常</option>
-                    <option value="3">时间异常</option>
-                    <option value="2">数据异常</option>
-                    <option value="1">数量异常</option>
-                  </select>
+								  <option value="-1">--请选择--</option>
+								  <option value='1'>列表页异常</option>
+								  <option value='2'>数据异常错误</option>
+								  <option value='3'>爬虫翻页异常</option>
+								  <option value='4'>采集频率异常</option>
+								  <option value='5'>下载异常</option>
+								  <option value='6'>数据异常警告</option>
+								  <option value='0'>常规任务</option>
+                 			  </select>
 						    </div>
 						  </div>
               
@@ -455,6 +453,12 @@
 								<input type="radio" name="auth-box" class="auth" id="gly" value="管理员">管理员</input>
 						    </div>
 						  </div>
+							<div class="form-group affiliater">
+								<label  class="col-sm-2 control-label">被检人员:</label>
+								<div class="col-sm-10 checkbox-style">
+									<div id="affiliater" class="xm-select-demo"></div>
+								</div>
+							</div>
 							<div class="form-group">
 								<label for="identity" class="col-sm-2 control-label">身份:</label>
 								<div class="col-sm-10 checkbox-style">
@@ -463,7 +467,7 @@
 								</div>
 							</div>
 							<div class="form-group">
-								<label for="platform" class="col-sm-2 control-label">身份:</label>
+								<label for="platform" class="col-sm-2 control-label">平台:</label>
 								<div class="col-sm-10 checkbox-style">
 									<input type="radio" name="platform-box" class="identity" id="platform-lua" value="golua平台">golua平台</input>
 									<input type="radio" name="platform-box" class="identity" id="platform-python" value="python">python</input>
@@ -713,7 +717,6 @@
 		input.addEventListener('blur', function () {
 			span.innerText = input.value;
 			// input.parentNode.removeChild(input);
-			console.log("===========",input.value,)
 			var code = {{.T.lua.code}};
 			//修改内容
 			$.post("/center/spider/spiderremark",{"remark":input.value,"code":code},function (){})

+ 24 - 25
src/web/templates/sitelist.html

@@ -420,7 +420,7 @@ $(function(){
             {"targets":[5], createdCell: function (cell, cellData, rowData, rowIndex, colIndex) {
                 var aInput;
                 $(cell).click(function () {
-                    $(this).html(selectImportant(rowData._id));
+                    $(this).html(selectImportant(rowData._id,rowData.site));
                     var aInput = $(this).find(":input");
                     aInput.focus().val(cellData);
                 });
@@ -445,7 +445,7 @@ $(function(){
             {"targets":[9], createdCell: function (cell, cellData, rowData, rowIndex, colIndex) {
                     var aInput;
                     $(cell).click(function () {
-                        $(this).html(selectPlateType(rowData._id));
+                        $(this).html(selectPlateType(rowData._id,rowData.site));
                         var aInput = $(this).find(":input");
                         aInput.focus().val(cellData);
                     });
@@ -465,7 +465,7 @@ $(function(){
             {"targets":[10], createdCell: function (cell, cellData, rowData, rowIndex, colIndex) {
                 var aInput;
                 $(cell).click(function () {
-                    $(this).html(selectClassOneSiteTypes(rowData._id));
+                    $(this).html(selectClassOneSiteTypes(rowData._id,rowData.site));
                     var aInput = $(this).find(":input");
                     aInput.focus().val(cellData);
                 });
@@ -485,7 +485,7 @@ $(function(){
             {"targets":[11], createdCell: function (cell, cellData, rowData, rowIndex, colIndex) {
                 var aInput;
                 $(cell).click(function () {
-                    $(this).html(selectClassTwoSiteTypes(rowData._id,rowData.site_toptype));
+                    $(this).html(selectClassTwoSiteTypes(rowData._id,rowData.site_toptype,rowData.site));
                     var aInput = $(this).find(":input");
                     aInput.focus().val(cellData);
                 });
@@ -505,7 +505,7 @@ $(function(){
             {"targets":[12], createdCell: function (cell, cellData, rowData, rowIndex, colIndex) {
                     var aInput;
                     $(cell).click(function () {
-                        $(this).html(selectArea(rowData._id));
+                        $(this).html(selectArea(rowData._id,rowData.site));
                         var aInput = $(this).find(":input");
                         aInput.focus().val(cellData);
                     });
@@ -525,7 +525,7 @@ $(function(){
             {"targets":[13], createdCell: function (cell, cellData, rowData, rowIndex, colIndex) {
                     var aInput;
                     $(cell).click(function () {
-                        $(this).html(selectCity(rowData._id,rowData.f_area));
+                        $(this).html(selectCity(rowData._id,rowData.f_area,rowData.site));
                         var aInput = $(this).find(":input");
                         aInput.focus().val(cellData);
                     });
@@ -548,7 +548,7 @@ $(function(){
             {"targets":[14], createdCell: function (cell, cellData, rowData, rowIndex, colIndex) {
                     var aInput;
                     $(cell).click(function () {
-                        $(this).html(selectDistrict(rowData._id,rowData.f_area,rowData.f_city));
+                        $(this).html(selectDistrict(rowData._id,rowData.f_area,rowData.f_city,rowData.site));
                         var aInput = $(this).find(":input");
                         aInput.focus().val(cellData);
                     });
@@ -1052,7 +1052,6 @@ function siteDelete(id){
 //保存站点
 function saveSite(){
     var formdataMap = common.form.serializeArray("add-form");
-    console.log(formdataMap)
     if(formdataMap.site=="" || formdataMap.isneedregister == "-1" || formdataMap.isregistered == "-1"){
         alert("表单填写不完整!");
         return
@@ -1151,75 +1150,75 @@ function selectrow(me){
 	}
 
 //重点网站筛选
-function selectImportant(id){
+function selectImportant(id,site){
     var siteImportant="<option value=1>是</option><option value=0>否</option>";
-    return "<select onchange='updateSite(\"important\",this.value,\""+id+"\")' class='form-control input-sm'>"+siteImportant+"</select>"
+    return "<select onchange='updateSite(\"important\",this.value,\""+id+"\",\""+site+"\")' class='form-control input-sm'>"+siteImportant+"</select>"
 };
 //平台类型
-function selectPlateType(id){
+function selectPlateType(id,site){
     var plateType = "";
     for(var k in platTypeMap){
         plateType += "<option value="+k+">"+k+"</option>"
     }
-    return "<select onchange='updateSite(\"type_plate\",this.value,\""+id+"\")' class='form-control input-sm'>"+plateType+"</select>"
+    return "<select onchange='updateSite(\"type_plate\",this.value,\""+id+"\",\""+site+"\")' class='form-control input-sm'>"+plateType+"</select>"
 };
 //一级类型网站筛选
-function selectClassOneSiteTypes(id){
+function selectClassOneSiteTypes(id,site){
     var classOneSiteTypes = "";
     for(var k in siteTypesMap){
         classOneSiteTypes += "<option value="+k+">"+k+"</option>"
     }
-    return "<select onchange='updateSite(\"toptype\",this.value,\""+id+"\")' class='form-control input-sm'>"+classOneSiteTypes+"</select>"
+    return "<select onchange='updateSite(\"toptype\",this.value,\""+id+"\",\""+site+"\")' class='form-control input-sm'>"+classOneSiteTypes+"</select>"
 };
 //二级类型网站筛选
-function selectClassTwoSiteTypes(id,siteType){
+function selectClassTwoSiteTypes(id,siteType,site){
     var classTwoSiteTypes = "";
     for(var k in siteTypesMap[siteType]){
         classTwoSiteTypes += "<option value="+siteTypesMap[siteType][k]+">"+siteTypesMap[siteType][k]+"</option>"
     }
-    return "<select onchange='updateSite(\"subtype\",this.value,\""+id+"\")' class='form-control input-sm'>"+classTwoSiteTypes+"</select>"
+    return "<select onchange='updateSite(\"subtype\",this.value,\""+id+"\",\""+site+"\")' class='form-control input-sm'>"+classTwoSiteTypes+"</select>"
 };
 
 //发布省份选择
-function selectArea(id){
+function selectArea(id,site){
     var areasOptions = "";
     for(k in areas){
         areasOptions+="<option value='"+areas[k]+"'>"+areas[k]+"</option>";
     }
-    return "<select onchange='updateSite(\"area\",this.value,\""+id+"\")' class='form-control input-sm'>"+areasOptions+"</select>"
+    return "<select onchange='updateSite(\"area\",this.value,\""+id+"\",\""+site+"\")' class='form-control input-sm'>"+areasOptions+"</select>"
 };
 
 //发布城市选择
-function selectCity(id,area){
+function selectCity(id,area,site){
     var cityOptions ="<option value=''>--请选择--</option>";
     if(area != "全国" && area != ""){
         for(k in provinces[area]){
             cityOptions+="<option value='"+provinces[area][k]+"'>"+provinces[area][k]+"</option>";
         }
-        return "<select onchange='updateSite(\"city\",this.value,\""+id+"\")' class='form-control input-sm'>"+cityOptions+"</select>"
+        return "<select onchange='updateSite(\"city\",this.value,\""+id+"\",\""+site+"\")' class='form-control input-sm'>"+cityOptions+"</select>"
     }
 };
 
 //发布县区选择
-function selectDistrict(id,area,city){
+function selectDistrict(id,area,city,site){
     var districtOptions ="<option value=''>--请选择--</option>";
     if(area != "全国" && area != "" && city != ""){
         for(k in citys[city]){
             districtOptions+="<option value='"+citys[city][k]+"'>"+citys[city][k]+"</option>";
         }
-        return "<select onchange='updateSite(\"district\",this.value,\""+id+"\")' class='form-control input-sm'>"+districtOptions+"</select>"
+        return "<select onchange='updateSite(\"district\",this.value,\""+id+"\",\""+site+"\")' class='form-control input-sm'>"+districtOptions+"</select>"
     }
 };
 
-function updateSite(updatetype,val,id) {
-    console.log("update---",updatetype,val)
+function updateSite(updatetype,val,id,site) {
     $.ajax({
         url:"/center/site/updatesite",
         type:"post",
         data:{
             "updatetype":updatetype,
             "val":val,
-            "id":id
+            "id":id,
+            "site":site
         },
         success:function(r){
             if(r=="n"){

+ 100 - 7
src/web/templates/user.html

@@ -66,6 +66,12 @@
 										<input type="radio" name="auth-box" class="auth" id="gly" value="管理员">管理员</input>
 									</div>
 								  </div>
+									<div class="form-group affiliater">
+										<label  class="col-sm-2 control-label">被检人员:</label>
+										<div class="col-sm-10 checkbox-style">
+											<div id="affiliater" class="xm-select-demo"></div>
+										</div>
+									</div>
 								<div class="form-group">
 									<label for="identity" class="col-sm-2 control-label">身份:</label>
 									<div class="col-sm-10 checkbox-style">
@@ -74,7 +80,7 @@
 									</div>
 								</div>
 								<div class="form-group">
-									<label for="platform" class="col-sm-2 control-label">身份:</label>
+									<label for="platform" class="col-sm-2 control-label">平台:</label>
 									<div class="col-sm-10 checkbox-style">
 										<input type="radio" name="platform-box" class="identity" id="platform-lua" value="golua平台">golua平台</input>
 										<input type="radio" name="platform-box" class="identity" id="platform-python" value="python">python</input>
@@ -180,6 +186,7 @@
 	var exportNames = [];
 	var exportType = ""
 	var dataid = "";
+	var addUserAffiliater;
 	$(function(){
 		ttable=$('#user').DataTable({
 			"language": {
@@ -240,7 +247,7 @@
 						var buttonEdit=$('<a type="button" class="btn btn-sm btn-default">编辑</a>');
 						var buttonDel=$('<a type="button" class="btn btn-sm btn-default">删除</a>');
 						buttonDel.attr("onclick","del('"+row['_id']+"')");
-						buttonEdit.attr("onclick","editUserInfo('"+row['s_name']+"','"+row['s_pass']+"','"+row['s_email']+"','"+row['i_auth']+"','"+row['_id']+"','"+row['l_comeintime']+"','"+row['i_identity']+"','"+row['s_platform']+"')");
+						buttonEdit.attr("onclick","editUserInfo('"+row['ids']+"','"+row['s_name']+"','"+row['s_pass']+"','"+row['s_email']+"','"+row['i_auth']+"','"+row['_id']+"','"+row['l_comeintime']+"','"+row['i_identity']+"','"+row['s_platform']+"')");
 						div.find(".btn-group").append(buttonEdit);
 						div.find(".btn-group").append(buttonDel);
 						return div.html()
@@ -314,7 +321,6 @@
 			$("#user_filter").prepend(identity);
 		});
 	})
-
 	function checkclick(val){
 		$("#selrow").prop('checked',false);
 		ttable.ajax.reload();
@@ -399,7 +405,7 @@
 		dataid = data;
 		$("#myModal").modal("show");
 	}
-	function editUserInfo(name,password,email,auth,userid,comeintime,identity,platform){
+	function editUserInfo(ids,name,password,email,auth,userid,comeintime,identity,platform){
 		$(".saveBtnClass").attr("disabled",false);
 		sessionStorage.setItem("self","n")
 		sessionStorage.setItem("userid",userid);
@@ -409,9 +415,12 @@
 		$(".edit-form #email").val(email);
 		if(auth == 1){
 			$("#myModal-edit #kfy").prop("checked",true);
+			$(".affiliater").css("display","none");
 		}else if(auth == 2){
+			$(".affiliater").css("display","block");
 			$("#myModal-edit #shy").prop("checked",true);
 		}else{
+			$(".affiliater").css("display","block");
 			$("#myModal-edit #gly").prop("checked",true);
 		}
 		if(identity == 1){
@@ -427,6 +436,8 @@
 		$(".auth").prop("disabled",false);
 		$(".edit-form #auth").removeAttr("readOnly");
 		$(".edit-form #comeintime").val(comeintime);
+
+		selectModifyUsers("#myModal-edit #affiliater",ids)
 		$("#myModal-edit").modal("show");
 	}
 	//确定删除
@@ -550,13 +561,56 @@
 		$("#myModal-addUser #platform-lua").prop("checked",true);
 		$("#myModal-addUser #comeintime").val(date);
 		$("#myModal-addUser #comeintime").attr("readOnly",true);
-		$("#myModal-addUser").modal("show");
+		$(".affiliater").css("display","none");
 		$(".usernameCheck").addClass("hide")
 		$(".passwordCheck").addClass("hide");
 		$(".relnameCheck").addClass("hide");
 		$(".emailCheck").addClass("hide");
+		selectModifyUsers("#myModal-addUser #affiliater",null)//xmSelect插件定义局部变量,全部会导致选项不重置
+		$("#myModal-addUser").modal("show");
 	})
 
+	//多选爬虫开发
+	function selectModifyUsers(m,ids) {
+		addUserAffiliater = xmSelect.render({
+			el: m,
+			// model: {
+			// 	icon: 'hidden',
+			// },
+			toolbar:{
+				show: true,
+				showIcon: false,
+			},
+			checkbox: true,
+			repeat: false,
+			autoRow: true,
+			filterable: true,
+			tips: '请选择',
+			autoRow:true,
+			prop: {name: 's_name', value: 's_name',},
+			tree: {
+				show: true,
+				showFolderIcon: false,
+				showLine: true,
+				indent: 20,
+				expandedKeys: [-3],
+				strict: false,
+			},
+			data: function () {
+				var modifyusers = {{.T.modifyusers}}
+				if(ids){
+					for(var i in modifyusers){
+						var userId = modifyusers[i]["_id"]
+						if (ids.includes(userId)){
+							modifyusers[i]["selected"] = true
+						}
+					}
+				}
+				return modifyusers
+			}
+		});
+	}
+
 	//保存用户信息
 	function saveNewUser(){
 		$("#myModal-addUser").modal("hide");
@@ -567,9 +621,16 @@
 		var auth = $("input:radio[name='auth-box']:checked").val();
 		var identity = $("input:radio[name='identity-box']:checked").val();
 		var platform = $("input:radio[name='platform-box']:checked").val();
+		var ids = [];
+		if (auth == "审核员" || auth == "管理员"){
+			var selectArr =addUserAffiliater.getValue();
+			for(var i in selectArr){
+				ids.push(selectArr[i]["_id"]);
+			}
+		}
 		$.post(
 			"/center/user/saveNewUser",
-			{"username":username,"relname":relname,"password":password,"email":email,"userAuth":auth,"identity":identity,"platform":platform},
+			{"username":username,"relname":relname,"password":password,"email":email,"userAuth":auth,"identity":identity,"platform":platform,"id":ids.join(",")},
 			function(r){
 				if(r.status == "y"){
 					showTip("保存成功",1000);
@@ -579,9 +640,41 @@
 				setTimeout(function(){
 					window.location.reload();
 				},1000)
+			}
+		)
+	}
+
+	//保存修改密码
+	function editUser(){
+		var password = $("#password").val().trim().replace(/\s/g,"");
+		var auth = $("input:radio[name='auth-box']:checked").val();
+		var identity = $("input:radio[name='identity-box']:checked").val();
+		var platform = $("input:radio[name='platform-box']:checked").val();
+		$("#myModal-edit").modal("hide");
+		var self =sessionStorage.getItem("self");
+		var id =sessionStorage.getItem("userid");
+		var ids = [];
+		if (auth == "审核员" || auth == "管理员"){
+			var selectArr =addUserAffiliater.getValue();
+			for(var i in selectArr){
+				ids.push(selectArr[i]["_id"]);
+			}
+		}
+		//console.log(id+"  "+$auth+"  "+username+"  "+self+"  "+password)
+		$.post("/center/user/updateUser",{"password":password,"userAuth":auth,"self":self,"userid":id,"identity":identity,"platform":platform,"id":ids.join(",")},function(r){
+			if("y" == r.status){
+				//alert("修改成功");
+				showTip("修改成功", 1000);
+			}else{
+				//alert("修改失败");
+				showTip("修改失败", 1000);
+			}
+			$('#com-alert').on('hidden.bs.modal', function () {
+				ttable.ajax.reload();
 			})
+		})
 	}
-	
+
 	//校验邮箱格式
 	function checkEmailGz(email){
 		var reg = /^([0-9A-Za-z\-_\.]+)@([0-9a-z]+\.[a-z]{2,3}(\.[a-z]{2})?)$/;