Bläddra i källkod

Merge branch 'dev2.0' of http://192.168.3.207:8080/data_processing/data_validation into dev2.0

zhengkun 3 år sedan
förälder
incheckning
c094c169a0

+ 5 - 5
src/front/front.go

@@ -53,9 +53,8 @@ type Front struct {
 	roleSecondEdit xweb.Mapper `xweb:"/front/role/second/edit"` //二级权限编辑
 
 	//project
-	projectList xweb.Mapper `xweb:"/front/project"`      //项目列表
-	projectSave xweb.Mapper `xweb:"/front/project/save"` //新增项目
-	//projectClear          xweb.Mapper `xweb:"/front/project/clear/"`         //项目清洗
+	projectList           xweb.Mapper `xweb:"/front/project"`                //项目列表
+	projectSave           xweb.Mapper `xweb:"/front/project/save"`           //新增项目
 	projectTaskSave       xweb.Mapper `xweb:"/front/project/task/save"`      //用户组任务分发
 	projectTaskList       xweb.Mapper `xweb:"/front/project/task/list"`      //用户组任务分发列表
 	projectTaskRetrieve   xweb.Mapper `xweb:"/front/project/task/retrieve"`  //用户组任务收回
@@ -67,8 +66,9 @@ type Front struct {
 	userTaskList     xweb.Mapper `xweb:"/front/user/task/list"`     //用户任务列表
 	userTaskRetrieve xweb.Mapper `xweb:"/front/user/task/retrieve"` //用户任务收回
 
-	groupTaskList xweb.Mapper `xweb:"/front/group/task/list"` //用户组任务列表
-
+	groupTaskListByAdmin xweb.Mapper `xweb:"/front/group/admin/task/list"` //用户组任务列表(系统管理员权限)
+	groupTaskListByGroup xweb.Mapper `xweb:"/front/group/task/list"`       //用户组任务列表(用户组权限)
+	groupTaskDeliver     xweb.Mapper `xweb:"/front/group/task/deliver"`    //用户组任务交付
 }
 
 func (f *Front) Index() {

+ 112 - 0
src/front/group.go

@@ -0,0 +1,112 @@
+package front
+
+import (
+	qu "qfw/util"
+	"strings"
+	"time"
+	"util"
+)
+
+// GroupTaskListByGroup 用户组权限用户组任务列表
+func (f *Front) GroupTaskListByGroup() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		start, _ := f.GetInteger("start")
+		limit, _ := f.GetInteger("length")
+		draw, _ := f.GetInteger("draw")
+		status := f.GetString("status")
+		searchStr := f.GetString("search[value]")
+		search := strings.TrimSpace(searchStr)
+		query := map[string]interface{}{
+			"s_stype": "group", //检索用户组任务
+		}
+		if status != "-1" { //任务状态
+			query["s_status"] = status
+		}
+		if search != "" {
+			query["$or"] = []interface{}{
+				map[string]interface{}{"s_projectname": map[string]interface{}{"$regex": search}},
+			}
+		}
+		list, _ := util.Mgo.Find(util.TASKCOLLNAME, query, nil, nil, false, start, limit)
+		count := util.Mgo.Count(util.TASKCOLLNAME, query)
+		f.ServeJson(map[string]interface{}{"draw": draw, "data": *list, "recordsFiltered": count, "recordsTotal": count})
+	} else {
+		_ = f.Render("project/task_group_list.html")
+	}
+}
+
+// GroupTaskListByAdmin 系统管理员权限用户组任务列表
+func (f *Front) GroupTaskListByAdmin() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		start, _ := f.GetInteger("start")
+		limit, _ := f.GetInteger("length")
+		draw, _ := f.GetInteger("draw")
+		status := f.GetString("status")
+		searchStr := f.GetString("search[value]")
+		search := strings.TrimSpace(searchStr)
+		query := map[string]interface{}{
+			"s_stype": "group", //检索用户组任务
+		}
+		if status != "-1" { //任务状态
+			query["s_status"] = status
+		}
+		if search != "" {
+			query["$or"] = []interface{}{
+				map[string]interface{}{"s_projectname": map[string]interface{}{"$regex": search}},
+			}
+		}
+		list, _ := util.Mgo.Find(util.TASKCOLLNAME, query, nil, nil, false, start, limit)
+		count := util.Mgo.Count(util.TASKCOLLNAME, query)
+		f.ServeJson(map[string]interface{}{"draw": draw, "data": *list, "recordsFiltered": count, "recordsTotal": count})
+	} else {
+		_ = f.Render("project/task_group_list.html")
+	}
+}
+
+// GroupTaskDeliver 用户组任务交付
+func (f *Front) GroupTaskDeliver() {
+	defer qu.Catch()
+	user := f.GetSession("user").(map[string]interface{})
+	username := qu.ObjToString(user["s_name"]) //当前登录用户
+	success := true
+	msg := ""
+	taskId := f.GetString("taskid") //用户组任务id
+	qu.Debug("Group Task ID:", taskId)
+	groupTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, taskId, map[string]interface{}{"v_sonids": 1})
+	if groupTask != nil && len(*groupTask) > 0 {
+		sonUserIds := (*groupTask)["v_sonids"].([]interface{})
+		if len(sonUserIds) > 0 {
+			for _, id := range sonUserIds {
+				userTaskId := qu.ObjToString(id)
+				userTask, _ := util.Mgo.FindById(util.TASKCOLLNAME, userTaskId, map[string]interface{}{"s_status": 1})
+				status := qu.ObjToString((*userTask)["s_status"])
+				if status != "已完成" || status != "已关闭" {
+					success = false
+					msg = "任务暂未完成"
+				}
+			}
+			if success { //用户组下用户任务全部完成,更新该用户组任务状态
+				success = util.Mgo.UpdateById(util.TASKCOLLNAME, taskId, map[string]interface{}{
+					"$set": map[string]interface{}{
+						"i_completetime": time.Now().Unix(),
+						"s_updateperson": username,
+						"i_updatetime":   time.Now().Unix(),
+						"s_status":       "已完成",
+					},
+				})
+				if !success {
+					msg = "更新任务信息失败"
+				}
+			}
+		} else {
+			success = false
+			msg = "任务暂未分配"
+		}
+	} else {
+		success = false
+		msg = "查询任务失败"
+	}
+	f.ServeJson(map[string]interface{}{"success": success, "msg": msg})
+}

