Răsfoiți Sursa

Merge branch 'dev3.3' of http://192.168.3.207:10080/qmx/jy-data-extract into dev3.3

maxiaoshan 5 ani în urmă
părinte
comite
9ba97f3995

+ 12 - 60
dataprocess/src/front/front.go

@@ -2,7 +2,6 @@ package front
 
 import (
 	qu "qfw/util"
-	"strconv"
 	"time"
 
 	. "../util"
@@ -11,12 +10,6 @@ import (
 	"gopkg.in/mgo.v2/bson"
 )
 
-var UserMenu map[string][]map[string]interface{} //存储菜单
-
-func init() {
-	UserMenu = make(map[string][]map[string]interface{})
-}
-
 type Front struct {
 	*xweb.Action
 	login     xweb.Mapper `xweb:"/"`                //登录页面
@@ -34,7 +27,15 @@ type Front struct {
 	menuSecond     xweb.Mapper `xweb:"/front/menuSecond"`      //查二级菜单
 	menuSecondSave xweb.Mapper `xweb:"/front/menuSecond/save"` //保存二级菜单
 	menuSecondDel  xweb.Mapper `xweb:"/front/menuSecond/del"`  //删除二级菜单
-	personalMenu   xweb.Mapper `xweb:"/front/personalMenu"`    //个人菜单
+
+	roleManager		xweb.Mapper	`xweb:"/front/role"`			//角色权限管理
+	roleEdit		xweb.Mapper	`xweb:"/front/role/edit/(.*)"`	//角色权限查看
+	roleFirst		xweb.Mapper	`xweb:"/front/role/first"`		//一级权限的查看
+	roleSecond		xweb.Mapper	`xweb:"/front/role/second"`		//二级权限的查看
+	roleSave		xweb.Mapper `xweb:"/front/role/edit/save"`	//权限编辑保存
+	roleDel			xweb.Mapper	`xweb:"/front/role/edit/del"`	//权限编辑删除
+	roleSecondEdit  xweb.Mapper	`xweb:"/front/role/second/edit"`//二级权限编辑
+
 }
 
 func (f *Front) Login() {
@@ -50,7 +51,7 @@ func (f *Front) Login() {
 		}
 		user, _ := Mgo.FindOne("user", query)
 		checked := false
-		if user != nil && len(*user) > 0 {
+		if (*user) != nil {
 			checked = true
 			f.SetSession("user", map[string]interface{}{
 				"name":  (*user)["s_name"],
@@ -59,7 +60,6 @@ func (f *Front) Login() {
 				"email": email,
 				"id":    qu.BsonIdToSId((*user)["_id"]),
 			})
-			UserMenu[email] = GetUserMenu(qu.ObjToString((*user)["s_role"]))
 		}
 		f.ServeJson(map[string]interface{}{
 			"checked": checked,
@@ -100,12 +100,7 @@ func (f *Front) UpdatePwd() {
 func (f *Front) User() {
 	defer qu.Catch()
 	if f.Method() == "POST" {
-		query := bson.M{
-			"s_role": bson.M{
-				"$ne": "0",
-			},
-		}
-		data, _ := Mgo.Find("user", query, `{"_id":1}`, nil, false, -1, -1)
+		data, _ := Mgo.Find("user", nil, `{"_id":1}`, nil, false, -1, -1)
 		for _, d := range *data {
 			d["s_pwd"] = qu.SE.DecodeString(qu.ObjToString(d["s_pwd"]))
 		}
@@ -152,53 +147,10 @@ func (f *Front) UserSave() {
 			"_id": bson.NewObjectId(),
 		}
 	}
+
 	b := Mgo.Update("user", query, set, true, false)
 	//b := Mgo.UpdateById("user", _id, set)
 	f.ServeJson(map[string]interface{}{
 		"rep": b,
 	})
 }
-
-func (f *Front) PersonalMenu() {
-	user := f.GetSession("user").(map[string]interface{})
-	list := UserMenu[qu.ObjToString(user["email"])]
-	f.ServeJson(map[string]interface{}{
-		"data": list,
-	})
-}
-
-func GetUserMenu(role string) []map[string]interface{} {
-	list := []map[string]interface{}{}
-	maps := map[string]interface{}{}
-	if role == "0" {
-		maps = map[string]interface{}{}
-	} else {
-		maps = map[string]interface{}{
-			"role." + role: true,
-		}
-	}
-	data, _ := Mgo.Find("menu_first", maps, nil, nil, false, -1, -1)
-	for _, d := range *data {
-		_id := d["_id"]
-		if role == "0" {
-			maps = map[string]interface{}{
-				"s_pid": qu.BsonIdToSId(_id),
-			}
-		} else {
-			maps = map[string]interface{}{
-				"role." + role: true,
-				"s_pid":        qu.BsonIdToSId(_id),
-			}
-		}
-		secdatas, _ := Mgo.Find("menu_second", maps, nil, nil, false, -1, -1)
-		secmenumap := map[string]interface{}{}
-		for index, secdata := range *secdatas {
-			secmenumap[strconv.Itoa(index+1)] = secdata
-		}
-		if len(secmenumap) != 0 {
-			d["secondmenu"] = secmenumap
-		}
-		list = append(list, d)
-	}
-	return list
-}

+ 0 - 0
dataprocess/src/front/memu.go → dataprocess/src/front/menu.go


+ 185 - 0
dataprocess/src/front/role.go

@@ -1 +1,186 @@
 package front
+
+import (
+	. "../util"
+	"encoding/json"
+	"github.com/go-xweb/log"
+	qu "qfw/util"
+
+	"gopkg.in/mgo.v2/bson"
+)
+
+func (f *Front) RoleManager() {
+	defer qu.Catch()
+	_ = f.Render("com/role.html")
+}
+
+func (f *Front) RoleEdit(role string) {
+	defer qu.Catch()
+	if f.Method() == "POST" {
+		maps := map[string]interface{}{
+			"role." + role: true,
+		}
+		data, _ := Mgo.Find("menu_first", maps, nil, nil, false, -1, -1)
+		f.ServeJson(map[string]interface{}{
+			"data": data,
+		})
+	}else {
+		f.T["role"] = role
+		f.Render("com/role_edit.html", &f.T)
+	}
+}
+
+func (f *Front) RoleFirst() {
+	defer qu.Catch()
+	data, _ := Mgo.Find("menu_first", `{}`, nil, nil, false, -1, -1)
+	f.ServeJson(map[string]interface{}{
+		"data": data,
+	})
+}
+
+func (f *Front) RoleSecond() {
+	defer qu.Catch()
+	pid := f.GetString("_pid")
+	log.Error("s_pid=", pid)
+	query := bson.M{
+		"s_pid": pid,
+	}
+	data, _ := Mgo.Find("menu_second", query, nil, nil, false, -1, -1)
+	f.ServeJson(map[string]interface{}{
+		"data": data,
+	})
+}
+
+func (f *Front) RoleSave() {
+	defer qu.Catch()
+	pid := f.GetString("_id")
+	role := f.GetString("role")
+	secondStr := f.GetString("secondStr")			//右边 选中的
+	secondStr1 := f.GetString("secondStr1")		//左边 未选中的
+
+	secondmenus := make([]string, 0)
+	secondmenus1 := make([]string, 0)
+	s_id := json.Unmarshal([]byte(secondStr), &secondmenus)
+	s_id1 := json.Unmarshal([]byte(secondStr1), &secondmenus1)
+
+	if s_id == nil && s_id1 == nil {
+		for _, v := range secondmenus {
+			maps := map[string]interface{}{
+				"_id": bson.ObjectIdHex(v),
+			}
+			data := map[string]interface{}{
+				"role." + role: true,
+			}
+			data1 := map[string]interface{}{
+				"$set": data,
+			}
+			Mgo.Update("menu_second", maps, data1, true, false)
+		}
+		for _, v := range secondmenus1 {
+			maps := map[string]interface{}{
+				"_id": bson.ObjectIdHex(v),
+			}
+			data := map[string]interface{}{
+				"role." + role: false,
+			}
+			data1 := map[string]interface{}{
+				"$set": data,
+			}
+			Mgo.Update("menu_second", maps, data1, true, false)
+		}
+	}
+	b := false
+	if (len(secondmenus) == 0 && len(secondmenus1) == 0) || (len(secondmenus) > 0) {
+		maps := map[string]interface{}{
+			"_id": bson.ObjectIdHex(pid),
+		}
+		data := map[string]interface{}{
+			"role." + role: true,
+		}
+		data1 := map[string]interface{}{
+			"$set": data,
+		}
+		b = Mgo.Update("menu_first", maps, data1, true, false)
+	}
+	if len(secondmenus) == 0 && len(secondmenus1) > 0 {
+		maps := map[string]interface{}{
+			"_id": bson.ObjectIdHex(pid),
+		}
+		data := map[string]interface{}{
+			"role." + role: false,
+		}
+		data1 := map[string]interface{}{
+			"$set": data,
+		}
+		b = Mgo.Update("menu_first", maps, data1, true, false)
+	}
+	f.ServeJson(map[string]interface{}{
+		"rep": b,
+	})
+}
+
+func (f *Front) RoleDel() {
+	defer qu.Catch()
+	_id := f.GetString("_id")
+	role := f.GetString("role")
+	maps := map[string]interface{}{
+		"_id": bson.ObjectIdHex(_id),
+	}
+	data := map[string]interface{}{
+		"role." + role: false,
+	}
+	data1 := map[string]interface{}{
+		"$set": data,
+	}
+	b := Mgo.Update("menu_first", maps, data1, true, false)
+	maps = map[string]interface{}{
+		"s_pid": _id,
+	}
+	count, _ := Mgo.Find("menu_second", maps, nil, nil, false, -1, -1)
+	if len(*count) != 0 {
+		for _, c := range *count {
+			maps = map[string]interface{}{
+				"_id": c["_id"],
+			}
+			Mgo.Update("menu_second", maps, data1, true, false)
+		}
+	}
+	f.ServeJson(map[string]interface{}{
+		"rep": b,
+	})
+}
+
+func (f *Front) RoleSecondEdit() {
+	defer qu.Catch()
+	menuid := f.GetString("_id")
+	mark := f.GetString("mark")
+	role := f.GetString("role")
+	if mark == "" {
+		maps := map[string]interface{}{
+			"s_pid": menuid,
+		}
+		datas, _ := Mgo.Find("menu_second", maps, nil, nil, false, -1, -1)
+		f.ServeJson(map[string]interface{}{
+			"data": datas,
+		})
+	} else {
+		maps := map[string]interface{}{
+			"s_pid":       menuid,
+			"role." + role: true,
+		}
+		data, _ := Mgo.Find("menu_second", maps, nil, nil, false, -1, -1)
+		maps1 := map[string]interface{}{
+			"s_pid":       menuid,
+			"role." + role: false,
+		}
+		names, _ := Mgo.FindById("menu_first", menuid, `{s_name:1}`)
+		name := *names
+		name1 := name["s_name"]
+		data1, _ := Mgo.Find("menu_second", maps1, nil, nil, false, -1, -1)
+		f.ServeJson(map[string]interface{}{
+			"name": name1,
+			"data": data,
+			"data1": data1,
+		})
+	}
+}

+ 58 - 0
dataprocess/src/web/templates/com/role.html

@@ -0,0 +1,58 @@
+{{include "com/inc.html"}}
+<!-- Main Header -->
+{{include "com/header.html"}}
+<!-- Left side column. 权限菜单 -->
+{{include "com/menu.html"}}
+
+<!-- Content Wrapper. Contains page content -->
+<div class="content-wrapper">
+    <section class="content-header">
+        <ol class="breadcrumb">
+            <li><a href="/front/role"><i class="fa fa-dashboard"></i> 角色管理</a></li>
+        </ol>
+    </section>
+    <!-- Main content -->
+    <section class="content">
+        <br>
+        <div class="row">
+            <div class="col-xs-12">
+                <div class="box">
+                    <div class="box-body">
+                        <table id="dataTable" class="table table-bordered table-hover">
+
+                            <thead>
+                            <tr>
+                                <th>角色名称</th>
+                                <th>编辑</th>
+                            </tr>
+                            </thead>
+                            <tbody>
+                                <tr>
+                                    <td>管理员</td>
+                                    <td><a class="btn btn-sm btn-success" href="/front/role/edit/0">编辑</a></td>
+                                </tr>
+                                <tr>
+                                    <td>审核员</td>
+                                    <td><a class="btn btn-sm btn-success" href="/front/role/edit/1">编辑</a></td>
+                                </tr>
+                                <tr>
+                                    <td>开发员</td>
+                                    <td><a class="btn btn-sm btn-success" href="/front/role/edit/2">编辑</a></td>
+                                </tr>
+                            </tbody>
+                        </table>
+                    </div>
+                    <!-- /.box-body -->
+                </div>
+                <!-- /.box -->
+            </div>
+        </div>
+    </section>
+</div>
+<script>
+    menuActive("role")
+</script>
+<!-- /.modal -->
+
+<!-- footer -->
+{{include "com/footer.html"}}

+ 280 - 0
dataprocess/src/web/templates/com/role_edit.html

@@ -0,0 +1,280 @@
+{{include "com/inc.html"}}
+<!-- Main Header -->
+{{include "com/header.html"}}
+<!-- Left side column. 权限菜单 -->
+{{include "com/menu.html"}}
+
+<head>
+    <style>
+
+        #selectclear2 select {
+            width:190px;
+            height:167px;
+            padding:5px;
+        }
+        #selectclear2{
+            display: flex;
+            flex-direction: row;
+        }
+        #selectclear2 .move{
+            display: flex;
+            flex-direction: column;
+            margin: 20px 25px
+        }
+        #selectclear2 .move button{
+            margin: 1px 0px;
+            padding: 4px 6px;
+        }
+        #selectclear2 .doublebox {
+            text-align:center;
+        }
+
+
+    </style>
+</head>
+
+<!-- Content Wrapper. Contains page content -->
+<div class="content-wrapper">
+    <section class="content-header">
+        <h1>
+            <small><button type="button" class="btn btn-primary" data-toggle="modal" data-target="#modal-info" onclick="formReset()">新增角色菜单</button></small>
+        </h1>
+        <ol class="breadcrumb">
+            <li><a href="/front/role"><i class="fa fa-dashboard"></i> 角色管理</a></li>
+            <li><a href="/front/role/edit/{{.T.role}}"><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">
+                        <table id="dataTable" class="table table-bordered table-hover">
+                            <thead>
+                            <tr>
+                                <th>一级菜单</th>
+                                <th>操作</th>
+                            </tr>
+                            </thead>
+                        </table>
+                    </div>
+                    <!-- /.box-body -->
+                </div>
+                <!-- /.box -->
+            </div>
+        </div>
+    </section>
+</div>
+
+<div class="modal fade" id="modal-info">
+    <div class="modal-dialog">
+        <form id="userform" class="form-horizontal" role="form">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span></button>
+                    <h4 class="modal-title">菜单信息</h4>
+                </div>
+                <div class="modal-body">
+                    <div class="form-group">
+                        <label for="code" class="col-sm-2 control-label">菜单名称:</label>
+                        <div class="col-sm-10">
+                            <select id="menu2" name="role" class="form-control" onchange="menu()">
+                            </select>
+                        </div>
+                    </div>
+                    <div class="form-group">
+                        <label for="code" class="col-sm-2 control-label">二级菜单:</label>
+                        <div class="col-sm-10" id="selectclear2">
+                            <div class="doublebox">
+                                <select multiple="multiple" id="select3" style="overflow-x: scroll;"></select>
+                            </div>
+                            <div class="move">
+                                <button type="button" id="up2" class="btn btn-primary">上移</button>
+                                <button type="button" id="right2" class="btn btn-primary">右移</button>
+                                <button type="button" id="left2" class="btn btn-primary">左移</button>
+                                <button type="button" id="down2" class="btn btn-primary">下移</button>
+                            </div>
+                            <div class="doublebox">
+                                <select multiple="multiple" id="select4" style="overflow-x: scroll;"></select>
+                            </div>
+                        </div>
+                    </div>
+                    <!--<div class="form-group">
+                        <label for="modify" class="col-sm-2 control-label">二级菜单:</label>
+                        <div id="secondmenu" class="col-sm-10">
+                            <input type="button" value="+" onclick="append()"></input>
+                        </div>
+                    </div>-->
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default" data-dismiss="modal" onclick="formReset()">取消</button>
+                    <button type="button" class="btn btn-primary" onclick="save()">保存</button>
+                </div>
+            </div>
+            <!-- /.modal-content -->
+        </form>
+        <input type="hidden" id="_id">
+    </div>
+    <!-- /.modal-dialog -->
+</div>
+<!-- /.modal -->
+
+<!-- footer -->
+{{include "com/footer.html"}}
+
+<script>
+    menuActive("role")
+    $(function () {
+        ttable=$('#dataTable').DataTable({
+            "paging"      : true,
+            "lengthChange": false,
+            "searching"   : true,
+            "ordering"    : true,
+            "info"        : true,
+            "autoWidth"   : false,
+            "ajax": {
+                "url": "/front/role/edit/{{.T.role}}",
+                "type": "post",
+                "data": {}
+            },
+            "language": {
+                "url": "/dist/js/dataTables.chinese.lang"
+            },
+            "columns": [
+                { "data": "s_name",render:function(val,a,row){
+                        return row.s_name}},
+                {"data":"_id",render:function(val,a,row){
+                        return "<a href='#' onclick='edit(\""+val+"\")'><i class='fa fa-fw fa-edit text-yellow'></i></a> &nbsp;"+
+                        "<a href='#' onclick='del(\""+val+"\")'><i class='fa fa-fw fa-trash text-red'></i></a>"
+                    }}
+            ]
+        });
+        //ttable.on('init.dt', function () {});
+    })
+    function formReset(){
+        $("#_id").val("")
+        $("#menu2").empty()
+        $("#select3").empty();
+        $("#select4").empty();
+        $("#menu2").append("<option value=''>--请选择--</option>")
+        $("#menu2").attr("disabled",false);
+        $.post("/front/role/first",'',function (data, status) {
+            for(var a=0;a<data.data.length;a++) {
+                $("#menu2").append("<option value="+data.data[a]._id+">"+data.data[a].s_name+"</option>")
+            }
+        })
+        $("#modal-info-addclear").modal("show");
+    }
+    function menu() {
+        $("#select3").empty();
+        $("#select4").empty();
+        $.post("/front/role/second",{"_pid":$("#menu2").val()},function (data,status) {
+            if(data.data){
+                for(var a=0;a<data.data.length;a++){
+                    $("#select3").append("<option title='"+data.data[a].s_name+"' value='"+data.data[a]._id+"'>"+data.data[a].s_name+"</option>");
+                }
+            }
+        })
+    }
+    function save(){
+        pid=$("#menu2").val()
+        var clearArr = [];
+        var clearArr1 = [];
+        $("#select4 option").each(function(i,val){
+            clearArr[i] = this.value
+        })
+        $("#select3 option").each(function(i,val){
+            clearArr1[i] = this.value
+        })
+        var secondStr = JSON.stringify(clearArr)
+        var secondStr1 = JSON.stringify(clearArr1)
+       if(pid == ""){
+            alert("表单填写不完整!");
+            return false;
+        }
+        $.ajax({
+            url:"/front/role/edit/save",
+            type:"post",
+            data:{"role":{{.T.role}},"_id":pid,"secondStr":secondStr,"secondStr1":secondStr1},
+            success:function(r){
+                if(r.rep){
+                    $("#userform")[0].reset();
+                    $("#modal-info").modal("hide");
+                    ttable.ajax.reload();
+                }else{
+                    alert("保存失败");
+                }
+            }
+        })
+    }
+    function del(_id){
+        showConfirm("确定删除?", function() {
+            $.ajax({
+                url:"/front/role/edit/del",
+                type:"post",
+                data:{"_id":_id,"role":{{.T.role}}},
+                success:function(r){
+                    if(r.rep){
+                        ttable.ajax.reload();
+                    }else{
+                        showTip("删除失败", 1000, function() {});
+                    }
+                }
+            })
+        });
+    }
+    function edit(_id){
+        $("#menu2").empty()
+        $("#select3").empty();
+        $("#select4").empty();
+        $("#_id").val(_id)
+        mark=$("#_id").val()
+        $.ajax({
+            url:"/front/role/second/edit",
+            type:"post",
+            data:{"_id":_id,"mark":mark,"role":{{.T.role}}},
+            success:function(r){
+                if(r){
+                    $("#menu2").append("<option value="+_id+">"+r.s_name+"</option>")
+                    $("#menu2").attr("disabled",true);
+                    for(var a=0;a<r.data1.length;a++){
+                        $("#select3").append("<option title='"+r.data1[a].s_name+"' value='"+r.data1[a]._id+"'>"+r.data1[a].s_name+"</option>");
+                    }
+                    for(var a=0;a<r.data.length;a++){
+                        $("#select4").append("<option title='"+r.data[a].s_name+"' value='"+r.data[a]._id+"'>"+r.data[a].s_name+"</option>");
+                    }
+                }
+            }
+        })
+        $("#modal-info").modal("show");
+    }
+
+    $("#selectclear2 #right2").click(function(){
+        $("#select3 option:selected").appendTo("#select4");
+    });
+    //左移
+    $("#selectclear2 #left2").click(function(){
+        $("#select4 option:selected").appendTo("#select3");
+    });
+    $("#selectclear2 #up2,#selectclear2 #down2").click(function() {
+        var $opt = $("#select4 option:selected:first");
+        if (!$opt.length){
+            return;
+        }
+        if (this.id == "up2"){
+            $opt.prev().before($opt);
+        }else{
+            $opt.next().after($opt);
+        }
+    });
+    //双击右移
+    $("#selectclear2 #select3").dblclick(function(){
+        $("#selectclear2 #select3 option:selected").appendTo("#select4");
+    });
+    //双击左移
+    $("#selectclear2 #select4").dblclick(function(){
+        $("#selectclear2 #select4 option:selected").appendTo("#select3");
+    });
+</script>