zhangjinkun 7 лет назад
Родитель
Сommit
eaeabe457a

+ 4 - 18
src/jy/admin/admin.go

@@ -2,30 +2,16 @@ package admin
 
 import (
 	. "jy/router"
-	"time"
-
-	"github.com/gin-gonic/gin"
+	qu "qfw/util"
 )
 
+var Se = qu.SimpleEncrypt{Key: "topnet@extract"}
+
 func init() {
 	admin := Router.Group("/admin")
 	admin.Use(AuthMiddleWare())
 	{
-		admin.Static("/web", "./web/admin")
 		admin.Static("/res", "./web/res")
 	}
-	//中标单位管理
-	Router.POST("/winnerlist", WinnerList)
-}
-
-func WinnerList(c *gin.Context) {
-	datas := []map[string]interface{}{}
-	for i := 0; i < 20; i++ {
-		datas = append(datas, map[string]interface{}{
-			"_id":     i,
-			"entname": i,
-			"mtime":   time.Now().Unix(),
-		})
-	}
-	c.JSON(200, gin.H{"data": datas})
+	Router.LoadHTMLGlob("web/templates/admin/*")
 }

+ 58 - 0
src/jy/admin/user.go

@@ -0,0 +1,58 @@
+// user
+package admin
+
+import (
+	. "jy/mongodbutil"
+	. "jy/router"
+	"net/http"
+	"time"
+
+	"github.com/gin-gonic/gin"
+)
+
+func init() {
+	Router.GET("/admin/index", func(c *gin.Context) {
+		c.HTML(http.StatusOK, "index.html", gin.H{})
+	})
+	Router.GET("/admin/user", func(c *gin.Context) {
+		c.HTML(http.StatusOK, "user.html", gin.H{})
+	})
+	Router.POST("/admin/user/data", User)
+	Router.POST("/admin/user/save", UserSave)
+	Router.POST("/admin/user/searchbyid", UserSearchById)
+	Router.POST("/admin/user/del", UserDel)
+}
+
+func User(c *gin.Context) {
+	data, _ := Mgo.Find("user", `{}`, nil, nil, false, -1, -1)
+	c.JSON(200, gin.H{"data": data})
+}
+
+func UserSave(c *gin.Context) {
+	email, _ := c.GetPostForm("email")
+	pwd, _ := c.GetPostForm("pwd")
+	name, _ := c.GetPostForm("name")
+	role, _ := c.GetPostForm("role")
+	data := map[string]interface{}{
+		"email":  email,
+		"pwd":    Se.EncodeString(pwd),
+		"name":   name,
+		"role":   role,
+		"intime": time.Now().Unix(),
+	}
+	b := Mgo.Update("user", `{"email":"`+email+`"}`, data, true, false)
+	c.JSON(200, gin.H{"rep": b})
+}
+
+func UserSearchById(c *gin.Context) {
+	_id, _ := c.GetPostForm("_id")
+	data, _ := Mgo.FindById("user", _id, nil)
+	(*data)["pwd"] = Se.DecodeString((*data)["pwd"].(string))
+	c.JSON(200, gin.H{"rep": data})
+}
+
+func UserDel(c *gin.Context) {
+	_id, _ := c.GetPostForm("_id")
+	b := Mgo.Del("user", `{"_id":"`+_id+`"}`)
+	c.JSON(200, gin.H{"rep": b})
+}

+ 8 - 8
src/jy/front/front.go

