7 年之前
父节点
当前提交
447dc1234a

+ 26 - 0
src/jy/admin/admin.go

@@ -3,11 +3,15 @@ package admin
 import (
 	"html/template"
 	. "jy/router"
+	"strconv"
+
+	"github.com/gin-gonic/gin"
 )
 
 var Admin = Router.Group("/admin")
 
 func init() {
+	gin.SetMode("")
 	Admin.Use(AuthMiddleWare())
 	Router.SetFuncMap(template.FuncMap{
 		"session": func(key string) string {
@@ -19,3 +23,25 @@ func init() {
 	})
 	Router.LoadHTMLGlob("web/templates/admin/*")
 }
+
+func GetPostForm(c *gin.Context) map[string]interface{} {
+	val := map[string]interface{}{}
+	r := c.Request
+	r.ParseForm()
+	for k, _ := range r.Form {
+		if k != "_id" {
+			v := r.FormValue(k)
+			switch k[:2] {
+			case "s_": //string型
+				val[k] = v
+			case "l_": //int64位
+				val[k], _ = strconv.ParseInt(v, 10, 64)
+			case "i_": //int型
+				val[k], _ = strconv.Atoi(v)
+			default:
+				val[k] = v
+			}
+		}
+	}
+	return val
+}

+ 20 - 0
src/jy/admin/buyermanager/buyermanage.go

@@ -0,0 +1,20 @@
+//采购单位管理,验证规则放在版本上,验证不是过滤。中标单位也一样
+package buyermanager
+
+import (
+	. "jy/admin"
+
+	"github.com/gin-gonic/gin"
+)
+
+func init() {
+	//列表、编辑
+	Admin.GET("/buyermanager/list", func(c *gin.Context) {
+		c.HTML(200, "buyermanager_list.html", nil)
+	})
+
+	//审核
+	Admin.GET("/buyermanager/audit", func(c *gin.Context) {
+		c.HTML(200, "buyermanager_audit.html", nil)
+	})
+}

+ 56 - 0
src/jy/admin/task/task.go

@@ -0,0 +1,56 @@
+//任务管理
+//编辑、启动、停止、测试
+package task
+
+import (
+	. "jy/admin"
+	. "jy/mongodbutil"
+	"time"
+
+	"github.com/gin-contrib/sessions"
+	"github.com/gin-gonic/gin"
+)
+
+func init() {
+	//首页
+	Admin.GET("/task", func(c *gin.Context) {
+		c.HTML(200, "task_list.html", nil)
+	})
+
+	//获取任务列表
+	Admin.POST("/task/list", func(c *gin.Context) {
+		data, _ := Mgo.Find("task", ``, `{"_id":-1}`, nil, false, -1, -1)
+		c.JSON(200, gin.H{"data": data})
+	})
+
+	//新增任务、编辑任务
+	Admin.POST("/task/save", func(c *gin.Context) {
+		data := GetPostForm(c)
+		_id, _ := c.GetPostForm("_id")
+		b := false
+		if _id == "" {
+			data["l_createtime"] = time.Now().Unix()
+			data["s_username"] = sessions.Default(c).Get("username")
+			b = Mgo.Save("task", data) != ""
+		} else {
+			data["l_lasttime"] = time.Now().Unix()
+			b = Mgo.Update("task", `{"_id":"`+_id+`"}`, map[string]interface{}{
+				"$set": data,
+			}, false, false)
+		}
+		c.JSON(200, gin.H{"rep": b})
+
+	})
+
+	//获取版本列表
+	Admin.POST("/task/getversion", func(c *gin.Context) {
+		list, b := Mgo.Find("version", `{}`, `{"_id":-1}`, `{"version":1}`, false, -1, -1)
+		if b && list != nil {
+			for _, v := range *list {
+				v["_id"] = v["version"]
+				v["s_name"] = v["version"]
+			}
+		}
+		c.JSON(200, gin.H{"data": list})
+	})
+}

+ 0 - 0
src/jy/winnermanager/winnermanager.go → src/jy/admin/winnermanager/winnermanager.go


+ 0 - 0
src/jy/buyermanager/buyermanage.go


+ 1 - 0
src/jy/front/front.go

@@ -31,6 +31,7 @@ func Login(c *gin.Context) {
 		(*res)["pwd"] = pwd
 		(*res)["_id"] = qu.BsonIdToSId((*res)["_id"])
 		session.Set("user", res)
+		session.Set("username", (*res)["name"])
 		session.Save()
 		c.JSON(200, gin.H{"checked": true})
 	} else {

+ 2 - 0
src/main.go

@@ -2,6 +2,8 @@ package main
 
 import (
 	_ "jy/admin"
+	_ "jy/admin/buyermanager"
+	_ "jy/admin/task"
 	_ "jy/front"
 	"jy/mongodbutil"
 	. "jy/router"

+ 169 - 0
src/web/res/js/dialog.js

@@ -0,0 +1,169 @@
+var tpl_input='<input type="text" class="form-control" id="{s_label}" >'
+var tpl_text='<textarea class="form-control" id="{s_label}" rows="{rows}"></textarea>'
+var tpl_hidden='<input type="hidden" id="{s_label}">'
+var tpl_small='<div class="small srule">{s_label}</div>'
+var tpl_list_local='<div class="input-group">'+
+         '<input type="text" class="form-control" id="s_show">'+
+		 '<input type="hidden" hid="hid" id="{s_label}">'+
+         '<div class="input-group-btn">'+
+         '<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" tabindex="-1">'+
+         '<span class="caret"></span></button>'+
+         '<ul class="dropdown-menu pull-right" id="u_list"></ul></div></div>';
+var tpl_list_ajax='<div class="input-group">'+
+         '<div id="s_show"></div>'+
+		 '<input type="hidden" hid="hid" id="{s_label}">'+
+         '<div class="input-group-btn">'+
+         '<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" tabindex="-1">'+
+         '<span class="caret"></span></button>'+
+         '<ul class="dropdown-menu pull-right" id="u_list"></ul></div></div>';
+		
+var tag_head='<div class="row form-group"><label for="lastname" class="col-sm-2 control-label" >{label}</label><div class="col-sm-10">{type}</div></div>'
+var notag_head='<div class="row form-group"><div class="col-sm-12">{type}</div></div>'
+
+//设置对话窗口内容并弹出对话窗口
+function OpenDialog(obj,data,callback){
+	$("#_tt").text(obj.title);
+	//生成表单
+	makeTag(obj)
+	//生成按钮
+	makeBts(obj)
+	//填充数据
+	if(data){
+		//Put值进去
+		$("#_con").find("input,textarea,div").each(function(i,el){
+			var attrid=$(el).attr("id")
+			if(attrid=="s_show"){
+				//分div中的alert或者是input放值
+				if (el.tagName=="DIV"){
+					var parent1=$(el).closest("div.input-group")
+					var tid=parent1.find("input[type=hidden]").attr("id")
+					var  sc=data[tid]
+					if (sc){						
+						$(sc.split(",")).each(function(n,v){
+							$("li[_id='"+v+"']",parent1).click()							
+						})
+					}
+				}else{				
+					var tid=$(el).closest("div.input-group").find("input[type=hidden]").attr("id")
+					$(el).val($("li[_id='"+data[tid]+"']",$(el).closest("div")).text())
+				}
+			}else{				
+				$(el).val(data[attrid])
+			}
+		})
+	}
+	//设置默认
+	if(obj.tag){
+		for(var i=0;i<obj.tag.length;i++){
+			if(obj.tag[i].default!=undefined&&!$("#"+obj.tag[i]["s_label"]).val()){
+				$("#"+obj.tag[i]["s_label"]).closest("div.input-group").find("li[_id="+obj.tag[i].default+"]").click()
+			}
+		}
+	}
+	//显示对话框
+	$('#myModal').modal('show');
+	//关闭后回调函数
+	if(callback){		
+		$('#myModal').on('hide.bs.modal', function () {
+			callback()
+		})
+	}
+}
+//按钮生成
+function makeBts(obj){
+	var btn='<button type="button" class="btn {class}">{label}</button>'
+	var str=[]
+	$("#_bts").html("");
+	if(obj.bts){
+		for(var i=0;i<obj.bts.length;i++){
+			var s=$(btn.replace(/\{(.*?)\}/g,function(a,b){return obj.bts[i][b]}))
+			if(obj.bts[i]["fun"])s.click(obj.bts[i]["fun"])
+			str.push(s)
+		}
+	}
+	if (str.length>0){
+		$("#_bts").append(str)
+	} 
+	//不能为空的表单判断
+	$("input[must],textarea[must]").closest(".row").find("label").css("color","red");
+}
+//下拉框生成
+function makeSel(obj){
+	var list;
+	if (obj.url){
+		$.ajax({ 
+		async: false, 
+		type : "POST", 
+		url : obj.url, 
+		data:obj.data,
+		dataType : 'json', 
+		success : function(data) { 
+				if(data&&data.data){
+					list=data.data		
+				} 
+			} 
+		});
+	}else if (obj.list){
+		list=obj.list
+	}
+	var str=[]
+	if (list!=null){
+		for(var i=0;i<list.length;i++){
+			var el=$('<li _id="'+list[i]._id+'"><a href="#">'+list[i].s_name+'</a></li>')
+			if(obj["fun"]){
+				el.click(obj["fun"])
+			}else{
+				el.click(function(){
+					var to=$("#"+obj.s_label)					
+					to.val($(this).attr("_id"))
+					$("#s_show",to.closest("div")).val($(this).text())
+				})
+			}
+			str.push(el)
+		}	
+	}
+	return str
+}
+//表单生成
+function makeTag(obj){
+	$("#_con").html("");
+	var str=[]
+	if(obj.tag){		
+		for(var i=0;i<obj.tag.length;i++){
+			var t=obj.tag[i]["type"]||"tpl_input";
+			//提取对应的模板
+			obj.tag[i]["type"]=eval("("+t+")");
+			obj.tag[i]["type"]=obj.tag[i]["type"].replace(/\{(.*?)\}/g,function(a,b){
+				return obj.tag[i][b]
+			})
+			var el=$(obj.tag[i]["type"])
+			if (t!="tpl_hidden"){
+				var thisTmp=tag_head //有标签和没标签的区别
+				if(!obj.tag[i]["label"]){
+					thisTmp=notag_head 			
+				}
+				el=$(thisTmp.replace(/\{(.*?)\}/g,function(a,b){
+					return obj.tag[i][b]
+				}))
+				if(t.indexOf("tpl_list")==0){//放list						
+					el.find("#u_list").append(makeSel(obj.tag[i]))
+				}
+			}
+			//val,disabled,placeholder属性值处理
+			if (obj.tag[i]["val"]){
+				el.val(obj.tag[i]["val"])
+			}
+			$(["disabled","placeholder","must"]).each(function(n,v){
+				if (obj.tag[i][v]){
+					el.find("input,textarea").attr(v,obj.tag[i][v])
+				}
+			})
+			str.push(el)
+		}
+		$("#_con").append(str)
+	}else if(obj.content){
+		$("#_con").html(obj.content)
+	}
+}
+
+Date.prototype.format=function(format){var o={"M+":this.getMonth()+1,"d+":this.getDate(),"h+":this.getHours(),"m+":this.getMinutes(),"s+":this.getSeconds(),"q+":Math.floor((this.getMonth()+3)/3),"S":this.getMilliseconds()};if(/(y+)/.test(format)){format=format.replace(RegExp.$1,(this.getFullYear()+"").substr(4-RegExp.$1.length))}for(var k in o){if(new RegExp("("+k+")").test(format)){format=format.replace(RegExp.$1,RegExp.$1.length==1?o[k]:("00"+o[k]).substr((""+o[k]).length))}}return format};function getDate(l){var date=new Date(l);pattern="yyyy-MM-dd hh:mm:ss";return date.format(pattern)};

+ 2 - 0
src/web/templates/admin/buyermanager_list.html

@@ -0,0 +1,2 @@
+
+buyer_list

+ 28 - 0
src/web/templates/admin/com_dialog.html

@@ -0,0 +1,28 @@
+{{ define "dialog" }}
+<div class="modal fade" id="myModal" tabindex="-1" role="dialog" 
+   aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static" data-keyboard="false">
+   <div class="modal-dialog">
+      <div class="modal-content">
+         <div class="modal-header">
+            <button type="button" class="close" data-dismiss="modal" 
+               aria-hidden="true">×
+            </button>
+            <h4 class="modal-title" id="_tt">
+              标题
+            </h4>
+         </div>
+         <div class="modal-body" id="_con" style="min-height:100px;max-height:1000px;">
+            内容
+         </div>
+         <div class="modal-footer">
+            <button type="button" class="btn btn-default" 
+               data-dismiss="modal">
+               关闭
+            </button>
+			<span id="_bts"></span>
+         </div>
+      </div><!-- /.modal-content -->
+   </div><!-- /.modal-dialog -->
+</div><!-- /.modal -->
+<script src="/res/js/dialog.js"></script>
+{{end}}

+ 1 - 10
src/web/templates/admin/com_memu.html

@@ -4,16 +4,7 @@
       <ul class="sidebar-menu" data-widget="tree">
         <li class="header">HEADER</li>
         <!-- Optionally, you can add icons to the links -->
-        <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>菜单</a></li>
-			</ul>
-        </li>
+		<li><a href="/admin/task"><i class="fa fa-clock-o"></i> <span>任务管理</span></a></li>
 		<li class="treeview">
           	<a href="#"><i class="fa fa-laptop"></i> <span>版本控制</span>
             <span class="pull-right-container">

+ 134 - 0
src/web/templates/admin/task_list.html

@@ -0,0 +1,134 @@
+{{template "inc"}}
+<!-- Main Header -->
+{{template "header"}}
+<!-- Left side column. 权限菜单 -->
+{{template "memu"}}
+
+<div class="content-wrapper">
+	<section class="content-header">
+		<h1>
+			<small><a class="btn btn-primary opr" opr="new">新增任务</a></small>
+		</h1>
+		<ol class="breadcrumb">
+		  <li><a href="/admin/task/list"><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> <th>创建人</th> <th>描述</th> <th>操作</th>
+		              </tr>
+		              </thead>
+		            </table>
+		        </div>
+	          <!-- /.box-body -->
+	        </div>
+        <!-- /.box -->
+		</div>
+	</div>
+  </section>
+</div>
+{{template "dialog"}}
+{{template "footer"}}
+<script>
+$(function () {
+	ttable=$('#dataTable').DataTable({
+		"paging"      : false,
+		"lengthChange": false,
+		"searching"   : false,
+		"ordering"    : false,
+		"info"        : true,
+		"autoWidth"   : false,
+		"ajax": {
+			"url": "/admin/task/list",
+			"type": "post",
+			"data":{}
+		 },
+		"language": {
+            "url": "/res/dist/js/dataTables.chinese.lang"
+        },
+		"columns": [
+            { "data": "s_taskname"},
+			{ "data": "l_createtime",render:function(val){
+				var dt=new Date()
+				dt.setTime(parseInt(val)*1000)
+				return dt.format("yyyy-MM-dd hh:mm:ss")
+			}},
+			{ "data": "s_username"},
+			{ "data": "s_descript","width":"25%"},
+			{"data":"_id","width":"25%",render:function(val,a,row,pos){
+				tmp = '<div>'+
+					'<a class="btn btn-sm btn-primary opr" opr="edit" row="'+pos.row+'" >编辑</a> '+
+					'<a class="btn btn-sm btn-success opr" opr="start">启动</a> '+
+					'<a class="btn btn-sm btn-info opr" opr="stop">停止</a> '+
+					'<a class="btn btn-sm btn-warning opr" opr="test">测试</a>'+
+					'</div>';
+				return  tmp
+			}}
+       	]
+	});
+	ttable.on('init.dt', function () {
+		$(".opr").click(function(){
+			var n=$(this).attr("opr")
+			var htmlObj={},obj
+			var _tit=""
+			switch(n){
+			case "edit":			
+				obj=ttable.row($(this).closest("tr")).data()	
+			case "new":
+				if(n=="edit"){
+					_tit="编辑-"+obj.s_taskname
+				}else{
+					_tit="新增抽取任务"
+				}
+				htmlObj={
+					title:_tit,
+					tag:[
+					{label:"任务名称",s_label:"s_taskname",placeholder:"剑鱼抽取",must:true},
+					{label:"描述",s_label:"s_descript",type:"tpl_text"},
+					{label:"是否统计",s_label:"i_count",type:"tpl_list_local",must:true,list:[{"s_name":"是","_id":1},{"s_name":"否","_id":0}],default:0},
+					{label:"使用版本",s_label:"s_version",type:"tpl_list_local",must:true,list:[{"s_name":"是","_id":1},{"s_name":"否","_id":0}],default:0,url:"/admin/task/getversion"},
+					{s_label:"_id",type:"tpl_hidden"}
+					],
+					bts:[
+						{label:"保存",class:"btn-primary",
+							fun:function(){
+								var obj={}
+								var bcon=true
+								$("#_con").find("input[id!=s_show],textarea").each(function(i,el){
+									var val=$(el).val();
+									if(el.id!="_id"&&$(el).attr("must")&&!val){
+										bcon=false
+										return false
+									}
+									obj[el.id]=$(el).val()
+								})
+								if (bcon){								
+									$.post("/admin/task/save",obj,function(data){
+										if(data&&data.rep){
+											window.location.href="/admin/task"								
+										}else{
+											alert(data.msg)
+										}
+									},'json')
+								}else{
+									alert("红色标签的表单不能为空!")
+								}
+							}
+						}
+					]
+				}
+			OpenDialog(htmlObj,obj)
+			break;
+			}
+		});
+	})
+	
+})
+</script>