Browse Source

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

maxiaoshan 3 years ago
parent
commit
93bb363f29

+ 3 - 209
src/front/front.go

@@ -2,14 +2,10 @@ package front
 
 import (
 	"fmt"
-	"go.mongodb.org/mongo-driver/bson"
+	"github.com/go-xweb/xweb"
 	"mongodb"
 	qu "qfw/util"
 	"strconv"
-	"strings"
-	"time"
-
-	"github.com/go-xweb/xweb"
 	. "util"
 )
 
@@ -36,6 +32,7 @@ type Front struct {
 	userState          xweb.Mapper `xweb:"/front/group/user/state"`  //用户状态
 	userDel            xweb.Mapper `xweb:"/front/group/user/del"`    //用户删除
 	userModify         xweb.Mapper `xweb:"/front/group/user/modify"` // 修改用户信息
+	groupList          xweb.Mapper `xweb:"/front/group/list"`        //用户组选择列表
 
 	//menu
 	menu           xweb.Mapper `xweb:"/front/menu"`            //查一级菜单
@@ -58,7 +55,7 @@ type Front struct {
 	//project
 	projectList           xweb.Mapper `xweb:"/front/project"`                //项目列表
 	projectSave           xweb.Mapper `xweb:"/front/project/save"`           //新增项目
-	projectClear          xweb.Mapper `xweb:"/front/project/clear"`          //项目清洗
+	projectClear          xweb.Mapper `xweb:"/front/project/clear/"`         //项目清洗
 	projectTaskSave       xweb.Mapper `xweb:"/front/project/task/save"`      //用户组任务分发
 	projectTaskList       xweb.Mapper `xweb:"/front/project/task/list"`      //用户组任务分发列表
 	projectTaskRetrieve   xweb.Mapper `xweb:"/front/project/task/retrieve"`  //用户组任务收回
@@ -112,206 +109,3 @@ func GetUserMenu(role int) []map[string]interface{} {
 	}
 	return list
 }
-
-func (f *Front) UserGroup() {
-	defer qu.Catch()
-	if f.Method() == "POST" {
-		start, _ := f.GetInteger("start")
-		limit, _ := f.GetInteger("length")
-		draw, _ := f.GetInteger("draw")
-		searchStr := f.GetString("search[value]")
-		search := strings.TrimSpace(searchStr)
-		query := map[string]interface{}{
-			"b_delete": false,
-		}
-		if search != "" {
-			query["$or"] = []interface{}{
-				bson.M{"s_name": bson.M{"$regex": search}},
-			}
-		}
-
-		data, _ := Mgo.Find("s_group", query, `{"i_createtime":-1}`, nil, false, start, limit)
-		count := Mgo.Count("s_group", query)
-		f.ServeJson(map[string]interface{}{
-			"draw":            draw,
-			"data":            data,
-			"recordsFiltered": count,
-			"recordsTotal":    count,
-		})
-	} else {
-		_ = f.Render("user/user_group.html")
-	}
-}
-
-func (f *Front) UserGroupNew() {
-	defer qu.Catch()
-	if f.Method() == "POST" {
-		data := GetPostForm(f.Request)
-		group := *qu.ObjToMap(data["group"])
-		user := *qu.ObjToMap(data["user"])
-		currenttime := time.Now().Unix()
-		group["i_createtime"] = currenttime
-		group["i_updatetime"] = currenttime
-		group["b_delete"] = false
-		gid := Mgo.Save("s_group", group) // 保存用户组
-		if gid != "" {
-			// 1、用户组管理员账号
-			m1 := make(map[string]interface{})
-			m1["s_groupid"] = gid
-			m1["s_name"] = ""
-			m1["s_login"] = group["s_name"]
-			m1["s_password"] = qu.SE.EncodeString(qu.ObjToString(group["s_password"]))
-			m1["i_power"] = "1"
-			m1["s_phone"] = ""
-			m1["i_createtime"] = currenttime
-			m1["i_updatetime"] = currenttime
-			m1["i_state"] = true
-			m1["b_delete"] = false
-			Mgo.Save("s_user", m1)
-			// 2、质检员账号
-			for i := 0; i < qu.IntAll(user["u1_size"]); i++ {
-				m := make(map[string]interface{})
-				m["s_groupid"] = gid
-				m["s_name"] = ""
-				m["s_login"] = qu.ObjToString(group["s_name"]) + "_zj_" + strconv.Itoa(i)
-				m["s_password"] = qu.SE.EncodeString(qu.ObjToString(user["u1_pwd"]))
-				m["i_power"] = "2"
-				m["s_phone"] = ""
-				m["i_createtime"] = currenttime
-				m["i_updatetime"] = currenttime
-				m["i_state"] = true
-				m["b_delete"] = false
-				Mgo.Save("s_user", m)
-			}
-			// 3、普通用户账号
-			for i := 0; i < qu.IntAll(user["u2_size"]); i++ {
-				m := make(map[string]interface{})
-				m["s_groupid"] = gid
-				m["s_name"] = ""
-				m["s_login"] = qu.ObjToString(group["s_name"]) + "_" + strconv.Itoa(i)
-				m["s_password"] = qu.SE.EncodeString(qu.ObjToString(user["u2_pwd"]))
-				m["i_power"] = "3"
-				m["s_phone"] = ""
-				m["i_createtime"] = currenttime
-				m["i_updatetime"] = currenttime
-				m["i_state"] = true
-				m["b_delete"] = false
-				Mgo.Save("s_user", m)
-			}
-			f.ServeJson(map[string]interface{}{
-				"rep": true,
-			})
-		} else {
-			f.ServeJson(map[string]interface{}{
-				"rep": false,
-			})
-		}
-	} else {
-		f.T["pwd"] = Password
-		_ = f.Render("user/user_group_create.html", &f.T)
-	}
-}
-
-func (f *Front) UserGroupState() {
-	defer qu.Catch()
-	if f.Method() == "POST" {
-		data := GetPostForm(f.Request)
-		b := Mgo.UpdateById("s_group", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"i_state": data["state"]}})
-		f.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-	}
-}
-
-func (f *Front) UserGroupStateBulk() {
-	defer qu.Catch()
-	if f.Method() == "POST" {
-		data := GetPostForm(f.Request)
-		qu.Debug(data)
-		ids := strings.Split(qu.ObjToString(data["ids"]), ",")
-		for _, k := range ids {
-			b := Mgo.UpdateById("s_group", k, map[string]interface{}{"$set": map[string]interface{}{"i_state": data["state"]}})
-			if !b {
-				f.ServeJson(map[string]interface{}{
-					"rep": b,
-				})
-			}
-		}
-		f.ServeJson(map[string]interface{}{
-			"rep": true,
-		})
-	}
-}
-
-func (f *Front) UserGroupDel() {
-	defer qu.Catch()
-	if f.Method() == "POST" {
-		data := GetPostForm(f.Request)
-		qu.Debug(data)
-		b := Mgo.UpdateById("s_group", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"b_delete": true}})
-		f.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-	}
-}
-
-func (f *Front) UserManage() {
-	defer qu.Catch()
-	if f.Method() == "POST" {
-		data := GetPostForm(f.Request)
-		gid := qu.ObjToString(data["gid"])
-		draw, _ := f.GetInteger("draw")
-		query := map[string]interface{}{"s_groupid": gid, "b_delete": false}
-		info, b := Mgo.Find("s_user", query, nil, nil, false, -1, -1)
-		count := Mgo.Count("s_user", query)
-		if b && len(*info) > 0 {
-			f.ServeJson(map[string]interface{}{
-				"rep":             true,
-				"data":            *info,
-				"draw":            draw,
-				"recordsFiltered": count,
-				"recordsTotal":    count,
-			})
-		} else {
-			f.ServeJson(map[string]interface{}{
-				"rep": false,
-			})
-		}
-	} else {
-		f.T["gid"] = f.GetString("id")
-		_ = f.Render("user/user_list.html", &f.T)
-	}
-}
-
-func (f *Front) UserState() {
-	defer qu.Catch()
-	if f.Method() == "POST" {
-		data := GetPostForm(f.Request)
-		b := Mgo.UpdateById("s_user", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"i_state": data["state"]}})
-		f.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-	}
-}
-
-func (f *Front) UserDel() {
-	defer qu.Catch()
-	if f.Method() == "POST" {
-		data := GetPostForm(f.Request)
-		b := Mgo.UpdateById("s_user", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"b_delete": true}})
-		f.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-	}
-}
-
-func (f *Front) UserModify() {
-	defer qu.Catch()
-	if f.Method() == "POST" {
-		data := GetPostForm(f.Request)
-		b := Mgo.UpdateById("s_user", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"s_name": data["s_name"], "s_phone": data["s_phone"]}})
-		f.ServeJson(map[string]interface{}{
-			"rep": b,
-		})
-	}
-}