+ 53 - 110
src/front/project.go

@@ -66,11 +66,11 @@ func (f *Front) ProjectSave() {
 	importDataNum := 0      //查询数量
 	var s_rulename []string //规则
 	user := f.GetSession("user").(map[string]interface{})
-	username := qu.ObjToString(user["s_name"])  //当前登录用户
-	stype := f.GetString("s_type")              //新建项目类型:数据库导入、excel导入
-	s_sourceinfo := f.GetString("s_sourceinfo") //数据表
-	s_sourceinfo = "f_sourceinfo_" + s_sourceinfo
-	if s_sourceinfo == "" {
+	username := qu.ObjToString(user["s_name"])     //当前登录用户
+	stype := f.GetString("s_type")                 //新建项目类型:数据库导入、excel导入
+	s_sourceinfoTmp := f.GetString("s_sourceinfo") //数据表
+	s_sourceinfo := "f_sourceinfo_" + s_sourceinfoTmp
+	if stype != "edit" && s_sourceinfo == "" {
 		f.ServeJson(map[string]interface{}{"success": false, "msg": "缺少数据存储表名"})
 		return
 	}
@@ -79,6 +79,7 @@ func (f *Front) ProjectSave() {
 		"s_name": s_name,
 	}
 	set := map[string]interface{}{}
+	qu.Debug(stype)
 	//导入数据
 	if stype == "excel" { //excel导入
 		s_entname = f.GetString("s_entname") //公司名称
@@ -90,21 +91,24 @@ func (f *Front) ProjectSave() {
 		rulename := f.GetString("s_rulename")      //规则名称
 		s_rulename = strings.Split(rulename, ",")
 		mf, _, err := f.GetFile("xlsx")
+		qu.Debug(s_entname, s_departname, s_rulename)
+
 		if err == nil {
 			importDataNum = ImportDataByExcel(s_sourceinfo, mf, &success, &msg, &successNum)
 		}
 		//保存项目信息
 		set = map[string]interface{}{
-			"s_name":       s_name,                        //项目名称
-			"s_entname":    s_entname,                     //公司名称
-			"s_departname": s_departname,                  //部门名称
-			"s_rulename":   strings.Join(s_rulename, ","), //规则名称
-			"i_importnum":  importDataNum,                 //导入数量
-			"s_sourceinfo": s_sourceinfo,                  //源数据表
-			"s_createname": username,                      //创建人
-			"s_status":     "未开始",                         //项目状态
-			"i_createtime": time.Now().Unix(),             //创建时间
-			"s_importtype": "excel",                       //导入类型
+			"s_name":           s_name,                                //项目名称
+			"s_entname":        s_entname,                             //公司名称
+			"s_departname":     s_departname,                          //部门名称
+			"s_rulename":       strings.Join(s_rulename, ","),         //规则名称
+			"i_importnum":      importDataNum,                         //导入数量
+			"s_sourceinfo":     s_sourceinfo,                          //源数据表
+			"s_sourcetaskinfo": "s_sourcetaskinfo_" + s_sourceinfoTmp, //源数据表
+			"s_createname":     username,                              //创建人
+			"s_status":         "未开始",                                 //项目状态
+			"i_createtime":     time.Now().Unix(),                     //创建时间
+			"s_importtype":     "excel",                               //导入类型
 		}
 	} else if stype == "coll" { //数据库导入
 		historyid := f.GetString("s_historyid")
@@ -174,64 +178,13 @@ func (f *Front) ProjectSave() {
 	}
 }
 
-// ProjectClear 项目清洗
-//func (f *Front) ProjectClear() {
-//	defer qu.Catch()
-//	if f.Method() == "POST" {
-//		projectid := f.GetString("s_projectid") //项目id
-//		project, _ := util.Mgo.FindById(util.PROJECTCOLLNAME, projectid, map[string]interface{}{"s_status": 1, "s_sourceinfo": 1})
-//		if project != nil && len(*project) > 0 {
-//			if status := qu.ObjToString((*project)["s_status"]); status == "未开始" {
-//				//TODO:调用数据质量评估接口
-//				//点击清洗更新项目状态为进行中
-//				b := util.Mgo.UpdateById(util.PROJECTCOLLNAME, projectid, map[string]interface{}{"$set": map[string]interface{}{"s_status": "进行中", "i_starttime": time.Now().Unix()}})
-//				qu.Debug("Update Porject:"+projectid+"	Status Success:", b)
-//			}
-//		} else {
-//			qu.Debug("Search Porject Failed:", projectid)
-//			f.ServeJson("查询项目信息失败")
-//			return
-//		}
-//
-//		sourceinfo := qu.ObjToString((*project)["s_sourceinfo"])                                                       //数据源表
-//		noTagAllDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": false})                    //达标数据总量
-//		noTagGiveDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": false, "b_isgive": true}) //达标数据已分发量
-//		noTagNoGiveDataNum := noTagAllDataNum - noTagGiveDataNum                                                       //达标待分发量
-//		tagAllDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": true})                       //未达标数据总量
-//		tagGiveDataNum := util.Mgo.Count(sourceinfo, map[string]interface{}{"b_istagging": true, "b_isgive": true})    //未达标数据已分发量
-//		tagNoGiveDataNum := tagAllDataNum - tagGiveDataNum                                                             //未达标待分发量
-//		allGiveDataNum := noTagGiveDataNum + tagGiveDataNum                                                            //总分发量
-//		allNoGiveDataNum := noTagNoGiveDataNum + tagNoGiveDataNum                                                      //总待分发量
-//		allDataNum := allGiveDataNum + allNoGiveDataNum
-//
-//		data := make(map[string]interface{})
-//		data["allDataNum"] = allDataNum
-//		data["allGiveDataNum"] = allGiveDataNum
-//		data["allNoGiveDataNum"] = allNoGiveDataNum
-//		data["noTagAllDataNum"] = noTagAllDataNum
-//		data["noTagGiveDataNum"] = noTagGiveDataNum
-//		data["noTagNoGiveDataNum"] = noTagNoGiveDataNum
-//		data["tagAllDataNum"] = tagAllDataNum
-//		data["tagGiveDataNum"] = tagGiveDataNum
-//		data["tagNoGiveDataNum"] = tagNoGiveDataNum
-//		data["s_projectid"] = projectid
-//		qu.Debug(data)
-//		f.ServeJson(data)
-//	} else {
-//		pid := f.GetString("pid")
-//		f.T["s_projectid"] = pid
-//		_ = f.Render("project/project_clear.html", &f.T)
-//	}
-//
-//}
-
 // ProjectTaskList 用户组任务分发列表
 func (f *Front) ProjectTaskList() {
 	defer qu.Catch()
 	projectid := f.GetString("pid") //项目id
 	qu.Debug("Project Id:", projectid)
 	if f.Method() == "POST" {
-		status := f.GetString("s_status") //任务状态
+		//status := f.GetString("s_status") //任务状态
 		searchStr := f.GetString("search[value]")
 		search := strings.TrimSpace(searchStr)
 		start, _ := f.GetInteger("start")
@@ -241,9 +194,9 @@ func (f *Front) ProjectTaskList() {
 			"s_projectid": projectid,
 			"s_stype":     "group",
 		}
-		if status != "-1" {
-			query["s_status"] = status
-		}
+		//if status != "-1" {
+		//	query["s_status"] = status
+		//}
 		if search != "" {
 			query["$or"] = []interface{}{
 				map[string]interface{}{"s_groupname": map[string]interface{}{"$regex": search}},
@@ -294,6 +247,7 @@ func (f *Front) ProjectTaskList() {
 		qu.Debug("达标量:", okAllDataNum, "达标已分发量:", okIsGiveDataNum, "达标待分发量:", okNotGiveDataNum, "达标已标注量:", okIsTagDataNum)
 		qu.Debug(" 未达标量:", IsNoOkAllDataNum, " 未达标已分发量:", IsNoOkIsGiveDataNum, " 未达标待分发量:", IsNotOkNotGiveDataNum, " 未达标已标注量:", IsNotOkIsTagDataNum)
 		f.T["s_projectid"] = projectid
+		f.T["s_sourceinfo"] = sourceinfo
 		f.T["allDataNum"] = allDataNum
 		f.T["okAllDataNum"] = okAllDataNum
 		f.T["okIsGiveDataNum"] = okIsGiveDataNum
@@ -322,17 +276,21 @@ func (f *Front) ProjectTaskSave() {
 	success := false
 	msg := ""
 	user := f.GetSession("user").(map[string]interface{})
-	username := qu.ObjToString(user["s_name"])                                                  //当前登录用户
-	projectid := f.GetString("s_projectid")                                                     //项目标识
-	projectname := f.GetString("s_projectname")                                                 //项目名称
-	sourceinfo := f.GetString("s_sourceinfo")                                                   //源数据表
-	sourcetaskinfo := "f_sourcetaskinfo_" + strings.ReplaceAll(sourceinfo, "f_sourceinfo_", "") //任务日志表
+	username := qu.ObjToString(user["s_name"]) //当前登录用户
+	projectid := f.GetString("s_projectid")    //项目标识
+	project, _ := util.Mgo.FindById(util.PROJECTCOLLNAME, projectid, nil)
+	projectname := qu.ObjToString((*project)["s_projectname"])       //项目名称
+	sourceinfo := qu.ObjToString((*project)["s_sourceinfo"])         //源数据表
+	sourcetaskinfo := qu.ObjToString((*project)["s_sourcetaskinfo"]) //任务日志表
 	group := f.GetString("s_group")
+	qu.Debug(group)
 	stype := f.GetString("s_type")
+	qu.Debug("项目id:", projectid, " 项目名称:", projectname, "sourcetaskinfo:", sourcetaskinfo)
 	if err := json.Unmarshal([]byte(group), &groupArr); err != nil {
 		qu.Debug("GroupInfo Unmarshal Failed:", err)
 		msg = "用户组信息解析失败"
 	} else {
+		qu.Debug("用户组信息:", groupArr)
 		if stype == "notag" { //如果分发的是达标数据且进行了初步质检,将没有质检记录的字段从v_taginfo标注记录中删除
 			DeleleDataTagInfo(sourceinfo)
 		}
@@ -349,27 +307,30 @@ func (f *Front) ProjectTaskSave() {
 			}
 			groupIdTask[groupTaskIdStr] = gt
 			groupTask := map[string]interface{}{
-				"_id":              groupTaskId,                               //生成任务id
-				"s_projectid":      projectid,                                 //项目标识
-				"s_projectname":    projectname,                               //项目名称
-				"s_status":         "未开始",                                     //任务状态
-				"s_personid":       qu.ObjToString(groupInfo["s_personid"]),   //任务负责人标识
-				"s_personname":     qu.ObjToString(groupInfo["s_personname"]), //任务负责人
-				"s_groupname":      qu.ObjToString(groupInfo["s_groupname"]),  //用户组名称
-				"s_groupid":        groupId,                                   //用户组标识
-				"i_givenum":        givenum,                                   //分发数据量
-				"s_createname":     username,                                  //创建人
-				"i_createtime":     time.Now().Unix(),                         //创建时间
-				"s_progress":       "0%",                                      //完成进度
-				"s_sourceinfo":     sourceinfo,                                //源数据表
-				"s_sourcetaskinfo": sourcetaskinfo,                            //任务日志表
-				"s_stype":          "group",                                   //任务类型
+				"_id":              groupTaskId,                                //生成任务id
+				"s_projectid":      projectid,                                  //项目标识
+				"s_projectname":    projectname,                                //项目名称
+				"s_status":         "未开始",                                      //任务状态
+				"s_personid":       qu.ObjToString(groupInfo["s_personid"]),    //任务负责人标识
+				"s_personname":     qu.ObjToString(groupInfo["s_personname"]),  //任务负责人
+				"s_groupname":      qu.ObjToString(groupInfo["s_groupname"]),   //用户组名称
+				"s_groupid":        groupId,                                    //用户组标识
+				"i_givenum":        givenum,                                    //分发数据量
+				"s_createname":     username,                                   //创建人
+				"i_createtime":     time.Now().Unix(),                          //创建时间
+				"s_progress":       "0%",                                       //完成进度
+				"s_sourceinfo":     sourceinfo,                                 //源数据表
+				"s_sourcetaskinfo": sourcetaskinfo,                             //任务日志表
+				"s_stype":          "group",                                    //任务类型
+				"s_entname":        qu.ObjToString((*project)["s_entname"]),    //公司名称
+				"s_departname":     qu.ObjToString((*project)["s_departname"]), //部门名称
+				"s_rulename":       qu.ObjToString((*project)["s_rulename"]),   //规则名称
 			}
 			taskArr = append(taskArr, groupTask)
 		}
 	}
 	if len(taskArr) > 0 {
-		//分发数据后更新项目中用户组标识信息
+		//分发数据后更新项目中用户组标识信息和用户组任务id
 		success = util.Mgo.UpdateById(util.PROJECTCOLLNAME, projectid, map[string]interface{}{
 			"$push": map[string]interface{}{
 				"v_groupids": map[string]interface{}{
@@ -390,7 +351,7 @@ func (f *Front) ProjectTaskSave() {
 			}
 		}
 	}
-	qu.Debug("Msg:", msg)
+	qu.Debug("Success:", success, "Msg:", msg)
 	f.ServeJson(map[string]interface{}{"success": success, "msg": msg})
 }
 
@@ -1054,21 +1015,3 @@ func UpdateMarkColl(bidData, markData, tagInfoMap, baseInfoMap *map[string]inter
 		(*baseInfoMap)["i_ckdata"] = 1
 	}
 }
-
-func (f *Front) UserTaskList() {
-	qu.Catch()
-	if f.Method() == "POST" {
-
-	} else {
-		_ = f.Render("project/task_user_list.html")
-	}
-}
-
-func (f *Front) GroupTaskList() {
-	qu.Catch()
-	if f.Method() == "POST" {
-
-	} else {
-		_ = f.Render("project/task_group_list.html")
-	}
-}

+ 4 - 4
src/front/user.go

@@ -316,7 +316,7 @@ func (f *Front) UserModify() {
 func (f *Front) GroupList() {
 	qu.Catch()
 	query := map[string]interface{}{"b_delete": false, "i_state": false}
-	field := map[string]interface{}{"s_name": 1}
+	field := map[string]interface{}{"s_name": 1, "s_personname": 1}
 	info, b := Mgo.Find("s_group", query, nil, field, false, -1, -1)
 	if b && len(*info) > 0 {
 		f.ServeJson(map[string]interface{}{
@@ -419,8 +419,8 @@ func (f *Front) UserTaskSave() {
 	}
 }
 
-// UerTaskList 用户任务分发列表
-func (f *Front) UerTaskList() {
+// UserTaskList 用户任务分发列表
+func (f *Front) UserTaskList() {
 	defer qu.Catch()
 	//groupId := f.GetString("s_groupid") //用户组id
 	groupTaskId := f.GetString("grouptaskid") //用户组任务id
@@ -458,7 +458,7 @@ func (f *Front) UerTaskList() {
 		f.T["isNotGiveNum"] = isNotGiveNum
 		f.T["isTagNum"] = isTagNum
 		f.T["isNotTagNum"] = isNotTagNum
-		_ = f.Render("/user/task.html", &f.T)
+		_ = f.Render("project/task_user_list.html", &f.T)
 	}
 }
 

+ 3 - 2
src/main.go

@@ -14,7 +14,7 @@ import (
 func init() {
 	qu.ReadConfig(&Sysconfig) //初始化config
 	qu.ReadConfig("./web/qua_res/qua_config.json", &Quaconfig)
-	InitConfig()              //初始化连接
+	InitConfig() //初始化连接
 	InitOss()
 	//xweb框架配置
 	xweb.Config.RecoverPanic = true
@@ -34,8 +34,9 @@ func init() {
 }
 
 func main() {
+	//qu.Debug(SE.EncodeString("60b99c2d72c25c51c492af6a"))
+	//return
 	//go front.QuaFieldScore([]string{"buyer"},"zktest_data") //临时测试-质量
-
 	//Mgo.UpdateById("test11", "61a9975a180a78e6edf8285d", map[string]interface{}{
 	//	"$inc": map[string]interface{}{
 	//		"count": -555,

+ 35 - 93
src/web/templates/project/project_clear.html

@@ -40,9 +40,9 @@
                                         <label class="form-inline" style="margin-left: 20px">已标注:
                                         <input type="text" class="form-control" style="width: 80px" readonly value="{{.T.allIsTagDataNum}}"></label>
                                     </div>
-                                    <div class="col-xs-6 form-group">
+                                    <div class="col-xs-3 form-group">
                                         <label class="form-inline">操作:
-                                            <input type="button" class="btn btn-info" onclick="dispatchTak('0')" value="分发">
+                                            <input type="button" class="btn btn-info" onclick="dispatchTak('all')" value="分发">
                                             <input type="button" class="btn btn-primary" value="质检">
                                             <input type="button" class="btn btn-success" value="质检结果">
                                         </label>
@@ -59,9 +59,9 @@
                                         <label class="form-inline" style="margin-left: 20px">已标注:
                                             <input type="text" class="form-control" style="width: 80px" readonly value="{{.T.okIsTagDataNum}}"></label>
                                     </div>
-                                    <div class="col-xs-6 form-group">
+                                    <div class="col-xs-3 form-group">
                                         <label class="form-inline">操作:
-                                            <input type="button" class="btn btn-info" onclick="dispatchTak('1')" value="分发">
+                                            <input type="button" class="btn btn-info" onclick="dispatchTak('notag')" value="分发">
                                             <input type="button" class="btn btn-primary" value="质检">
                                             <input type="button" class="btn btn-success" value="质检结果">
                                         </label>
@@ -78,9 +78,9 @@
                                         <label class="form-inline" style="margin-left: 20px">已标注:
                                             <input type="text" class="form-control" style="width: 80px" readonly value="{{.T.IsNotOkIsTagDataNum}}"></label>
                                     </div>
-                                    <div class="col-xs-6 form-group">
+                                    <div class="col-xs-3 form-group">
                                         <label class="form-inline">操作:
-                                            <input type="button" class="btn btn-info" onclick="dispatchTak('2')" value="分发">
+                                            <input type="button" class="btn btn-info" onclick="dispatchTak('tag')" value="分发">
                                             <input type="button" class="btn btn-primary" value="质检">
                                             <input type="button" class="btn btn-success" value="质检结果">
                                         </label>
@@ -151,12 +151,12 @@
                                     <div id="itemDiv" class="form-group" style="margin-left: 10px;display: none">
                                         <select id="group-select-clone"></select>
                                         <label class="control-label form-inline" style="margin-left: 20px">数据量(条):
-                                            <input type="number" class="form-control"></label>
+                                            <input type="number" class="form-control" required></label>
                                     </div>
-                                    <div class="form-group" style="margin-left: 10px;">
+                                    <div class="form-group itemDiv" style="margin-left: 10px;">
                                         <select class="selectpicker" id="group-select"></select>
                                         <label class="control-label form-inline" style="margin-left: 20px">数据量(条):
-                                            <input type="number" class="form-control by-use"></label>
+                                            <input type="number" class="form-control by-use" required></label>
                                     </div>
                                 </div>
                             </div>
@@ -172,72 +172,14 @@
     </div><!-- /.modal -->
 </div>
 
-
-<div class="modal fade" id="modal-edit-project" tabindex="-1" role="dialog" aria-hidden="true">
-    <div class="modal-dialog" style="width: 30%">
-        <div class="modal-content">
-            <div class="modal-header">
-                <div class="modal-header">
-                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
-                    <div class="edit-info">
-                        <span class="glyphicon glyphicon-alert" aria-hidden="true"></span>
-                        <span class="h4">编辑项目</span>
-                    </div>
-                    <div class="edit-form">
-                        <hr>
-                        <form class="form-horizontal" enctype="multipart/form-data">
-                            <div class="box-body">
-                                <div class="form-group">
-                                    <label class="col-sm-3 control-label">公司名称</label>
-                                    <div class="col-sm-5">
-                                        <input type="text" class="form-control" id="company-edit-name" readonly>
-                                    </div>
-                                </div>
-                                <div class="form-group">
-                                    <label class="col-sm-3 control-label">部门名称</label>
-                                    <div class="col-sm-5">
-                                        <input type="text" class="form-control" id="dpart-edit-name">
-                                    </div>
-                                </div>
-                                <div class="form-group">
-                                    <label class="col-sm-3 control-label">规则名称</label>
-                                    <div class="col-sm-5">
-                                        <input type="text" class="form-control" id="rule-edit-name">
-                                    </div>
-                                </div>
-                                <div class="form-group">
-                                    <label class="col-sm-3 control-label">售后人员</label>
-                                    <div class="col-sm-6">
-                                        <input type="text" class="form-control" id="edit-person">
-                                    </div>
-                                </div>
-                                <div class="form-group">
-                                    <label class="col-sm-3 control-label">选择标注字段</label>
-                                    <div class="col-sm-6">
-                                        <select class="form-control selectpicker" multiple
-                                                id="markFieldSelect"></select>
-                                    </div>
-                                </div>
-                            </div>
-                        </form>
-                    </div>
-                </div>
-            </div>
-            <div class="modal-footer">
-                <input type="button" onclick="saveData()" class="btn btn-primary saveBtn" value="保存">
-                <input type="button" onclick="cancelModel()" class="btn btn-default" value="取消">
-            </div>
-        </div>
-    </div><!-- /.modal -->
-</div>
-
-
 {{include "com/footer.html"}}
 <script>
     menuActive("project");
 
     let projectid = {{ .T.s_projectid }}
     let groupList = []
+    let tableData = []
+    let stype = ""                                  // 分发类型:所有数据:all 达标数据:notag 未达标:tag
 
     $(function () {
         ttable = $('#dataTable').dataTable({
@@ -247,12 +189,6 @@
             "ordering": false,
             "info": true,
             "autoWidth": false,
-            "serverSide": true,
-            // "ajax": {
-            //     "url": "/front/project/task/list",
-            //     "type": "post",
-            //     "data": {"status": "-1"}
-            // },
             "language": {
                 "url": "/dist/js/dataTables.chinese.lang"
             },
@@ -295,9 +231,12 @@
         $.ajax({
             url: "/front/project/task/list",
             type: "POST",
-            data: {"pid`": projectid},
+            data: {"pid": projectid},
             success: function (r) {
-                console.log(r)
+                if (r.data.length > 0) {
+                    ttable.fnClearTable();
+                    ttable.fnAddData(r.data);
+                }
             }
         })
         $.ajax({
@@ -321,7 +260,7 @@
                 data: {"id": id},
                 success: function (r) {
                     if (r.rep) {
-                        ttable.ajax.reload();
+
                     } else {
                         showTip("状态修改失败");
                     }
@@ -330,22 +269,8 @@
         })
     }
 
-    function saveData() {
-        $.ajax({
-            url: "",
-            type: 'POST',
-            data: projectmap,
-            success: function (r) {
-                if (r.rep) {
-                    ttable.api().ajax.reload();
-                } else {
-                    showTip("保存失败");
-                }
-            }
-        })
-    }
-
     function dispatchTak(val) {
+        stype = val
         $('#modal-create-task').modal('show')
         for (var i in groupList) {
             var opt = document.createElement('option');
@@ -378,6 +303,7 @@
     }
 
     function saveTask() {
+        console.log(stype)
         $('#TaskDiv select').each(function () {
             let ms = $(this).find("option:checked").val()
             console.log(ms)
@@ -387,6 +313,22 @@
             let ms = $(this).val()
             console.log(ms)
         })
+
+        let arr = []
+        arr.push({"s_groupid": "61a47d76c908d368871f5033", "s_groupname": "ceshi", "s_personname": "111", "i_givenum": 100})
+        console.log(JSON.stringify(arr))
+        $.ajax({
+            url: "/front/project/task/save",
+            type: 'POST',
+            data: {"s_projectid": projectid, "s_group": JSON.stringify(arr), "s_type": stype},
+            success: function (r) {
+                if (r.success) {
+                    location.reload()
+                } else {
+                    showTip(r.msg);
+                }
+            }
+        })
     }
 
 </script>

+ 1 - 1
src/web/templates/project/project_list.html

@@ -433,7 +433,7 @@
         tmp["v_field"] = m
         if (tmp !== projectmap) {
             $.ajax({
-                url: "/front/project/save",
+                url: "/front/project/task/save",
                 type: 'POST',
                 data: projectmap,
                 success: function (r) {