@@ -2,30 +2,30 @@ package front
 
 import (
 	"fmt"
-	. "jy/router"
-
 	. "jy/mongodbutil"
+	. "jy/router"
 
 	"github.com/gin-contrib/sessions"
 	"github.com/gin-gonic/gin"
 )
 
 func init() {
-	front := Router.Group("/front")
+	front := Router.Group("/")
 	{
-		front.Static("/web", "./web/front")
+		front.Static("/front", "./web/templates/front")
 		front.Static("/res", "./web/res")
 	}
 	Router.POST("/login", Login) //登录
 }
 
 func Login(c *gin.Context) {
-	name := c.PostForm("name")
+	email := c.PostForm("email")
 	pwd := c.PostForm("pwd")
-	res, b := Mgo.FindOne("user", fmt.Sprintf(`{"name":"%s","pwd":"%s"}`, name, pwd))
-	if b && res != nil {
+	res, _ := Mgo.FindOne("user", fmt.Sprintf(`{"email":"%s","pwd":"%s"}`, email, pwd))
+	if res != nil && len(*res) > 0 {
 		session := sessions.Default(c)
-		session.Set("name", name)
+		session.Set("email", email)
+		session.Set("name", (*res)["name"])
 		session.Save()
 		c.JSON(200, gin.H{"checked": true})
 	} else {

+ 1 - 1
src/jy/mongodbutil/pool.go

@@ -117,6 +117,6 @@ func (p *Pool) gc() {
 		}
 	}
 	p.mu.Unlock()
-	log.Println("size:", size, "live:", p.live)
+	//log.Println("size:", size, "live:", p.live)
 	time.AfterFunc(time.Duration(p.timeout)*time.Second, p.gc)
 }

+ 0 - 163
src/web/admin/index.html

@@ -1,163 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
-  <meta charset="utf-8">
-  <meta http-equiv="X-UA-Compatible" content="IE=edge">
-  <title>AdminLTE 2 | Starter</title>
-  <!-- Tell the browser to be responsive to screen width -->
-  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
-  <link rel="stylesheet" href="../res/bower_components/bootstrap/dist/css/bootstrap.min.css">
-  <!-- Font Awesome -->
-  <link rel="stylesheet" href="../res/bower_components/font-awesome/css/font-awesome.min.css">
-  <!-- Ionicons -->
-  <link rel="stylesheet" href="../res/bower_components/Ionicons/css/ionicons.min.css">
-  <!-- DataTables -->
-  <link rel="stylesheet" href="../res/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css">
-  <!-- Theme style -->
-  <link rel="stylesheet" href="../res/dist/css/AdminLTE.min.css">
-  <!-- AdminLTE Skins. We have chosen the skin-blue for this starter
-        page. However, you can choose any other skin. Make sure you
-        apply the skin class to the body tag so the changes take effect. -->
-  <link rel="stylesheet" href="../res/dist/css/skins/skin-blue.min.css">
-
-  <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
-  <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
-  <!--[if lt IE 9]>
-  <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
-  <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
-  <![endif]-->
-
-  <!-- Google Font -->
-  <link rel="stylesheet"
-        href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
-</head>
-<body class="hold-transition skin-blue sidebar-mini">
-<div class="wrapper">
-  <!-- Main Header -->
-  <header class="main-header">
-    <!-- Logo -->
-    <a href="/admin/web/index.html" class="logo">
-      <!-- mini logo for sidebar mini 50x50 pixels -->
-      <span class="logo-mini"><b>ext</b>3</span>
-      <!-- logo for regular state and mobile devices -->
-      <span class="logo-lg"><b>Extract</b> 3.0</span>
-    </a>
-
-    <!-- Header Navbar -->
-    <nav class="navbar navbar-static-top" role="navigation">
-      <!-- Sidebar toggle button-->
-      <a href="#" class="sidebar-toggle" data-toggle="push-menu" role="button">
-        <span class="sr-only">Toggle navigation</span>
-      </a>
-      <!-- Navbar Right Menu -->
-      <div class="navbar-custom-menu">
-        <ul class="nav navbar-nav">
-          <!-- User Account Menu -->
-          <li class="dropdown user user-menu">
-            <!-- Menu Toggle Button -->
-            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
-              <!-- The user image in the navbar-->
-              <img src="../res/dist/img/user2-160x160.jpg" class="user-image" alt="User Image">
-              <!-- hidden-xs hides the username on small devices so only the image appears. -->
-              <span class="hidden-xs">admin</span>
-            </a>
-          </li>
-        </ul>
-      </div>
-    </nav>
-  </header>
-  <!-- Left side column. 权限菜单 -->
-  <aside class="main-sidebar">
-    <section class="sidebar">
-      <ul class="sidebar-menu" data-widget="tree">
-        <li class="header">HEADER</li>
-        <!-- Optionally, you can add icons to the links -->
-        <li class="active"><a href="#" onclick="barLink('/admin/web/mgwinner.html')"><i class="fa fa-link"></i> <span>中标单位管理</span></a></li>
-        <li><a href="/admin/web/mgbuyer.html"><i class="fa fa-link"></i> <span>采购单位管理</span></a></li>
-        <li class="treeview">
-          <a href="#"><i class="fa fa-link"></i> <span>菜单管理</span>
-            <span class="pull-right-container">
-                <i class="fa fa-angle-left pull-right"></i>
-              </span>
-          </a>
-          <ul class="treeview-menu">
-            <li><a href="#">菜单1</a></li>
-            <li><a href="#">菜单2</a></li>
-          </ul>
-        </li>
-      </ul>
-    </section>
-  </aside>
-
-  <!-- Content Wrapper. Contains page content -->
-  <div class="content-wrapper">
-    <!-- Main content -->
-    <section class="content">
-        <div class="row">
-        <div class="col-xs-12">
-          <div class="box">
-            <div class="box-header">
-              <h3 class="box-title">Hover Data Table</h3>
-            </div>
-            <!-- /.box-header -->
-            <div class="box-body">
-              <table id="dataTable" class="table table-bordered table-hover">
-                <thead>
-                <tr>
-	                <th>编号</th>
-					<th>名称</th>
-					<th>修改时间</th>
-                </tr>
-                </thead>
-              </table>
-            </div>
-            <!-- /.box-body -->
-          </div>
-          <!-- /.box -->
-		</div>
-		</div>
-    </section>
-  </div>
-  <div class="control-sidebar-bg"></div>
-</div>
-<script src="../res/bower_components/jquery/dist/jquery.min.js"></script>
-<!-- Bootstrap 3.3.7 -->
-<script src="../res/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
-<!-- DataTables -->
-<script src="../res/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
-<script src="../res/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
-<!-- SlimScroll -->
-<script src="../res/bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script>
-<!-- FastClick -->
-<script src="../res/bower_components/fastclick/lib/fastclick.js"></script>
-<!-- AdminLTE App -->
-<script src="../res/dist/js/adminlte.min.js"></script>
-<script>
-$(function () {
-	var ttable=$('#dataTable').DataTable({
-		"paging"      : true,
-		"lengthChange": false,
-		"searching"   : true,
-		"ordering"    : true,
-		"info"        : true,
-		"autoWidth"   : false,
-		"ajax": {
-			"url": "/winnerlist",
-			"type": "POST"
-		 },
-		"language": {
-            "url": "../res/dist/js/dataTables.chinese.lang"
-        },
-		"columns": [
-            { "data": "_id",render:function(val,a,row){
-				return row._id
-			}},
-			{ "data": "entname"},
-			{ "data": "mtime"}
-       	]
-	});
-	//ttable.on('init.dt', function () {});
-})
-</script>
-</body>
-</html>

+ 137 - 0
src/web/res/js/model.js

@@ -0,0 +1,137 @@
+/** 
+ * 显示提示消息(自动关闭) 
+ * @param msg 
+ * @param sec 显示时间(毫秒) 
+ * @param callback 回调函数 
+ */  
+function showTip(msg, sec, callback){  
+    if(!sec) {  
+        sec = 1000;  
+    }  
+    Modal.tip({  
+        title:'提示',  
+        msg: msg  
+    }, sec);  
+    setTimeout(`$("#com-alert").modal('hide')`, sec);  
+}  
+  
+/** 
+ * 显示消息 
+ * @param msg 
+ */  
+function showMsg(msg, callback){  
+    Modal.alert({  
+        title:'提示',  
+        msg: msg,  
+        btnok: '确定'  
+    }).on(function (e) {  
+        if(callback){  
+            callback();  
+        }  
+     });  
+}  
+  
+/** 
+ * 模态对话框 
+ * @param msg 
+ * @returns 
+ */  
+function showConfirm(msg,callback){  
+    //var res = false;  
+    Modal.confirm(  
+      {  
+          title:'提示',  
+          msg: msg,  
+      }).on( function (e) {  
+          callback();  
+          //res=true;  
+      });  
+    //return res;  
+}  
+
+/*** 
+ * 模态框封装 
+ */  
+$(function () {  
+  window.Modal = function () {  
+    var reg = new RegExp("\\[([^\\[\\]]*?)\\]", 'igm');  
+    var alr = $("#com-alert");  
+    var ahtml = alr.html();  
+  
+    var _tip = function (options, sec) {  
+        alr.html(ahtml);    // 复原  
+        alr.find('.ok').hide();  
+        alr.find('.cancel').hide();  
+        alr.find('.modal-content').width(250);  
+        _dialog(options, sec); 
+        return {  
+            on: function (callback) {
+				
+			} 
+        };  
+    };  
+  
+    var _alert = function (options) {  
+      alr.html(ahtml);  // 复原  
+      alr.find('.ok').removeClass('btn-success').addClass('btn-primary');  
+      alr.find('.cancel').hide();  
+      _dialog(options);  
+  
+      return {  
+        on: function (callback) {  
+          if (callback && callback instanceof Function) {  
+            alr.find('.ok').click(function () { callback(true) });  
+          }  
+        }  
+      };  
+    };  
+  
+    var _confirm = function (options) {  
+      alr.html(ahtml); // 复原  
+      alr.find('.ok').removeClass('btn-primary').addClass('btn-success');  
+      alr.find('.cancel').show();  
+      _dialog(options);  
+  
+    return {  
+        on: function (callback) {  
+          if (callback && callback instanceof Function) {  
+            alr.find('.ok').click(function () { callback(true) });  
+            alr.find('.cancel').click(function () { return; });  
+          }  
+        }  
+      };  
+    };  
+  
+    var _dialog = function (options) {  
+      var ops = {  
+        msg: "提示内容",  
+        title: "操作提示",  
+        btnok: "确定",  
+        btncl: "取消"  
+      };  
+  
+      $.extend(ops, options);  
+  
+      var html = alr.html().replace(reg, function (node, key) {  
+        return {  
+          Title: ops.title,  
+          Message: ops.msg,  
+          BtnOk: ops.btnok,  
+          BtnCancel: ops.btncl  
+        }[key];  
+      });  
+        
+      alr.html(html);  
+      alr.modal({  
+        width: 250,  
+        backdrop: 'static'  
+      });  
+    }  
+  
+    return {  
+		tip: _tip,  
+	    alert: _alert,  
+	    confirm: _confirm  
+	}  
+  	}();  
+});  

+ 12 - 0
src/web/templates/admin/com_footer.html

@@ -0,0 +1,12 @@
+{{define "footer"}}
+		<footer class="main-footer no-print">
+		   <div class="pull-right hidden-xs">
+		     <b>Extract</b> 3.0
+		   </div>
+		   <strong>Jianyu &copy; </strong> All rights
+		   reserved.
+		</footer>
+		</div>
+</body>
+</html>
+{{end}}

+ 52 - 0
src/web/templates/admin/com_header.html

@@ -0,0 +1,52 @@
+{{ define "header" }}
+<header class="main-header">
+    <!-- Logo -->
+    <a href="/admin/web/index.html" class="logo">
+      <!-- mini logo for sidebar mini 50x50 pixels -->
+      <span class="logo-mini"><b>EPlat</b></span>
+      <!-- logo for regular state and mobile devices -->
+      <span class="logo-lg"><b>Extraction Platform</b></span>
+    </a>
+    <!-- Header Navbar -->
+    <nav class="navbar navbar-static-top" role="navigation">
+      <!-- Sidebar toggle button-->
+      <a href="#" class="sidebar-toggle" data-toggle="push-menu" role="button">
+        <span class="sr-only">Toggle navigation</span>
+      </a>
+      <!-- Navbar Right Menu -->
+      <div class="navbar-custom-menu">
+        <ul class="nav navbar-nav">
+          <!-- User Account Menu -->
+          <li class="dropdown user user-menu">
+            <!-- Menu Toggle Button -->
+            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
+              <!-- The user image in the navbar-->
+              <img src="../res/dist/img/user2-160x160.jpg" class="user-image" alt="User Image">
+              <!-- hidden-xs hides the username on small devices so only the image appears. -->
+              <span class="hidden-xs">admin</span>
+            </a>
+          </li>
+        </ul>
+      </div>
+    </nav>
+</header>
+
+<!-- common modal -->  
+<div id="com-alert" class="modal" style="z-index:9999;display: none;" >  
+      <div class="modal-dialog modal-sm">  
+        <div class="modal-content">  
+          <div class="modal-header">  
+            <button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">×</span><span class="sr-only">Close</span></button>  
+            <h5 class="modal-title"><i class="fa fa-exclamation-circle"></i> [Title]</h5>  
+          </div>  
+          <div class="modal-body small">  
+            <p>[Message]</p>  
+          </div>  
+          <div class="modal-footer" >  
+            <button type="button" class="btn btn-default cancel" data-dismiss="modal">[BtnCancel]</button>  
+            <button type="button" class="btn btn-primary ok" data-dismiss="modal">[BtnOk]</button>  
+          </div>  
+        </div>  
+      </div>  
+    </div>  
+{{ end }}

+ 37 - 0
src/web/templates/admin/com_inc.html

@@ -0,0 +1,37 @@
+{{ define "inc" }}
+<!DOCTYPE html>
+<html>
+<head>
+	<meta charset="utf-8">
+	<meta http-equiv="X-UA-Compatible" content="IE=edge">
+	<title>Extract</title>
+	<meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport">
+	<link rel="stylesheet" href="../res/bower_components/bootstrap/dist/css/bootstrap.min.css">
+	<link rel="stylesheet" href="../res/bower_components/font-awesome/css/font-awesome.min.css">
+	<link rel="stylesheet" href="../res/bower_components/Ionicons/css/ionicons.min.css">
+	<link rel="stylesheet" href="../res/bower_components/datatables.net-bs/css/dataTables.bootstrap.min.css">
+	<link rel="stylesheet" href="../res/dist/css/AdminLTE.min.css">
+	<link rel="stylesheet" href="../res/dist/css/skins/skin-blue.min.css">
+	<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
+	<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
+	<!--[if lt IE 9]>
+	<script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
+	<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
+	<![endif]-->
+	<!-- Google Font -->
+	<link rel="stylesheet"
+	     href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic">
+	<!-- js -->
+	<script src="../res/bower_components/jquery/dist/jquery.min.js"></script>
+	<script src="../res/bower_components/bootstrap/dist/js/bootstrap.min.js"></script>
+	<script src="../res/bower_components/datatables.net/js/jquery.dataTables.min.js"></script>
+	<script src="../res/bower_components/datatables.net-bs/js/dataTables.bootstrap.min.js"></script>
+	<script src="../res/bower_components/jquery-slimscroll/jquery.slimscroll.min.js"></script>
+	<script src="../res/bower_components/fastclick/lib/fastclick.js"></script>
+	<script src="../res/dist/js/adminlte.min.js"></script>
+	<script src="../res/js/model.js"></script>
+
+</head>
+<body class="hold-transition skin-blue sidebar-mini">
+<div class="wrapper">
+{{ end }}

+ 22 - 0
src/web/templates/admin/com_memu.html

@@ -0,0 +1,22 @@
+{{ define "memu" }}
+<aside class="main-sidebar">
+    <section class="sidebar">
+      <ul class="sidebar-menu" data-widget="tree">
+        <li class="header">HEADER</li>
+        <!-- Optionally, you can add icons to the links -->
+        <li class="active"><a href="/admin/user"><i class="fa fa-link"></i> <span>人员管理</span></a></li>
+        <li class="treeview">
+          <a href="#"><i class="fa fa-laptop"></i> <span>其他管理</span>
+            <span class="pull-right-container">
+                <i class="fa fa-angle-left pull-right"></i>
+              </span>
+          </a>
+          <ul class="treeview-menu">
+            <li><a href="#"><i class="fa fa-circle-o"></i>管理1</a></li>
+            <li><a href="#"><i class="fa fa-circle-o"></i>管理2</a></li>
+          </ul>
+        </li>
+      </ul>
+    </section>
+</aside>
+{{ end }}

+ 16 - 0
src/web/templates/admin/index.html

@@ -0,0 +1,16 @@
+{{template "inc"}}
+<!-- Main Header -->
+{{template "header"}}
+<!-- Left side column. 权限菜单 -->
+{{template "memu"}}
+
+  <!-- Content Wrapper. Contains page content -->
+  <div class="content-wrapper">
+    <!-- Main content -->
+    <section class="content">
+         this is index.html
+    </section>
+  </div>
+
+<!-- footer -->
+{{template "footer"}}

+ 199 - 0
src/web/templates/admin/user.html

@@ -0,0 +1,199 @@
+{{template "inc"}}
+<!-- Main Header -->
+{{template "header"}}
+<!-- Left side column. 权限菜单 -->
+{{template "memu"}}
+
+<!-- Content Wrapper. Contains page content -->
+<div class="content-wrapper">
+  <!-- Main content -->
+  <section class="content">
+      <div class="row">
+	      <div class="col-xs-12">
+	        <div class="box">
+		        <div class="box-header">
+		            <button type="button" class="btn btn-info" data-toggle="modal" data-target="#modal-info" onclick="formReset()">新增用户</button>
+		        </div>
+		        <!-- /.box-header -->
+		        <div class="box-body">
+		            <table id="dataTable" class="table table-bordered table-hover">
+		              <thead>
+		              <tr>
+		                <th>编号</th>
+						<th>账号</th>
+						<th>姓名</th>
+						<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">
+				      <input id="email" type="email" class="form-control" id="code" placeholder="请输入账号">
+				    </div>
+				</div>
+				<div class="form-group">
+				    <label for="code" class="col-sm-2 control-label">密码:</label>
+				    <div class="col-sm-10">
+				      <input id="pwd" type="password" class="form-control" id="code" placeholder="请输入密码">
+				    </div>
+				</div>
+				<div class="form-group">
+				    <label for="site" class="col-sm-2 control-label">姓名:</label>
+				    <div class="col-sm-10">
+				      <input id="name" type="text" class="form-control" placeholder="请输入姓名">
+				    </div>
+				</div>
+				<div class="form-group">
+				    <label for="modify" class="col-sm-2 control-label">角色:</label>
+				    <div class="col-sm-10">
+				     	<select id="role" class="form-control" id="modify">
+							<option value="2">开发员</option>
+							<option value="1">审核员</option>
+					  		<option value="0">管理员</option>
+						</select>
+				    </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>
+  	</div>
+  <!-- /.modal-dialog -->
+</div>
+<!-- /.modal -->
+	
+<!-- footer -->
+{{template "footer"}}
+
+<script>
+$(function () {
+	ttable=$('#dataTable').DataTable({
+		"paging"      : true,
+		"lengthChange": false,
+		"searching"   : true,
+		"ordering"    : true,
+		"info"        : true,
+		"autoWidth"   : false,
+		"ajax": {
+			"url": "/admin/user/data",
+			"type": "post",
+			"data":{}
+		 },
+		"language": {
+            "url": "../res/dist/js/dataTables.chinese.lang"
+        },
+		"columns": [
+            { "data": "_id",render:function(val,a,row){
+				return row._id
+			}},
+			{ "data": "email"},
+			{ "data": "name"},
+			{ "data": "role",render:function(val,a,row){
+				role=""
+				if(val==2){
+					role="开发员"
+				}else if(val==1){
+					role="审核员"
+				}else{
+					role="管理员"
+				}
+				return role
+			}},
+			{"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 save(){
+	email=$("#email").val()
+	pwd=$("#pwd").val()
+	name=$("#name").val()
+	role=$("#role").val()
+	if(email==""||name==""||role==""||pwd==""){
+		alert("表单填写不完整!")
+		return false;
+	}
+	$.ajax({
+		url:"/admin/user/save",
+		type:"post",
+		data:{"email":email,"pwd":pwd,"name":name,"role":role},
+		success:function(r){
+			if(r.rep){
+				$("#userform")[0].reset();
+				$("#modal-info").modal("hide");
+				ttable.ajax.reload();
+			}else{
+				alert("保存失败");
+			}
+		}
+	})
+}
+function edit(_id){
+	$.ajax({
+		url:"/admin/user/searchbyid",
+		type:"post",
+		data:{"_id":_id},
+		success:function(r){
+			if(r.rep){
+				d = r.rep
+				$("#email").val(d.email)
+				$("#email").attr("disabled",true);
+				$("#pwd").val(d.pwd)	
+				$("#name").val(d.name)
+				$("#name").attr("disabled",true);
+				$("#role").val(d.role)			
+			}
+		}
+	})
+	$("#modal-info").modal("show");
+}
+function del(_id){
+	showConfirm("确定删除?", function() {
+		$.ajax({
+			url:"/admin/user/del",
+			type:"post",
+			data:{"_id":_id},
+			success:function(r){
+				if(r.rep){				
+					ttable.ajax.reload();
+				}else{
+					showTip("删除失败", 1000, function() {});
+				}
+			}
+		})
+	});
+}
+function formReset(){
+	$("#email").attr("disabled",false);
+	$("#name").attr("disabled",false);
+	$("#userform")[0].reset();
+}
+</script>

+ 5 - 5
src/web/front/login.html → src/web/templates/front/login.html

@@ -38,7 +38,7 @@
 
     <form action="/login" method="post">
       <div class="form-group has-feedback">
-        <input id="name" type="email" class="form-control" placeholder="请输入账号">
+        <input id="email" type="email" class="form-control" placeholder="请输入账号">
         <span class="glyphicon glyphicon-envelope form-control-feedback"></span>
       </div>
       <div class="form-group has-feedback">
@@ -74,19 +74,19 @@
   });
 
 function login(){
-	var name = $("#name").val().trim().replace(/\s/g,"");
+	var email = $("#email").val().trim().replace(/\s/g,"");
 	var pwd = $("#pwd").val().trim().replace(/\s/g,"");
-	if(name==""||pwd==""){
+	if(email==""||pwd==""){
 		alert("账号和密码不能为空")
 		return false;
 	}
 	$.ajax({
 		url:"/login",
 		type:"post",
-		data:{"name":name,"pwd":pwd},
+		data:{"email":email,"pwd":pwd},
 		success:function(r){
 			if(r.checked){
-				window.location.href="/admin/web/index.html"
+				window.location.href="/admin/index"
 			}else{
 				alert("fail");
 			}