+ 40 - 32
src/front/project.go

@@ -177,41 +177,49 @@ func (f *Front) ProjectSave() {
 // ProjectClear 项目清洗
 func (f *Front) ProjectClear() {
 	defer qu.Catch()
-	projectid := f.GetString("s_projectid") //项目id
-	project, _ := util.Mgo.FindById(util.PROJECTCOLLNAME, projectid, map[string]interface{}{"s_status": 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)
+	if f.Method() == "POST" {
+		projectid := f.GetString("s_projectid") //项目id
+		project, _ := util.Mgo.FindById(util.PROJECTCOLLNAME, projectid, map[string]interface{}{"s_status": 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 := f.GetString("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
+
+		f.ServeJson(map[string]interface{}{"allDataNum": allDataNum})
+		//f.T["allDataNum"] = allDataNum
+		//f.T["allGiveDataNum"] = allGiveDataNum
+		//f.T["allNoGiveDataNum"] = allNoGiveDataNum
+		//f.T["noTagAllDataNum"] = noTagAllDataNum
+		//f.T["noTagGiveDataNum"] = noTagGiveDataNum
+		//f.T["noTagNoGiveDataNum"] = noTagNoGiveDataNum
+		//f.T["tagAllDataNum"] = tagAllDataNum
+		//f.T["tagGiveDataNum"] = tagGiveDataNum
+		//f.T["tagNoGiveDataNum"] = tagNoGiveDataNum
+		//f.T["s_projectid"] = projectid
 	} else {
-		qu.Debug("Search Porject Failed:", projectid)
-		f.ServeJson("查询项目信息失败")
-		return
+		pid := f.GetString("pid")
+		f.T["s_projectid"] = pid
+		_ = f.Render("project/project_clear.html", &f.T)
 	}
-	sourceinfo := f.GetString("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
-	f.T["allDataNum"] = allDataNum
-	f.T["allGiveDataNum"] = allGiveDataNum
-	f.T["allNoGiveDataNum"] = allNoGiveDataNum
-	f.T["noTagAllDataNum"] = noTagAllDataNum
-	f.T["noTagGiveDataNum"] = noTagGiveDataNum
-	f.T["noTagNoGiveDataNum"] = noTagNoGiveDataNum
-	f.T["tagAllDataNum"] = tagAllDataNum
-	f.T["tagGiveDataNum"] = tagGiveDataNum
-	f.T["tagNoGiveDataNum"] = tagNoGiveDataNum
-	f.T["s_projectid"] = projectid
-	_ = f.Render("user/user_group.html", &f.T)
+
 }
 
 // ProjectTaskList 用户组任务分发列表

+ 220 - 0
src/front/user.go

@@ -3,8 +3,12 @@ package front
 import (
 	"github.com/dchest/captcha"
 	"github.com/gorilla/sessions"
+	"go.mongodb.org/mongo-driver/bson"
 	mgo "mongodb"
 	qu "qfw/util"
+	"strconv"
+	"strings"
+	"time"
 	. "util"
 )
 
@@ -103,6 +107,222 @@ func (f *Front) Logout() {
 	f.Redirect("/")
 }
 
+func (f *Front) UserGroup() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		start, _ := f.GetInteger("start")
+		limit, _ := f.GetInteger("length")
+		draw, _ := f.GetInteger("draw")
+		searchStr := f.GetString("search[value]")
+		search := strings.TrimSpace(searchStr)
+		query := map[string]interface{}{
+			"b_delete": false,
+		}
+		if search != "" {
+			query["$or"] = []interface{}{
+				bson.M{"s_name": bson.M{"$regex": search}},
+			}
+		}
+
+		data, _ := Mgo.Find("s_group", query, `{"i_createtime":-1}`, nil, false, start, limit)
+		count := Mgo.Count("s_group", query)
+		f.ServeJson(map[string]interface{}{
+			"draw":            draw,
+			"data":            data,
+			"recordsFiltered": count,
+			"recordsTotal":    count,
+		})
+	} else {
+		_ = f.Render("user/user_group.html")
+	}
+}
+
+func (f *Front) UserGroupNew() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		data := GetPostForm(f.Request)
+		group := *qu.ObjToMap(data["group"])
+		user := *qu.ObjToMap(data["user"])
+		currenttime := time.Now().Unix()
+		group["i_createtime"] = currenttime
+		group["i_updatetime"] = currenttime
+		group["b_delete"] = false
+		gid := Mgo.Save("s_group", group) // 保存用户组
+		if gid != "" {
+			// 1、用户组管理员账号
+			m1 := make(map[string]interface{})
+			m1["s_groupid"] = gid
+			m1["s_name"] = ""
+			m1["s_login"] = group["s_name"]
+			m1["s_password"] = qu.SE.EncodeString(qu.ObjToString(group["s_password"]))
+			m1["i_power"] = "1"
+			m1["s_phone"] = ""
+			m1["i_createtime"] = currenttime
+			m1["i_updatetime"] = currenttime
+			m1["i_state"] = true
+			m1["b_delete"] = false
+			Mgo.Save("s_user", m1)
+			// 2、质检员账号
+			for i := 0; i < qu.IntAll(user["u1_size"]); i++ {
+				m := make(map[string]interface{})
+				m["s_groupid"] = gid
+				m["s_name"] = ""
+				m["s_login"] = qu.ObjToString(group["s_name"]) + "_zj_" + strconv.Itoa(i)
+				m["s_password"] = qu.SE.EncodeString(qu.ObjToString(user["u1_pwd"]))
+				m["i_power"] = "2"
+				m["s_phone"] = ""
+				m["i_createtime"] = currenttime
+				m["i_updatetime"] = currenttime
+				m["i_state"] = true
+				m["b_delete"] = false
+				Mgo.Save("s_user", m)
+			}
+			// 3、普通用户账号
+			for i := 0; i < qu.IntAll(user["u2_size"]); i++ {
+				m := make(map[string]interface{})
+				m["s_groupid"] = gid
+				m["s_name"] = ""
+				m["s_login"] = qu.ObjToString(group["s_name"]) + "_" + strconv.Itoa(i)
+				m["s_password"] = qu.SE.EncodeString(qu.ObjToString(user["u2_pwd"]))
+				m["i_power"] = "3"
+				m["s_phone"] = ""
+				m["i_createtime"] = currenttime
+				m["i_updatetime"] = currenttime
+				m["i_state"] = true
+				m["b_delete"] = false
+				Mgo.Save("s_user", m)
+			}
+			f.ServeJson(map[string]interface{}{
+				"rep": true,
+			})
+		} else {
+			f.ServeJson(map[string]interface{}{
+				"rep": false,
+			})
+		}
+	} else {
+		f.T["pwd"] = Password
+		_ = f.Render("user/user_group_create.html", &f.T)
+	}
+}
+
+func (f *Front) UserGroupState() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		data := GetPostForm(f.Request)
+		b := Mgo.UpdateById("s_group", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"i_state": data["state"]}})
+		f.ServeJson(map[string]interface{}{
+			"rep": b,
+		})
+	}
+}
+
+func (f *Front) UserGroupStateBulk() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		data := GetPostForm(f.Request)
+		qu.Debug(data)
+		ids := strings.Split(qu.ObjToString(data["ids"]), ",")
+		for _, k := range ids {
+			b := Mgo.UpdateById("s_group", k, map[string]interface{}{"$set": map[string]interface{}{"i_state": data["state"]}})
+			if !b {
+				f.ServeJson(map[string]interface{}{
+					"rep": b,
+				})
+			}
+		}
+		f.ServeJson(map[string]interface{}{
+			"rep": true,
+		})
+	}
+}
+
+func (f *Front) UserGroupDel() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		data := GetPostForm(f.Request)
+		qu.Debug(data)
+		b := Mgo.UpdateById("s_group", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"b_delete": true}})
+		f.ServeJson(map[string]interface{}{
+			"rep": b,
+		})
+	}
+}
+
+func (f *Front) UserManage() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		data := GetPostForm(f.Request)
+		gid := qu.ObjToString(data["gid"])
+		draw, _ := f.GetInteger("draw")
+		query := map[string]interface{}{"s_groupid": gid, "b_delete": false}
+		info, b := Mgo.Find("s_user", query, nil, nil, false, -1, -1)
+		count := Mgo.Count("s_user", query)
+		if b && len(*info) > 0 {
+			f.ServeJson(map[string]interface{}{
+				"rep":             true,
+				"data":            *info,
+				"draw":            draw,
+				"recordsFiltered": count,
+				"recordsTotal":    count,
+			})
+		} else {
+			f.ServeJson(map[string]interface{}{
+				"rep": false,
+			})
+		}
+	} else {
+		f.T["gid"] = f.GetString("id")
+		_ = f.Render("user/user_list.html", &f.T)
+	}
+}
+
+func (f *Front) UserState() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		data := GetPostForm(f.Request)
+		b := Mgo.UpdateById("s_user", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"i_state": data["state"]}})
+		f.ServeJson(map[string]interface{}{
+			"rep": b,
+		})
+	}
+}
+
+func (f *Front) UserDel() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		data := GetPostForm(f.Request)
+		b := Mgo.UpdateById("s_user", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"b_delete": true}})
+		f.ServeJson(map[string]interface{}{
+			"rep": b,
+		})
+	}
+}
+
+func (f *Front) UserModify() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		data := GetPostForm(f.Request)
+		b := Mgo.UpdateById("s_user", qu.ObjToString(data["id"]), map[string]interface{}{"$set": map[string]interface{}{"s_name": data["s_name"], "s_phone": data["s_phone"]}})
+		f.ServeJson(map[string]interface{}{
+			"rep": b,
+		})
+	}
+}
+
+func (f *Front) GroupList() {
+	qu.Catch()
+	query := map[string]interface{}{"b_delete": false, "i_state": false}
+	field := map[string]interface{}{"s_name": 1}
+	info, b := Mgo.Find("s_group", query, nil, field, false, -1, -1)
+	if b && len(*info) > 0 {
+		f.ServeJson(map[string]interface{}{
+			"rep":  b,
+			"data": *info,
+		})
+	}
+}
+
 // UerTaskList 用户任务分发列表
 func (f *Front) UerTaskList() {
 	defer qu.Catch()

+ 379 - 0
src/web/templates/project/project_clear.html

@@ -0,0 +1,379 @@
+{{include "com/inc.html"}}
+<!-- Main Header -->
+{{include "com/header.html"}}
+<!-- Left side column. 权限菜单 -->
+{{include "com/menu.html"}}
+<div class="content-wrapper">
+    <section class="content-header">
+        <h1>
+            <small></small>
+        </h1>
+        <ol class="breadcrumb">
+            <li><a href="/front/project"><i class="fa fa-dashboard"></i> 项目列表</a></li>
+            <li><a href="/front/project/clear?pid={{.T.s_projectid}}"><i class="fa fa-dashboard"></i> 项目清洗</a></li>
+        </ol>
+    </section>
+    <!-- Main content -->
+    <section class="content">
+        <div class="row">
+            <div class="col-xs-12">
+                <div class="box">
+                    <div class="box-body">
+
+                        <div class="form-horizontal">
+                            <div class="box-body margin">
+                                <h3><i class="glyphicon glyphicon-exclamation-sign" style="margin-right: 6px"></i>数据情况
+                                </h3>
+                                <div class="form-group" style="margin-left: 15px">
+                                    <span class="form-inline panel-body">分发总量/数据总量(条):
+                                        <input type="text" class="form-control" readonly value="1000/5000">
+                                    </span>
+                                </div>
+                                <div class="form-group" style="margin-left: 10px">
+                                    <div class="col-xs-6" style="width: auto">
+                                        <label class="form-inline">数据总量:
+                                        <input type="text" class="form-control" style="width: 80px" readonly value="0"></label>
+                                        <label class="form-inline" style="margin-left: 20px">已分发:
+                                        <input type="text" class="form-control" style="width: 80px" readonly value="0"></label>
+                                        <label class="form-inline" style="margin-left: 20px">待分发:
+                                        <input type="text" class="form-control" style="width: 80px" readonly value="0"></label>
+                                        <label class="form-inline" style="margin-left: 20px">已标注:
+                                        <input type="text" class="form-control" style="width: 80px" readonly value="0"></label>
+                                    </div>
+                                    <div class="col-xs-6 form-group">
+                                        <label class="form-inline">操作:
+                                            <input type="button" class="btn btn-info" onclick="dispatchTak('0')" value="分发">
+                                            <input type="button" class="btn btn-primary" value="质检">
+                                            <input type="button" class="btn btn-success" value="质检结果">
+                                        </label>
+                                    </div>
+                                </div>
+                                <div class="form-group" style="margin-left: 10px">
+                                    <div class="col-xs-6" style="width: auto">
+                                        <label class="form-inline">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;达标:
+                                            <input type="text" class="form-control" style="width: 80px" readonly value="0"></label>
+                                        <label class="form-inline" style="margin-left: 20px">已分发:
+                                            <input type="text" class="form-control" style="width: 80px" readonly value="0"></label>
+                                        <label class="form-inline" style="margin-left: 20px">待分发:
+                                            <input type="text" class="form-control" style="width: 80px" readonly value="0"></label>
+                                        <label class="form-inline" style="margin-left: 20px">已标注:
+                                            <input type="text" class="form-control" style="width: 80px" readonly value="0"></label>
+                                    </div>
+                                    <div class="col-xs-6 form-group">
+                                        <label class="form-inline">操作:
+                                            <input type="button" class="btn btn-info" onclick="dispatchTak('1')" value="分发">
+                                            <input type="button" class="btn btn-primary" value="质检">
+                                            <input type="button" class="btn btn-success" value="质检结果">
+                                        </label>
+                                    </div>
+                                </div>
+                                <div class="form-group" style="margin-left: 10px">
+                                    <div class="col-xs-6" style="width: auto">
+                                        <label class="form-inline">&nbsp;&nbsp;&nbsp;&nbsp;未达标:
+                                            <input type="text" class="form-control" style="width: 80px" readonly value="0"></label>
+                                        <label class="form-inline" style="margin-left: 20px">已分发:
+                                            <input type="text" class="form-control" style="width: 80px" readonly value="0"></label>
+                                        <label class="form-inline" style="margin-left: 20px">待分发:
+                                            <input type="text" class="form-control" style="width: 80px" readonly value="0"></label>
+                                        <label class="form-inline" style="margin-left: 20px">已标注:
+                                            <input type="text" class="form-control" style="width: 80px" readonly value="0"></label>
+                                    </div>
+                                    <div class="col-xs-6 form-group">
+                                        <label class="form-inline">操作:
+                                            <input type="button" class="btn btn-info" onclick="dispatchTak('2')" value="分发">
+                                            <input type="button" class="btn btn-primary" value="质检">
+                                            <input type="button" class="btn btn-success" value="质检结果">
+                                        </label>
+                                    </div>
+                                </div>
+
+                            </div>
+                        </div>
+
+                        <hr>
+                        <div class="form-horizontal">
+                            <div class="box-body margin">
+                                <h3><i class="glyphicon glyphicon-tasks" style="margin-right: 6px"></i>数据清洗任务列表
+                                </h3>
+
+                                <table id="dataTable" class="table table-bordered table-hover">
+                                    <thead>
+                                    <tr>
+                                        <th></th>
+                                        <th>项目名称</th>
+                                        <th>用户组名称</th>
+                                        <th>负责人</th>
+                                        <th>分发数据量</th>
+                                        <th>任务状态</th>
+                                        <th>完成进度</th>
+                                        <th>任务时间</th>
+                                        <th>操作</th>
+                                    </tr>
+                                    </thead>
+                                </table>
+                            </div>
+                        </div>
+                    </div>
+                    <!-- /.box-body -->
+                </div>
+                <!-- /.box -->
+            </div>
+        </div>
+    </section>
+</div>
+
+
+<div class="modal fade" id="modal-create-task" tabindex="-1" role="dialog" aria-hidden="true">
+    <div class="modal-dialog" style="width: 60%">
+        <div class="modal-content">
+            <div class="modal-header">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                    <div class="edit-info">
+                        <span class="glyphicon glyphicon-tasks" aria-hidden="true"></span>
+                        <span class="h3">新建任务</span>
+                    </div>
+                    <div class="edit-form">
+                        <form id="modal-form-task" class="form-horizontal">
+                            <div class="modal-body modal-task">
+                                <div class="form-group margin-bottom" style="margin-left: 15px">
+                                    <label class="control-label form-inline h4">待分发数据总量(条):
+                                        <span>0</span>
+                                    </label>
+                                </div>
+                                <hr>
+                                <div style="margin-left: 15px;">
+                                    <label>分发信息:</label>
+                                    <input type="button" class="btn btn-info btn-sm" onclick="addTaskSelect()" value="新增">
+                                </div>
+                                <div></div>
+                                <div id="TaskDiv">
+                                    <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>
+                                    </div>
+                                    <div class="form-group" style="margin-left: 10px;">
+                                        <select class="selectpicker used" id="group-select"></select>
+                                        <label class="control-label form-inline" style="margin-left: 20px">数据量(条):
+                                            <input type="number" class="form-control"></label>
+                                    </div>
+                                </div>
+                            </div>
+                        </form>
+                    </div>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <input type="button" onclick="saveTask()" class="btn btn-primary" value="保存">
+                <input type="button" onclick="cancelModel()" class="btn btn-default" value="取消">
+            </div>
+        </div>
+    </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 groupList = []
+
+    $(function () {
+        ttable = $('#dataTable').dataTable({
+            "paging": true,
+            "lengthChange": false,
+            "searching": true,
+            "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"
+            },
+            "fnDrawCallback": function () {
+                $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
+                $('#dataTable-btn').click(function (e) {
+                    var redirectpage = 0
+                    if ($("#changePage").val() && $("#changePage").val() > 0) {
+                        var redirectpage = $("#changePage").val() - 1;
+                    }
+                    ttable.page(redirectpage).draw(false);
+                });
+                this.api().column(0).nodes().each(function (cell, i) {
+                    cell.innerHTML = i + 1;
+                });
+            },
+            "columns": [
+                {"data": "", width: "1%"},
+                {"data": "s_entname", width: "5%"},
+                {"data": "s_departname", width: "4%"},
+                {"data": "s_rulename", width: "4%"},
+                {"data": "s_name", width: "4%"},
+                {"data": "s_personname", width: "4%"},
+                {"data": "i_importnum", width: "4%"},
+                {"data": "s_status", width: "4%"},
+                {
+                    "data": "_id", width: "11%", render: function (val, a, row, pos) {
+                        tmp = '<div>' +
+                            '<a class="btn btn-sm btn-primary" onclick="editPro(\'' + pos.row + '\')">编辑</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-warning" href="/front/project/clear?pid=' + val + '">清洗</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-info" onclick="del(\'' + val + '\')">判重</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-default" href="">完成</a>&nbsp;&nbsp;' +
+                            '</div>';
+                        return tmp
+                    }
+                }
+            ]
+        });
+
+        $.ajax({
+            url: "/front/group/list",
+            type: "POST",
+            data: {},
+            success: function (r) {
+                if (r.rep) {
+                    groupList = r.data
+                    console.log(groupList)
+                }
+            }
+        })
+    });
+
+    function del(id) {
+        showConfirm("确定删除该用户组?", function () {
+            $.ajax({
+                url: "",
+                type: 'POST',
+                data: {"id": id},
+                success: function (r) {
+                    if (r.rep) {
+                        ttable.ajax.reload();
+                    } else {
+                        showTip("状态修改失败");
+                    }
+                }
+            })
+        })
+    }
+
+    function saveData() {
+        $.ajax({
+            url: "",
+            type: 'POST',
+            data: projectmap,
+            success: function (r) {
+                if (r.rep) {
+                    ttable.api().ajax.reload();
+                } else {
+                    showTip("保存失败");
+                }
+            }
+        })
+    }
+
+    function dispatchTak(val) {
+        $('#modal-create-task').modal('show')
+        for (var i in groupList) {
+            var opt = document.createElement('option');
+            opt.innerText = groupList[i]["s_name"];
+            opt.value = groupList[i]["_id"];
+            $('#group-select')[0].appendChild(opt)
+        }
+        $("#group-select").selectpicker("refresh");
+        console.log(val)
+    }
+
+    function cancelModel() {
+        $('#TaskDiv .form-group .clone-template').remove()
+        $("#modal-create-task").modal('hide')
+        document.getElementById("modal-form-task").reset();
+    }
+
+    function addTaskSelect() {
+        let tNode = $('#itemDiv').clone().addClass('clone-template').addClass('used').show()
+        let st = $(tNode).find('select')
+        $(st).addClass('selectpicker')
+        for (var i in groupList) {
+            var opt = document.createElement('option');
+            opt.innerText = groupList[i]["s_name"];
+            opt.value = groupList[i]["_id"];
+            $(st)[0].appendChild(opt)
+        }
+        $(st).selectpicker("refresh");
+        $('#TaskDiv').append($(tNode))
+    }
+
+    function saveTask() {
+
+        $('#TaskDiv select').each(function () {
+            let ms = $(this).find("option:checked").val()
+            console.log(ms)
+        })
+    }
+
+</script>

