Jianghan vor 3 Jahren
Ursprung
Commit
8c54473eb4

+ 19 - 16
src/front/front.go

@@ -19,22 +19,25 @@ type Front struct {
 	*xweb.Action
 	index xweb.Mapper `xweb:"/front/index"` //index页面
 	//user
-	login              xweb.Mapper `xweb:"/"`                        //登录页面
-	code               xweb.Mapper `xweb:"/code"`                    //获取图片验证码
-	logout             xweb.Mapper `xweb:"/front/logout"`            //注销
-	updatePwd          xweb.Mapper `xweb:"/front/updatepwd"`         //更新密码
-	userGroup          xweb.Mapper `xweb:"/front/group"`             //查所有用户组
-	userAll            xweb.Mapper `xweb:"/front/user"`              //查询用户列表
-	userGroupNew       xweb.Mapper `xweb:"/front/group/new"`         //用户组新建
-	userGroupState     xweb.Mapper `xweb:"/front/group/state"`       //用户组状态
-	userGroupStateBulk xweb.Mapper `xweb:"/front/group/bulks_setup"` //批量修改用户组状态
-	userGroupDel       xweb.Mapper `xweb:"/front/group/del"`         //用户组删除
-	userManage         xweb.Mapper `xweb:"/front/group/user"`        //用户管理
-	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"`        //用户组选择列表
-	userList           xweb.Mapper `xweb:"/front/group/user/list"`   //用户组的普通用户列表
+	login              xweb.Mapper `xweb:"/"`                         //登录页面
+	code               xweb.Mapper `xweb:"/code"`                     //获取图片验证码
+	logout             xweb.Mapper `xweb:"/front/logout"`             //注销
+	updatePwd          xweb.Mapper `xweb:"/front/updatepwd"`          //更新密码
+	userGroup          xweb.Mapper `xweb:"/front/group"`              //查所有用户组
+	userAll            xweb.Mapper `xweb:"/front/user"`               //查询用户列表
+	userGroupNew       xweb.Mapper `xweb:"/front/group/new"`          //用户组新建
+	groupModify        xweb.Mapper `xweb:"/front/group/group/modify"` //用户组修改
+	userNew            xweb.Mapper `xweb:"/front/group/user/new"`     //新建用户
+	userGroupState     xweb.Mapper `xweb:"/front/group/state"`        //用户组状态
+	userGroupStateBulk xweb.Mapper `xweb:"/front/group/bulks_setup"`  //批量修改用户组状态
+	userStateBulk      xweb.Mapper `xweb:"/front/user/bulks_setup"`   //批量修改用户状态
+	userGroupDel       xweb.Mapper `xweb:"/front/group/del"`          //用户组删除
+	userManage         xweb.Mapper `xweb:"/front/group/user"`         //用户管理
+	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"`         //用户组选择列表
+	userList           xweb.Mapper `xweb:"/front/group/user/list"`    //用户组的普通用户列表
 
 	//menu
 	menu           xweb.Mapper `xweb:"/front/menu"`            //查一级菜单

+ 117 - 14
src/front/user.go

@@ -108,7 +108,7 @@ func (f *Front) Code() {
 
 func (f *Front) Logout() {
 	f.DelSession("user")
-	f.Redirect("/")
+	_ = f.Redirect("/")
 }
 
 func (f *Front) UserGroup() {
@@ -165,13 +165,15 @@ func (f *Front) UserGroupNew() {
 			m1["i_updatetime"] = currenttime
 			m1["i_state"] = true
 			m1["b_delete"] = false
+			m1["check_size"] = qu.IntAll(user["u1_size"])
+			m1["user_size"] = qu.IntAll(user["u2_size"])
 			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_login"] = qu.ObjToString(group["s_name"]) + "_zj_" + strconv.Itoa(i+1)
 				m["s_password"] = qu.SE.EncodeString(qu.ObjToString(user["u1_pwd"]))
 				m["i_role"] = "3"
 				m["s_phone"] = ""
@@ -186,7 +188,7 @@ func (f *Front) UserGroupNew() {
 				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_login"] = qu.ObjToString(group["s_name"]) + "_" + strconv.Itoa(i+1)
 				m["s_password"] = qu.SE.EncodeString(qu.ObjToString(user["u2_pwd"]))
 				m["i_role"] = "4"
 				m["s_phone"] = ""
@@ -210,6 +212,21 @@ func (f *Front) UserGroupNew() {
 	}
 }
 
+func (f *Front) GroupModify() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		data := GetPostForm(f.Request)
+		id := qu.ObjToString(data["id"])
+		delete(data, "id")
+		qu.Debug(data, id)
+		data["i_updatetime"] = time.Now().Unix()
+		b := Mgo.UpdateById("s_group", id, map[string]interface{}{"$set": data})
+		f.ServeJson(map[string]interface{}{
+			"rep": b,
+		})
+	}
+}
+
 func (f *Front) UserGroupState() {
 	defer qu.Catch()
 	if f.Method() == "POST" {
@@ -228,7 +245,28 @@ func (f *Front) UserGroupStateBulk() {
 		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"]}})
+			m := map[string]interface{}{"i_state": data["state"], "i_updatetime": time.Now().Unix()}
+			b := Mgo.UpdateById("s_group", k, map[string]interface{}{"$set": m})
+			if !b {
+				f.ServeJson(map[string]interface{}{
+					"rep": b,
+				})
+			}
+		}
+		f.ServeJson(map[string]interface{}{
+			"rep": true,
+		})
+	}
+}
+
+func (f *Front) UserStateBulk() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		data := GetPostForm(f.Request)
+		ids := strings.Split(qu.ObjToString(data["ids"]), ",")
+		for _, k := range ids {
+			m := map[string]interface{}{"i_state": data["state"], "i_updatetime": time.Now().Unix()}
+			b := Mgo.UpdateById("s_user", k, map[string]interface{}{"$set": m})
 			if !b {
 				f.ServeJson(map[string]interface{}{
 					"rep": b,
@@ -246,7 +284,8 @@ func (f *Front) UserGroupDel() {
 	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}})
+		m := map[string]interface{}{"b_delete": true, "i_updatetime": time.Now().Unix()}
+		b := Mgo.UpdateById("s_group", qu.ObjToString(data["id"]), map[string]interface{}{"$set": m})
 		f.ServeJson(map[string]interface{}{
 			"rep": b,
 		})
@@ -285,7 +324,8 @@ 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"]}})
+		m := map[string]interface{}{"i_state": data["state"], "i_updatetime": time.Now().Unix()}
+		b := Mgo.UpdateById("s_user", qu.ObjToString(data["id"]), map[string]interface{}{"$set": m})
 		f.ServeJson(map[string]interface{}{
 			"rep": b,
 		})
@@ -294,6 +334,7 @@ func (f *Front) UserState() {
 
 func (f *Front) UserAll() {
 	defer qu.Catch()
+	gid := f.GetString("gid")
 	if f.Method() == "POST" {
 		start, _ := f.GetInteger("start")
 		limit, _ := f.GetInteger("length")
@@ -304,9 +345,10 @@ func (f *Front) UserAll() {
 			"b_delete": false,
 		}
 		user := f.GetSession("user").(map[string]interface{})
-		gid := qu.ObjToString(user["s_groupid"])
-		if user["i_role"] == "0" || user["i_role"] == "1" {
-
+		if gid == "" {
+			if user["i_role"] != "0" && user["i_role"] != "1" {
+				query["s_groupid"] = qu.ObjToString(user["s_groupid"])
+			}
 		} else {
 			query["s_groupid"] = gid
 		}
@@ -316,7 +358,7 @@ func (f *Front) UserAll() {
 				bson.M{"s_login": bson.M{"$regex": search}},
 			}
 		}
-		data, _ := Mgo.Find("s_user", query, `{"i_createtime":-1}`, nil, false, start, limit)
+		data, _ := Mgo.Find("s_user", query, `{"i_updatetime":-1}`, nil, false, start, limit)
 		count := Mgo.Count("s_user", query)
 		f.ServeJson(map[string]interface{}{
 			"draw":            draw,
@@ -325,7 +367,8 @@ func (f *Front) UserAll() {
 			"recordsTotal":    count,
 		})
 	} else {
-		_ = f.Render("user/user_list.html")
+		f.T["gid"] = gid
+		_ = f.Render("user/user_list.html", &f.T)
 	}
 }
 
@@ -333,7 +376,8 @@ 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}})
+		m := map[string]interface{}{"b_delete": true, "i_updatetime": time.Now().Unix()}
+		b := Mgo.UpdateById("s_user", qu.ObjToString(data["id"]), map[string]interface{}{"$set": m})
 		f.ServeJson(map[string]interface{}{
 			"rep": b,
 		})
@@ -344,13 +388,72 @@ 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"]}})
+		id := qu.ObjToString(data["id"])
+		delete(data, "id")
+		data["i_updatetime"] = time.Now().Unix()
+		b := Mgo.UpdateById("s_user", 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) UserNew() {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		user := f.GetSession("user").(map[string]interface{})
+		role := qu.ObjToString(user["i_role"])
+		gid := qu.ObjToString(user["s_groupid"])
+		currenttime := time.Now().Unix()
+		newUser := make(map[string]interface{})
+		var login, pwd = "", ""
+		if role == "0" || role == "1" {
+			newUser["i_role"] = "1"
+			login = f.GetString("login")
+			pwd = f.GetString("pwd")
+		} else {
+			irole := f.GetString("i_role")
+			info, _ := Mgo.FindById("s_group", gid, map[string]interface{}{"check_size": 1, "user_size": 1, "s_name": 1})
+			if len(*info) > 0 {
+				newUser["i_role"] = irole
+				if irole == "3" {
+					i := qu.IntAll((*info)["check_size"])
+					i++
+					login = qu.ObjToString((*info)["s_name"]) + "_zj_" + strconv.Itoa(i)
+					Mgo.UpdateById("s_group", gid, map[string]interface{}{"$set": map[string]interface{}{"check_size": i}})
+				} else if irole == "4" {
+					i := qu.IntAll((*info)["user_size"])
+					i++
+					login = qu.ObjToString((*info)["s_name"]) + "_" + strconv.Itoa(i)
+					Mgo.UpdateById("s_group", gid, map[string]interface{}{"$set": map[string]interface{}{"user_size": i}})
+				}
+				pwd = Password
+			}
+		}
+		newUser["s_name"] = f.GetString("name")
+		newUser["s_phone"] = f.GetString("phone")
+		newUser["s_groupid"] = gid
+		newUser["s_login"] = login
+		newUser["s_password"] = qu.SE.EncodeString(pwd)
+		newUser["i_createtime"] = currenttime
+		newUser["i_updatetime"] = currenttime
+		newUser["i_state"] = true
+		newUser["b_delete"] = false
+		id := Mgo.Save("s_user", newUser)
+		if id != "" {
+			qu.Debug(id)
+			f.ServeJson(map[string]interface{}{
+				"rep": true,
+			})
+		} else {
+			f.ServeJson(map[string]interface{}{
+				"rep": false,
+				"msg": "新增保存失败",
+			})
+		}
+	}
+}
+
 func (f *Front) GroupList() {
 	qu.Catch()
 	query := map[string]interface{}{"b_delete": false, "i_state": true}
@@ -371,7 +474,7 @@ func (f *Front) UserList() {
 		gid := qu.ObjToString(user["s_groupid"])
 		query := map[string]interface{}{"s_groupid": gid, "b_delete": false, "i_state": true, "i_role": "4"}
 		field := map[string]interface{}{"s_login": 1, "s_groupid": 1, "s_name": 1}
-		info, b := Mgo.Find("s_user", query, nil, field, false, -1, -1)
+		info, b := Mgo.Find("s_user", query, `{"_id": -1}`, field, false, -1, -1)
 		if b && len(*info) > 0 {
 			f.ServeJson(map[string]interface{}{
 				"rep":  b,

+ 16 - 2
src/web/templates/project/project_list.html

@@ -83,7 +83,7 @@
                                 <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="项目名称">
+                                        <input type="text" class="form-control" id="project-name" placeholder="项目名称" onblur="checkProName()">
                                     </div>
                                 </div>
                                 <div id="import-coll">
@@ -442,8 +442,8 @@
                     success: function (r) {
                         if (r.success) {
                             hideLoading()
-                            showTip(r.msg, 3000);
                             $("#modal-create-project").modal('hide')
+                            showTip(r.msg, 3000);
                             ttable.api().ajax.reload();
                         } else {
                             showMsg(r.msg);
@@ -566,4 +566,18 @@
             showTip("项目未分发任务")
         }
     }
+
+    function checkProName() {
+        let pname = $('#project-name').val()
+        if (pname !== "") {
+            $.ajax({
+                url: "/front/project/isExists",
+                type: "POST",
+                data: {},
+                success: function (r) {
+
+                }
+            })
+        }
+    }
 </script>

+ 113 - 13
src/web/templates/user/user_group.html

@@ -52,6 +52,58 @@
         </div>
     </section>
 </div>
+
+
+<div class="modal fade" id="modal-modify-group" 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">
+                            <div class="form-group margin-bottom">
+                                <input type="text" class="form-control" id="group-id" placeholder="用户账号" style="display: none">
+                                <label class="col-sm-3 control-label">用户组名称</label>
+                                <div class="col-sm-8">
+                                    <input type="text" class="form-control" id="group-name" placeholder="用户组名称" readonly>
+                                </div>
+                            </div>
+                            <div class="form-group margin-bottom">
+                                <label class="col-sm-3 control-label"><span style="color:red;">* </span>公司名称</label>
+                                <div class="col-sm-8">
+                                    <input type="text" class="form-control" id="group-entname" placeholder="公司名称">
+                                </div>
+                            </div>
+                            <div class="form-group margin-bottom">
+                                <label class="col-sm-3 control-label">负责人</label>
+                                <div class="col-sm-8">
+                                    <input type="text" class="form-control" id="group-person" placeholder="负责人">
+                                </div>
+                            </div>
+                            <div class="form-group margin-bottom">
+                                <label class="col-sm-3 control-label">联系方式</label>
+                                <div class="col-sm-8">
+                                    <input type="text" class="form-control" id="group-contract" placeholder="电话/邮箱">
+                                </div>
+                            </div>
+                        </form>
+                    </div>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <input type="button" onclick="modifySave()" 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("group");
@@ -117,7 +169,7 @@
                     }, width: "5%" },
                 {"data": "_id", width:"11%",render: function (val, a, row, pos) {
                       tmp = '<div>' +
-                          '<a class="btn btn-sm btn-primary" href="/front/group/edit?id='+val+'">编辑</a>&nbsp;&nbsp;'+
+                          '<a class="btn btn-sm btn-primary" onclick="editGroup(\''+pos.row+'\')">编辑</a>&nbsp;&nbsp;'+
                           '<a class="btn btn-sm btn-primary" href="/front/group/user?id='+val+'&s_sourceinfo='+row.s_sourceinfo+'">设置</a>&nbsp;&nbsp;'+
                           '<a class="btn btn-sm btn-danger" onclick="del(\''+val+'\')">删除</a>'+
                           '</div>';
@@ -184,8 +236,6 @@
                 this.checked = false;
             })
         }
-
-        console.log(selectIndex)
     }
 
     //表格单个选中
@@ -207,21 +257,71 @@
             keyTableAllChecked = false;
             $('#allCheckbox').prop("checked", false);
         }
-
-        console.log(selectIndex)
     }
 
     function bulkSetup(val) {
+        showConfirm("确定修改全部状态吗?", function (){
+            $.ajax({
+                url: "/front/group/bulks_setup",
+                type: 'POST',
+                data: {"ids": selectIndex.toString(), "state": val},
+                success: function (r) {
+                    if (r.rep) {
+                        $("#allCheckbox").prop("checked", false)
+                        ttable.api().ajax.reload()
+                    } else {
+                        showTip("状态修改失败");
+                    }
+                }
+            })
+        })
+    }
+
+    function editGroup(v){
+        let tmp = ttable.fnGetData()[v]
+        $("#group-id").val(tmp["_id"])
+        $("#group-name").val(tmp["s_name"])
+        $("#group-entname").val(tmp["s_entname"])
+        $("#group-person").val(tmp["s_personname"])
+        $("#group-contract").val(tmp["s_personcontact"])
+        $('#modal-modify-group').modal("show")
+    }
+
+    function cancelModel() {
+        $('#modal-modify-group').modal('hide')
+    }
+
+    function modifySave() {
+        let id = $("#group-id").val()
+        let entname = $("#group-entname").val().trim()
+        let personname = $("#group-person").val().trim()
+        let contract = $("#group-contract").val().trim()
+        if (entname !== "") {
+            $.ajax({
+                url: "/front/group/group/modify",
+                type: 'POST',
+                data: {"id": id, "s_entname": entname, "s_personname": personname, "s_personcontact": contract},
+                success: function (r) {
+                    if (r.rep) {
+                        $('#modal-modify-group').modal('hide')
+                        ttable.api().ajax.reload()
+                    } else {
+                        showTip("保存失败");
+                    }
+                }
+            })
+        }else {
+            showMsg("公司名称不能为空")
+        }
+    }
+
+    function editPro() {
         $.ajax({
-            url: "/front/group/bulks_setup",
-            type: 'POST',
-            data: {"ids": selectIndex.toString(), "state": val},
+            url: "/front/group/edit",
+            type: "POST",
+            data: {"gid": ""},
             success: function (r) {
-                if (r.rep) {
-                    ttable.api().ajax.reload()
-                } else {
-                    showTip("状态修改失败");
-                }
+
             }
         })
     }

+ 1 - 4
src/web/templates/user/user_group_create.html

@@ -9,9 +9,8 @@
             <small></small>
         </h1>
         <ol class="breadcrumb">
-            <li><a href="#"><i class="fa fa-dashboard"></i> 用户组管理</a></li>
             <li><a href="/front/group"><i class="fa fa-dashboard"></i> 用户组管理</a></li>
-            <li><a href="/front/group/new"><i class="fa fa-dashboard"></i> 用户组新增</a></li>
+            <li><a href="#"><i class="fa fa-dashboard"></i> 用户组新增</a></li>
         </ol>
     </section>
     <!-- Main content -->
@@ -236,8 +235,6 @@
         user["u2_size"] = $("#u2-size").val()
         user["u2_pwd"] = $("#u2-pwd").val()
 
-        console.log(group)
-        console.log(user)
         $.ajax({
             url: "/front/group/new",
             type: 'POST',

+ 131 - 10
src/web/templates/user/user_list.html

@@ -22,9 +22,9 @@
                         <div class="form-horizontal">
                             <div class="box-body">
                                 <div class="form-group">
-                                    <a class="btn btn-sm btn-success margin" href="/front/group/new"><i class="fa fa-fw fa-plus fa-lg"></i>新建用户</a>
-                                    <a class="btn btn-sm btn-default margin" onclick="">批量开启</a>
-                                    <a class="btn btn-sm btn-default margin" onclick="">批量关闭</a>
+                                    <a class="btn btn-sm btn-success margin" onclick="newMethod()"><i class="fa fa-fw fa-plus fa-lg"></i>新建用户</a>
+                                    <a class="btn btn-sm btn-default margin" onclick="bulkSetup(true)">批量开启</a>
+                                    <a class="btn btn-sm btn-default margin" onclick="bulkSetup(false)">批量关闭</a>
                                 </div>
                             </div>
                         </div>
@@ -91,10 +91,70 @@
                                     <input type="password" id="user-pwd" readonly="readonly" class="form-control">
                                 </div>
                             </div>
+                        </form>
+                    </div>
+                </div>
+            </div>
+            <div class="modal-footer">
+                <input type="button" onclick="modifySave()" class="btn btn-primary saveBtn" value="保存">
+                <input type="button" onclick="cancelModel()" class="btn btn-default" value="取消">
+            </div>
+        </div>
+    </div><!-- /.modal -->
+</div>
+
+<div class="modal fade" id="modal-new-user" 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">
+                            <div class="form-group margin-bottom">
+                                <label class="col-sm-3 control-label"><span style="color:red;">* </span>用户账号</label>
+                                <div class="col-sm-8">
+                                    <input type="text" class="form-control" id="user-new-login" placeholder="质检员/普通用户" readonly>
+                                </div>
+                            </div>
+                            <div class="form-group margin-bottom" id="user-new-role" style="display: none">
+                                <label class="col-sm-3 control-label">用户组权限</label>
+                                <div class="col-sm-8 radio">
+<!--                                    <label class="margin-r-5">-->
+<!--                                        <input type="radio" name="role" value=1>系统管理员-->
+<!--                                    </label>-->
+<!--                                    <label class="margin-r-5">-->
+<!--                                        <input type="radio" name="role" value="2" checked>管理员-->
+<!--                                    </label>-->
+                                    <label class="margin-r-5">
+                                        <input type="radio" name="role" value="3">质检员
+                                    </label>
+                                    <label>
+                                        <input type="radio" name="role" value="4" checked>普通用户
+                                    </label>
+                                </div>
+                            </div>
+                            <div class="form-group margin-bottom">
+                                <label class="col-sm-3 control-label">用户名称</label>
+                                <div class="col-sm-8">
+                                    <input type="text" class="form-control" id="user-new-name" placeholder="用户名称">
+                                </div>
+                            </div>
+                            <div class="form-group margin-bottom">
+                                <label class="col-sm-3 control-label">联系方式</label>
+                                <div class="col-sm-8">
+                                    <input type="text" class="form-control" id="user-new-contract" placeholder="电话/邮箱">
+                                </div>
+                            </div>
                             <div class="form-group">
-                                <label class="col-sm-3 control-label">服务时间</label>
+                                <label class="col-sm-3 control-label"><span style="color:red;">* </span>登陆密码</label>
                                 <div class="col-sm-8">
-                                    <input type="text" id="stratDate" class="col-sm-2 form-control" readonly="readonly" placeholder="开始日期 - 结束日期">
+                                    <input type="password" id="user-new-pwd" readonly="readonly" class="form-control">
                                 </div>
                             </div>
                         </form>
@@ -102,7 +162,7 @@
                 </div>
             </div>
             <div class="modal-footer">
-                <input type="button" onclick="modifySave()" class="btn btn-primary saveBtn" value="保存">
+                <input type="button" onclick="newSave()" class="btn btn-primary saveBtn" value="保存">
                 <input type="button" onclick="cancelModel()" class="btn btn-default" value="取消">
             </div>
         </div>
@@ -140,7 +200,7 @@
                     if ($("#changePage").val() && $("#changePage").val() > 0) {
                         var redirectpage = $("#changePage").val() - 1;
                     }
-                    ttable.page(redirectpage).draw(false);
+                    ttable.api().page(redirectpage).draw(false);
                 });
                 // this.api().column(0).nodes().each(function(cell, i) {
                 //     cell.innerHTML = i + 1;
@@ -196,7 +256,6 @@
     });
 
     function setupState(id, v) {
-        console.log(id, v)
         showConfirm("确定修改当前状态?", function() {
             $.ajax({
                 url: "/front/group/user/state",
@@ -221,7 +280,7 @@
             keyTableAllChecked = true;
             $('input[name="ckb-keyid"]').each(function () {
                 this.checked = true;
-                selectIndex.push($(this).parents("tr").index());
+                selectIndex.push(ttable.fnGetData()[$(this).parents("tr").index()]["_id"]);
             })
         } else {
             selectIndex.length = 0;
@@ -240,7 +299,7 @@
         $('input[name="ckb-keyid"]').each(function () {
             if (this.checked) {
                 keyTableChecked = true;
-                selectIndex.push($(this).parents("tr").index());
+                selectIndex.push(ttable.fnGetData()[$(this).parents("tr").index()]["_id"]);
             }else {
                 tag = false
             }
@@ -277,6 +336,7 @@
                 success: function (r) {
                     if (r.rep) {
                         $('#modal-modify-user').modal('hide')
+                        ttable.api().ajax.reload()
                     } else {
                         showTip("保存失败");
                     }
@@ -302,8 +362,69 @@
         })
     }
 
+    function bulkSetup(val) {
+        showConfirm("确定修改全部状态吗?", function (){
+            $.ajax({
+                url: "/front/user/bulks_setup",
+                type: 'POST',
+                data: {"ids": selectIndex.toString(), "state": val},
+                success: function (r) {
+                    if (r.rep) {
+                        $("#allCheckbox").prop("checked", false)
+                        ttable.api().ajax.reload()
+                    } else {
+                        showTip("状态修改失败");
+                    }
+                }
+            })
+        })
+    }
+
     function cancelModel() {
         $('#modal-modify-user').modal('hide')
+        $('#modal-new-user').modal('hide')
+    }
+
+    function newMethod() {
+        $('#modal-new-user').modal('show')
+        let role = {{(session "user").i_role}}
+        if (role === "0" || role === "1") {
+            $('#user-new-login').removeAttr('readonly')
+            $('#user-new-pwd').removeAttr('readonly')
+            $('#user-new-login').attr('placeholder', '用户账号')
+        }else {
+            $('#user-new-role').show()
+            $('#user-new-pwd').val('****')
+        }
+    }
+
+    function newSave() {
+        let login = $("#user-new-login").val()
+        let name = $("#user-new-name").val()
+        let phone = $("#user-new-contract").val()
+        let pwd = $('#user-new-pwd').val()
+        let s_role = $("input[name='role']:checked").val()
+        let role = {{(session "user").i_role}}
+        if (role === "0" || role === "1") {
+            console.log(login, pwd)
+            if (login === "" || pwd === "") {
+                showTip("账号或密码不能为空")
+                return
+            }
+        }
+        $.ajax({
+            url: "/front/group/user/new",
+            type: "POST",
+            data: {"login": login, "name": name, "phone": phone, "pwd": pwd, "i_role": s_role},
+            success: function (r) {
+                if (r.rep) {
+                    $('#modal-new-user').modal('hide')
+                    ttable.api().ajax.reload()
+                }else {
+                    showMsg(r.msg)
+                }
+            }
+        })
     }
 
 </script>