+ 398 - 391
src/web/templates/project/project_list.html

@@ -4,442 +4,449 @@
 <!-- Left side column. 权限菜单 -->
 {{include "com/menu.html"}}
 <div class="content-wrapper">
-  <section class="content-header">
-    <h1>
-      <small></small>
-    </h1>
-    <ol class="breadcrumb">
-      <li><a href="/front/user"><i class="fa fa-dashboard"></i> 项目列表</a></li>
-    </ol>
-  </section>
-  <!-- Main content -->
-  <section class="content">
-    <div class="row">
-      <div class="col-xs-12">
-        <div class="box">
-          <div class="box-body">
+    <section class="content-header">
+        <h1>
+            <small></small>
+        </h1>
+        <ol class="breadcrumb">
+            <li><a href="/front/project"><i class="fa fa-dashboard"></i> 项目列表</a></li>
+        </ol>
+    </section>
+    <!-- Main content -->
+    <section class="content">
+        <div class="row">
+            <div class="col-xs-12">
+                <div class="box">
+                    <div class="box-body">
 
-            <div class="form-horizontal">
-              <div class="box-body">
-                <div class="form-group">
-                  <label class="col-sm-1 control-label">状态</label>
-                  <div class="col-sm-2">
-                    <select class="form-control selectpicker" id="pushModelSelect">
-                      <option value=-1>全部</option>
-                      <option value=0>开启</option>
-                      <option value=1>关闭</option>
-                    </select>
-                  </div>
-                  <div class="col-sm-2">
-                    <a class="btn btn-sm btn-success margin-r-5" onclick="">查询</a>
-                    <a class="btn btn-sm btn-default" onclick="">取消</a>
-                  </div>
-                </div>
-
-                <div class="form-group" style="margin-left: 20px">
-                  <a class="btn btn-sm btn-success margin" onclick="createPro()"><i class="fa fa-fw fa-plus fa-lg"></i>新建</a>
+                        <div class="form-horizontal">
+                            <div class="box-body">
+                                <div class="form-group" style="margin-left: 20px">
+                                    <a class="btn btn-sm btn-success h4" onclick="createPro()"><i
+                                            class="fa fa-fw fa-plus fa-lg"></i>新建项目</a>
+                                </div>
+                            </div>
+                        </div>
+                        <div class="col-xs-12">
+                            <select class="selectpicker" id="pushModelSelect">
+                                <option value=-1>全部</option>
+                                <option value=0>开启</option>
+                                <option value=1>关闭</option>
+                            </select>
+                        </div>
+                        <table id="dataTable" class="table table-bordered table-hover">
+                            <thead>
+                            <tr>
+                                <th></th>
+                                <th>公司名称</th>
+                                <th>部门名称</th>
+                                <th>规则名称</th>
+                                <th>项目名称</th>
+                                <th>售后人员</th>
+                                <th>数据量</th>
+                                <th>项目状态</th>
+                                <th>完成进度</th>
+                                <th>项目时间</th>
+                                <th>操作</th>
+                            </tr>
+                            </thead>
+                        </table>
+                    </div>
+                    <!-- /.box-body -->
                 </div>
-              </div>
+                <!-- /.box -->
             </div>
-
-            <table id="dataTable" class="table table-bordered table-hover">
-              <thead>
-              <tr>
-                <th></th>
-                <th>公司名称</th>
-                <th>部门名称</th>
-                <th>规则名称</th>
-                <th>项目名称</th>
-                <th>售后人员</th>
-                <th>数据量</th>
-                <th>项目状态</th>
-                <th>完成进度</th>
-                <th>项目时间</th>
-                <th>操作</th>
-              </tr>
-              </thead>
-            </table>
-          </div>
-          <!-- /.box-body -->
         </div>
-        <!-- /.box -->
-      </div>
-    </div>
-  </section>
+    </section>
 </div>
 
 
 <div class="modal fade" id="modal-create-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>
-            <div class="form-group">
-              <label class="radio-inline">
-                <input type="radio" name="stype" value="coll" checked>数据库导入
-              </label>
-              <label class="radio-inline">
-                <input type="radio" name="stype" value="excel">Excel表导入
-              </label>
-            </div>
-            <form class="form-horizontal" enctype="multipart/form-data">
-              <div class="box-body">
-                <div class="form-group margin-bottom">
-                  <label class="col-sm-3 control-label"><span style="color:red;">* </span>项目名称</label>
-                  <div class="col-sm-5">
-                    <input type="text" class="form-control" id="project-name" placeholder="项目名称">
-                  </div>
-                </div>
-                <div id="import-coll">
-                  <h5><i class="glyphicon glyphicon-bookmark" style="color: #00c4ff;margin-right: 6px"></i>数据来源</h5>
-                  <div class="form-group">
-                    <label class="col-sm-3 control-label"><span style="color:red;">* </span>数据库名</label>
-                    <div class="col-sm-5">
-                      <input type="text" class="form-control" id="db-name" value="jyqyfw" readonly>
-                    </div>
-                  </div>
-                  <div class="form-group">
-                    <label class="col-sm-3 control-label"><span style="color:red;">* </span>数据表名</label>
-                    <div class="col-sm-5">
-                      <input type="text" class="form-control" id="coll-name" value="usermail_history" readonly>
-                    </div>
-                  </div>
-                  <div class="form-group">
-                    <label class="col-sm-3 control-label"><span style="color:red;">* </span>数据导出ID</label>
-                    <div class="col-sm-6">
-                      <input type="text" class="form-control" id="data-id" placeholder="数据导出ID">
+    <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>
-                </div>
+                    <div class="edit-form">
+                        <hr>
+                        <div class="form-group">
+                            <label class="radio-inline">
+                                <input type="radio" name="stype" value="coll" checked>数据库导入
+                            </label>
+                            <label class="radio-inline">
+                                <input type="radio" name="stype" value="excel">Excel表导入
+                            </label>
+                        </div>
+                        <form id="model-form-project" class="form-horizontal" enctype="multipart/form-data">
+                            <div class="box-body">
+                                <div class="form-group margin-bottom">
+                                    <label class="col-sm-3 control-label"><span style="color:red;">* </span>项目名称</label>
+                                    <div class="col-sm-5">
+                                        <input type="text" class="form-control" id="project-name" placeholder="项目名称">
+                                    </div>
+                                </div>
+                                <div id="import-coll">
+                                    <h5><i class="glyphicon glyphicon-bookmark"
+                                           style="color: #00c4ff;margin-right: 6px"></i>数据来源</h5>
+                                    <div class="form-group">
+                                        <label class="col-sm-3 control-label"><span
+                                                style="color:red;">* </span>数据库名</label>
+                                        <div class="col-sm-5">
+                                            <input type="text" class="form-control" id="db-name" value="jyqyfw"
+                                                   readonly>
+                                        </div>
+                                    </div>
+                                    <div class="form-group">
+                                        <label class="col-sm-3 control-label"><span
+                                                style="color:red;">* </span>数据表名</label>
+                                        <div class="col-sm-5">
+                                            <input type="text" class="form-control" id="coll-name"
+                                                   value="usermail_history" readonly>
+                                        </div>
+                                    </div>
+                                    <div class="form-group">
+                                        <label class="col-sm-3 control-label"><span
+                                                style="color:red;">* </span>数据导出ID</label>
+                                        <div class="col-sm-6">
+                                            <input type="text" class="form-control" id="data-id" placeholder="数据导出ID">
+                                        </div>
+                                    </div>
+                                </div>
 
-                <div id="import-excel" style="display: none">
-                  <h5><i class="glyphicon glyphicon-bookmark" style="color: #00c4ff;margin-right: 6px"></i>数据信息</h5>
-                  <div class="form-group">
-                    <label class="col-sm-3 control-label"><span style="color:red;">* </span>公司名称</label>
-                    <div class="col-sm-6">
-                      <input type="text" class="form-control" id="company-name" placeholder="公司名称">
-                    </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="dpart-name" placeholder="部门名称">
+                                <div id="import-excel" style="display: none">
+                                    <h5><i class="glyphicon glyphicon-bookmark"
+                                           style="color: #00c4ff;margin-right: 6px"></i>数据信息</h5>
+                                    <div class="form-group">
+                                        <label class="col-sm-3 control-label"><span
+                                                style="color:red;">* </span>公司名称</label>
+                                        <div class="col-sm-6">
+                                            <input type="text" class="form-control" id="company-name"
+                                                   placeholder="公司名称">
+                                        </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="dpart-name" placeholder="部门名称">
+                                        </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="rule-name" placeholder="规则名称">
+                                        </div>
+                                    </div>
+                                    <div class="form-group">
+                                        <label class="col-sm-3 control-label">选择文件</label>
+                                        <div class="col-sm-6">
+                                            <input type="file" name="file" id="uploadfile">
+                                        </div>
+                                    </div>
+                                </div>
+                                <h5><i class="glyphicon glyphicon-bookmark"
+                                       style="color: #00c4ff;margin-right: 6px"></i>数据存储</h5>
+                                <div class="form-group">
+                                    <label class="col-sm-3 control-label"><span style="color:red;">* </span>数据库名</label>
+                                    <div class="col-sm-6">
+                                        <input type="text" class="form-control" value="jyqykhfw" readonly>
+                                    </div>
+                                </div>
+                                <div class="form-group">
+                                    <label class="col-sm-3 control-label"><span style="color:red;">* </span>数据表名</label>
+                                    <div class="col-sm-6">
+                                        <input type="text" class="form-control" id="coll-save-name" placeholder="数据表名">
+                                    </div>
+                                </div>
+                            </div>
+                        </form>
                     </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="rule-name" placeholder="规则名称">
-                    </div>
-                  </div>
-                  <div class="form-group">
-                    <label class="col-sm-3 control-label">选择文件</label>
-                    <div class="col-sm-6">
-                      <input type="file" name="file" id="uploadfile">
-                    </div>
-                  </div>
-                </div>
-                <h5><i class="glyphicon glyphicon-bookmark" style="color: #00c4ff;margin-right: 6px"></i>数据存储</h5>
-                <div class="form-group">
-                  <label class="col-sm-3 control-label"><span style="color:red;">* </span>数据库名</label>
-                  <div class="col-sm-6">
-                    <input type="text" class="form-control" value="jyqykhfw" readonly>
-                  </div>
                 </div>
-                <div class="form-group">
-                  <label class="col-sm-3 control-label"><span style="color:red;">* </span>数据表名</label>
-                  <div class="col-sm-6">
-                    <input type="text" class="form-control" id="coll-save-name" placeholder="数据表名">
-                  </div>
-                </div>
-              </div>
-            </form>
-          </div>
+            </div>
+            <div class="modal-footer">
+                <input type="button" onclick="importData()" class="btn btn-primary" value="导入">
+                <input type="button" onclick="cancelModel()" class="btn btn-default" value="取消">
+            </div>
         </div>
-      </div>
-      <div class="modal-footer">
-        <input type="button" onclick="importData()" class="btn btn-primary saveBtn" value="导入">
-        <input type="button" onclick="cancelModel()" class="btn btn-default" value="取消">
-      </div>
-    </div>
-  </div><!-- /.modal -->
+    </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 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>
-            </form>
-          </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>
-      <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><!-- /.modal -->
 </div>
 
 
 {{include "com/footer.html"}}
 <script>
-  menuActive("project");
+    menuActive("project");
 
-  let stype = "coll";
-  let fields = {{ .T.fields }}
-  let projectmap = {}
+    let stype = "coll";
+    let fields = {{ .T.fields }}
+    let projectmap = {}
 
-  $(function () {
-    ttable = $('#dataTable').dataTable({
-      "paging": true,
-      "lengthChange": false,
-      "searching": true,
-      "ordering": false,
-      "info": true,
-      "autoWidth": false,
-      "serverSide": true,
-      "ajax": {
-        "url": "/front/project",
-        "type": "post",
-        "data": {"status": "-1"}
-      },
-      "language": {
-        "url": "/dist/js/dataTables.chinese.lang"
-      },
-      "fnDrawCallback": function () {
-        $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
-        $('#dataTable-btn').click(function (e) {
-          var redirectpage = 0
-          if ($("#changePage").val() && $("#changePage").val() > 0) {
-            var redirectpage = $("#changePage").val() - 1;
-          }
-          ttable.page(redirectpage).draw(false);
+    $(function () {
+        ttable = $('#dataTable').dataTable({
+            "paging": true,
+            "lengthChange": false,
+            "searching": true,
+            "ordering": false,
+            "info": true,
+            "autoWidth": false,
+            "serverSide": true,
+            "ajax": {
+                "url": "/front/project",
+                "type": "post",
+                "data": {"status": "-1"}
+            },
+            "language": {
+                "url": "/dist/js/dataTables.chinese.lang"
+            },
+            "fnDrawCallback": function () {
+                $("ul.pagination").prepend("&nbsp;&nbsp;&nbsp;转到第 <input type='text' id='changePage'   style='width:20px;'> 页    <a type='text' href='javascript:void(0);' id='dataTable-btn' style='text-align:center'>GO</a>");
+                $('#dataTable-btn').click(function (e) {
+                    var redirectpage = 0
+                    if ($("#changePage").val() && $("#changePage").val() > 0) {
+                        var redirectpage = $("#changePage").val() - 1;
+                    }
+                    ttable.page(redirectpage).draw(false);
+                });
+                this.api().column(0).nodes().each(function (cell, i) {
+                    cell.innerHTML = i + 1;
+                });
+            },
+            "columns": [
+                {"data": "", width: "1%"},
+                {"data": "s_entname", width: "5%"},
+                {"data": "s_departname", width: "4%"},
+                {"data": "s_rulename", width: "4%"},
+                {"data": "s_name", width: "4%"},
+                {"data": "s_personname", width: "4%"},
+                {"data": "i_importnum", width: "4%"},
+                {"data": "s_status", width: "4%"},
+                {"data": "", width: "4%"},
+                {"data": "", width: "4%"},
+                {
+                    "data": "_id", width: "11%", render: function (val, a, row, pos) {
+                        tmp = '<div>' +
+                            '<a class="btn btn-sm btn-primary" onclick="editPro(\'' + pos.row + '\')">编辑</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-warning" href="/front/project/clear?pid=' + val + '">清洗</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-info" onclick="del(\'' + val + '\')">判重</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-default" href="">完成</a>&nbsp;&nbsp;<br>' +
+                            '<div style="margin-top: 5px">' +
+                            '<a class="btn btn-sm btn-primary" href="">上传</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-primary" href="">下载</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-primary" href="">扣费</a>&nbsp;&nbsp;' +
+                            '<a class="btn btn-sm btn-danger" href="">删除</a>&nbsp;&nbsp;' +
+                            '</div></div>';
+                        return tmp
+                    }
+                }
+            ]
         });
-        this.api().column(0).nodes().each(function(cell, i) {
-            cell.innerHTML = i + 1;
+
+        $('input[type=radio][name=stype]').change(function () {
+            if (this.value === 'coll') {
+                stype = "coll"
+                $("#import-coll").attr("style", "display:block;")
+                $("#import-excel").attr("style", "display:none;")
+            } else if (this.value === 'excel') {
+                stype = "excel"
+                $("#import-coll").attr("style", "display:none;")
+                $("#import-excel").attr("style", "display:block;")
+            }
         });
-      },
-      "columns": [
-        {"data": "", width: "1%"},
-        {"data": "s_entname", width: "5%"},
-        {"data": "s_departname", width: "4%"},
-        {"data": "s_rulename", width: "4%"},
-        {"data": "s_name", width: "4%"},
-        {"data": "s_personname", width: "4%"},
-        {"data": "i_importnum", width: "4%"},
-        {"data": "s_status", width: "4%"},
-        {"data": "", width: "4%"},
-        {"data": "", width:"4%"},
-        {"data": "_id", width:"11%",render: function (val, a, row, pos) {
-            tmp = '<div>' +
-                    '<a class="btn btn-sm btn-primary" onclick="editPro(\''+pos.row+'\')">编辑</a>&nbsp;&nbsp;'+
-                    '<a class="btn btn-sm btn-primary" href="">合并</a>&nbsp;&nbsp;'+
-                    '<a class="btn btn-sm btn-info" onclick="del(\''+val+'\')">判重</a>&nbsp;&nbsp;'+
-                    '<a class="btn btn-sm btn-default" href="">导出</a>&nbsp;&nbsp;<br>'+
-                    '<a class="btn btn-sm btn-primary" href="">上传</a>&nbsp;&nbsp;'+
-                    '<a class="btn btn-sm btn-primary" href="">下载</a>&nbsp;&nbsp;'+
-                    '<a class="btn btn-sm btn-primary" href="">扣费</a>&nbsp;&nbsp;'+
-                    '<a class="btn btn-sm btn-danger" href="">删除</a>&nbsp;&nbsp;'+
-                    '</div>';
-            return tmp
-          }}
-      ]
-    });
 
-    $('input[type=radio][name=stype]').change(function() {
-      if (this.value === 'coll') {
-        stype = "coll"
-        $("#import-coll").attr("style", "display:block;")
-        $("#import-excel").attr("style", "display:none;")
-      }
-      else if (this.value === 'excel') {
-        stype = "excel"
-        $("#import-coll").attr("style", "display:none;")
-        $("#import-excel").attr("style", "display:block;")
-      }
+        for (var i in fields) {
+            var opt = document.createElement('option');
+            opt.innerText = fields[i]["s_name"];
+            opt.value = fields[i]["s_code"];
+            $('#markFieldSelect')[0].appendChild(opt)
+        }
+        $("#markFieldSelect").selectpicker("refresh");
     });
 
-    for (var i in fields) {
-      var opt = document.createElement('option');
-      opt.innerText = fields[i]["s_name"];
-      opt.value = fields[i]["s_code"];
-      $('#markFieldSelect')[0].appendChild(opt)
+
+    function del(id) {
+        showConfirm("确定删除该用户组?", function () {
+            $.ajax({
+                url: "",
+                type: 'POST',
+                data: {"id": id},
+                success: function (r) {
+                    if (r.rep) {
+                        ttable.ajax.reload();
+                    } else {
+                        showTip("状态修改失败");
+                    }
+                }
+            })
+        })
     }
-    $("#markFieldSelect").selectpicker("refresh");
-  });
 
+    function createPro() {
+       $("#modal-create-project").modal('show')
+    }
 
-  function del(id) {
-    showConfirm("确定删除该用户组?", function() {
-      $.ajax({
-        url: "",
-        type: 'POST',
-        data: {"id": id},
-        success: function (r) {
-          if (r.rep) {
-            ttable.ajax.reload();
-          } else {
-            showTip("状态修改失败");
-          }
-        }
-      })
-    })
-  }
+    function cancelModel() {
+        document.getElementById("model-form-project").reset();
+        $("#modal-create-project").modal('hide')
+        $("#modal-edit-project").modal('hide')
+    }
 
-  function createPro() {
-    $("#modal-create-project").modal('show')
-  }
+    function importData() {
+        if (stype === "coll") {
+            projectmap["s_name"] = $('#project-name').val()
+            projectmap["s_sourceinfo"] = $('#coll-save-name').val()
+            projectmap["s_type"] = stype
+            projectmap["s_historyid"] = $('#data-id').val()
+            $.ajax({
+                url: "/front/project/save",
+                type: 'POST',
+                data: projectmap,
+                success: function (r) {
+                    if (r.success) {
 
-  function cancelModel() {
-    $("#modal-create-project").modal('hide')
-    $("#modal-edit-project").modal('hide')
-  }
+                        $("#modal-create-project").modal('hide')
+                        ttable.api().ajax.reload();
+                    } else {
 
-  function importData() {
-    if (stype === "coll") {
-      projectmap["s_name"] = $('#project-name').val()
-      projectmap["s_sourceinfo"] = $('#coll-save-name').val()
-      projectmap["s_type"] = stype
-      projectmap["s_historyid"] = $('#data-id').val()
-      $.ajax({
-        url: "/front/project/save",
-        type: 'POST',
-        data: projectmap,
-        success: function (r) {
-          if (r.rep) {
-            $("#modal-create-project").modal('hide')
-            ttable.api().ajax.reload();
-          } else {
-            showTip("项目创建成功");
-          }
-        }
-      })
-    }else if (stype === "excel") {
-      let formData = new FormData();
-      formData.append("s_name", $('#project-name').val())
-      formData.append("s_sourceinfo", $('#coll-save-name').val())
-      formData.append("s_historyid", $('#data-id').val())
-      formData.append("s_entname", $('#company-name').val())
-      formData.append("s_departname", $('#dpart-name').val())
-      formData.append("s_rulename", $('#rule-name').val())
-      formData.append("s_type", stype)
-      let file = $('#uploadfile')[0].files[0]
-      if (file) {
-        formData.append("xlsx", file)
-        $.ajax({
-          url: "/front/project/save",
-          type: 'POST',
-          data: formData,
-          cache: false,
-          processData: false,
-          contentType: false,
-          success: function (r) {
-            if (r.rep) {
-              $("#modal-create-project").modal('hide')
-              ttable.api().ajax.reload();
+                    }
+                }
+            })
+        } else if (stype === "excel") {
+            let formData = new FormData();
+            formData.append("s_name", $('#project-name').val())
+            formData.append("s_sourceinfo", $('#coll-save-name').val())
+            formData.append("s_historyid", $('#data-id').val())
+            formData.append("s_entname", $('#company-name').val())
+            formData.append("s_departname", $('#dpart-name').val())
+            formData.append("s_rulename", $('#rule-name').val())
+            formData.append("s_type", stype)
+            let file = $('#uploadfile')[0].files[0]
+            if (file) {
+                formData.append("xlsx", file)
+                $.ajax({
+                    url: "/front/project/save",
+                    type: 'POST',
+                    data: formData,
+                    cache: false,
+                    processData: false,
+                    contentType: false,
+                    success: function (r) {
+                        if (r.rep) {
+                            $("#modal-create-project").modal('hide')
+                            ttable.api().ajax.reload();
+                        } else {
+                            showTip("状态修改失败");
+                        }
+                    }
+                })
             } else {
-              showTip("状态修改失败");
+                showTip("请选择上传文件");
             }
-          }
-        })
-      }else {
-        showTip("请选择上传文件");
-      }
+        }
     }
-  }
 
-  function editPro(index) {
-    projectmap = ttable.fnGetData()[index]
-    console.log(projectmap)
-    $('#modal-edit-project').modal('show')
-    $('#company-edit-name').val(projectmap["s_entname"])
-    $('#rule-edit-name').val(projectmap["s_rulename"])
-    $('#dpart-edit-name').val(projectmap["s_departname"])
-  }
+    function editPro(index) {
+        projectmap = ttable.fnGetData()[index]
+        console.log(projectmap)
+        $('#modal-edit-project').modal('show')
+        $('#company-edit-name').val(projectmap["s_entname"])
+        $('#rule-edit-name').val(projectmap["s_rulename"])
+        $('#dpart-edit-name').val(projectmap["s_departname"])
+    }
 
-  function saveData() {
-    stype = "edit"
-    let tmp = projectmap
-    tmp["s_entname"] = $('#company-edit-name').val()
-    tmp["s_rulename"] = $('#rule-edit-name').val()
-    tmp["s_departname"] = $('#dpart-edit-name').val()
+    function saveData() {
+        stype = "edit"
+        let tmp = projectmap
+        tmp["s_entname"] = $('#company-edit-name').val()
+        tmp["s_rulename"] = $('#rule-edit-name').val()
+        tmp["s_departname"] = $('#dpart-edit-name').val()
 
-    let fieldArr = $('#markFieldSelect').val();
-    let m = {}
-    if (fieldArr.length > 0) {
-      for (const i in fields) {
-        if (fieldArr.indexOf(fields[i]["s_code"]) > -1) {
-          m[fields[i]["s_code"]] = fields[i]["s_name"]
+        let fieldArr = $('#markFieldSelect').val();
+        let m = {}
+        if (fieldArr.length > 0) {
+            for (const i in fields) {
+                if (fieldArr.indexOf(fields[i]["s_code"]) > -1) {
+                    m[fields[i]["s_code"]] = fields[i]["s_name"]
+                }
+            }
         }
-      }
-    }
-    tmp["v_field"] = m
-    if (tmp !== projectmap) {
-      $.ajax({
-        url: "/front/project/save",
-        type: 'POST',
-        data: projectmap,
-        success: function (r) {
-          if (r.rep) {
-            ttable.api().ajax.reload();
-          } else {
-            showTip("保存失败");
-          }
+        tmp["v_field"] = m
+        if (tmp !== projectmap) {
+            $.ajax({
+                url: "/front/project/save",
+                type: 'POST',
+                data: projectmap,
+                success: function (r) {
+                    if (r.rep) {
+                        ttable.api().ajax.reload();
+                    } else {
+                        showTip("保存失败");
+                    }
+                }
+            })
+        } else {
+            showTip("未做修改");
         }
-      })
-    }else {
-      showTip("未做修改");
     }
-  }
 
 </script>