瀏覽代碼

登陆功能-首页展示

caipin 5 年之前
父節點
當前提交
fe3c8275b9

+ 1 - 1
conf/project.go

@@ -18,7 +18,7 @@ var SysTimeLocation, _ = time.LoadLocation("Asia/Chongqing")
 var SignSecret = []byte("cpcm005687gokaif")
 
 // cookie中的加密验证密钥
-var CookieSecret = "&alt_8898_construction_management"
+var CookieSecret = "cm_login_account"
 
 const UserPrizeMax = 3000 // 用户每天最多抽奖次数
 

+ 3 - 4
services/login_service.go

@@ -15,6 +15,7 @@ import (
 
 	"github.com/kataras/iris/v12"
 	"go.mod/comm"
+	"go.mod/conf"
 	"go.mod/dao"
 	"go.mod/datasource"
 	"go.mod/lib"
@@ -32,7 +33,6 @@ type LoginService interface {
 type loginService struct {
 	projectAccountDao *dao.ProjectAccountDao
 	projectDao        *dao.ProjectDao
-	loginKey          string
 }
 
 //创建项目用户service
@@ -40,7 +40,6 @@ func NewLoginService() LoginService {
 	return &loginService{
 		projectAccountDao: dao.NewProjectAccountDao(datasource.InstanceDbMaster()),
 		projectDao:        dao.NewProjectDao(datasource.InstanceDbMaster()),
-		loginKey:          "cm_login_account",
 	}
 }
 
@@ -82,8 +81,8 @@ func (s *loginService) ValidProjectAccount(loginData viewmodels.Login, writer ht
 		return err
 	}
 	// 加密用户标识 生成数字证书
-	identity := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.Id), s.loginKey)
-	digitalToken := comm.CreateSign(s.loginKey + strconv.Itoa(projectAccountInfo.Id))
+	identity := comm.AesEncrypt(strconv.Itoa(projectAccountInfo.Id), conf.CookieSecret)
+	digitalToken := comm.CreateSign(conf.CookieSecret + strconv.Itoa(projectAccountInfo.Id))
 	// 设置cookie
 	maxAge := 60 * 60 * 24 * 7
 	params := url.Values{}

+ 1 - 1
web/controllers/index.go

@@ -22,7 +22,7 @@ type IndexController struct {
 // 默认首页
 func (c *IndexController) Get() string {
 	c.Ctx.Header("Content-Type", "text/html")
-	return "welcome to Go抽奖系统222,<a href='/public/index.html'>开始抽奖</a>"
+	return "welcome to"
 }
 
 //返回json示例

+ 0 - 6
web/controllers/login.go

@@ -4,12 +4,6 @@
  * @Date: 2020-08-28 10:26:02
  * @FilePath: \construction_management\web\controllers\login.go
  */
-/*
- * @description:
- * @Author: CP
- * @Date: 2020-08-28 10:26:02
- * @FilePath: \construction_management\web\controllers\login.go
- */
 package controllers
 
 import (

+ 5 - 5
web/controllers/project.go

@@ -16,12 +16,12 @@ type ProjectController struct {
 // 默认首页
 func (c *ProjectController) Get() mvc.Result {
 	return mvc.View{
-		Name: "login/login.html",
+		Name: "project/dashboard.html",
 		Data: iris.Map{
-			"Title":   "用户登录",
-			"Channel": "login",
-			"Action":  "login",
+			"Title":   "待办事项",
+			"Channel": "project",
+			"Action":  "project",
 		},
-		Layout: "login/layout.html",
+		Layout: "project/layout.html",
 	}
 }

+ 24 - 0
web/controllers/project_bidsection.go

@@ -0,0 +1,24 @@
+/*
+ * @description:项目-标段管理相关
+ * @Author: CP
+ * @Date: 2020-09-04 17:21:29
+ * @FilePath: \construction_management\web\controllers\project_bidsection.go
+ */
+package controllers
+
+import (
+	"github.com/kataras/iris/v12"
+	"github.com/kataras/iris/v12/mvc"
+)
+
+func (c *ProjectController) GetBidsection() mvc.Result {
+	return mvc.View{
+		Name: "project/bidsection.html",
+		Data: iris.Map{
+			"Title":   "标段管理",
+			"Channel": "bidsection",
+			"Action":  "project/bidsection",
+		},
+		Layout: "project/layout.html",
+	}
+}

+ 40 - 7
web/middleware/sessions.go

@@ -2,22 +2,55 @@
  * @description: session判断中间件
  * @Author: CP
  * @Date: 2020-08-28 14:17:23
- * @FilePath: \construction_management\web\middleware\sessions_auth.go
+ * @FilePath: \construction_management\web\middleware\sessions.go
  */
 package middleware
 
 import (
-	"fmt"
+	"net/url"
+	"strconv"
 
-	"github.com/iris-contrib/middleware/csrf"
 	"github.com/kataras/iris/v12"
+	"go.mod/comm"
+	"go.mod/conf"
+	"go.mod/dao"
+	"go.mod/datasource"
 )
 
 func SessionsAuth(ctx iris.Context) {
-	//TODO 会话权限-判断
-	fmt.Println("seesionsAuth")
-	//通过后执行下一步
+	// 获得cookie
+	cookie, err := ctx.Request().Cookie("cm")
+	if err != nil {
+		comm.Redirect(ctx.ResponseWriter(), "/login")
+	}
+	// 格式化
+	params, err := url.ParseQuery(cookie.Value)
+	if err != nil {
+		comm.Redirect(ctx.ResponseWriter(), "/login")
+	}
+
+	// 解密用户标识
+	identity := comm.AesDecrypt(params.Get("identity"), conf.CookieSecret)
+	digitalToken := comm.CreateSign(conf.CookieSecret + identity)
+
+	// 获得用户信息--TODO 存放redis
+	npaDao := dao.NewProjectAccountDao(datasource.InstanceDbMaster())
+	identityId, err := strconv.Atoi(identity)
+	if err != nil {
+		comm.Redirect(ctx.ResponseWriter(), "/login")
+	}
+	accountInfo := npaDao.Get(identityId)
+	if accountInfo.Id == 0 {
+		comm.Redirect(ctx.ResponseWriter(), "/login")
+	}
+	ctx.Values().Set("account", accountInfo)
 
-	ctx.ViewData(csrf.TemplateTag, csrf.TemplateField(ctx))
+	// 比对数字证书
+	if digitalToken != params.Get("digitalToken") {
+		comm.Redirect(ctx.ResponseWriter(), "/login")
+	}
+	// TODO 分布式session
+
+	//通过后执行下一步
 	ctx.Next()
 }

+ 2 - 1
web/routes/routes.go

@@ -41,7 +41,8 @@ func Configure(b *bootstrap.Bootstrapper) {
 	//项目相关
 	project := mvc.New(b.Party("/project"))
 	project.Register(ProjectService)
-
+	project.Router.Use(middleware.SessionsAuth)
+	project.Handle(new(controllers.ProjectController))
 	//项目用户相关
 	//account := mvc.New(b.Party("/account"))
 	//account.Router.Use(middleware.BasicAuth)

+ 7 - 0
web/views/head/comm_foot_js.html

@@ -0,0 +1,7 @@
+
+<!-- JS. -->
+<script src="/public/static/js/jquery/jquery-3.2.1.min.js"></script>
+<script src="/public/static/js/popper/popper.min.js"></script>
+<script src="/public/static/js/bootstrap/bootstrap.min.js"></script>
+<script src="/public/static/js/global.js"></script>
+<script type="text/javascript">  autoFlashHeight();</script>

+ 14 - 0
web/views/head/comm_head.html

@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+    <meta http-equiv="x-ua-compatible" content="ie=edge">
+    <title>{{.Title}}-纵横工程建设项目管理系统</title>
+    <link rel="stylesheet" href="/public/static/css/bootstrap/bootstrap.min.css">
+    <link rel="stylesheet" href="/public/static/css/main.css">
+    <link rel="stylesheet" href="/public/static/css/font-awesome/all.min.css">
+<style>
+html{height:100%;}
+</style>
+</head>

+ 37 - 0
web/views/head/comm_nav.html

@@ -0,0 +1,37 @@
+<div class="main-nav d-flex align-items-start flex-column">
+  <div class="logo"><img src="/public/static/img/logo.png"></div>
+  <div class="nav-top">
+    <ul class="nav nav-pills nav-stacked bg-nav">
+      <!--系统维护信息-->
+      <li class="bg-danger"><a class="text-white maintain-icon"><i class="fa fa-wrench "></i><span
+            class="bg-danger maintain-info">系统将于 2019年3月10日 14:09 开始停机维护,持续30分钟。</span></a></li>
+      <!--系统维护信息 end-->
+      <li class="active">
+        <a href="/project" data-toggle="tooltip" data-placement="right" title="" data-original-title="代办事项"><i
+            class="fas fa-chalkboard"></i><span>待办</span></a>
+      </li>
+      <li>
+        <a href="/project/bidsection" data-toggle="tooltip" data-placement="right" title="" data-original-title="标段管理"><i
+            class="fas fa-list-ul"></i><span>项目</span></a>
+      </li>
+    </ul>
+  </div>
+  <div class="nav-bottom mt-auto">
+    <ul class="nav nav-pills nav-stacked bg-nav">
+      <li><a href="settings-poj.html" data-toggle="tooltip" data-placement="right" title=""
+          data-original-title="项目设置"><i class="fa fa-cogs"></i><span>项目设置</span></a></li>
+    </ul>
+    <div class="dropright my-1 ml-1">
+      <a href="" class="btn btn-sm btn-light" data-toggle="dropdown" aria-haspopup="false" aria-expanded="false">
+        张三
+      </a>
+      <div class="dropdown-menu">
+        <a href="account-info.html" class="dropdown-item">账号资料</a>
+        <a href="#" class="dropdown-item">账号安全</a>
+        <div class="dropdown-divider"></div>
+        <a href="http://doc.zhzdwd.com/docs/measure" target="_blank" class="dropdown-item">用户手册</a>
+        <a href="#" class="dropdown-item">退出登录</a>
+      </div>
+    </div>
+  </div>
+</div>

+ 1 - 14
web/views/login/layout.html

@@ -1,17 +1,4 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="utf-8">
-    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
-    <meta http-equiv="x-ua-compatible" content="ie=edge">
-    <title>{{.Title}}-纵横工程建设项目管理系统</title>
-    <link rel="stylesheet" href="/public/static/css/bootstrap/bootstrap.min.css">
-    <link rel="stylesheet" href="/public/static/css/main.css">
-    <link rel="stylesheet" href="/public/static/css/font-awesome/all.min.css">
-<style>
-html{height:100%;}
-</style>
-</head>
+{{ render "head/comm_head.html" }}
 <body class="login-body">
     {{ yield }}
 </body>

+ 1 - 6
web/views/login/login.html

@@ -1,9 +1,4 @@
-<!--
- * @description: 
- * @Author: CP
- * @Date: 2020-08-27 17:09:05
- * @FilePath: \construction_management\web\views\login\login.html
--->
+
 <div class="login-bg img-1"></div>
 <div class="container">
     <div class="row">

+ 116 - 0
web/views/project/bidsection.html

@@ -0,0 +1,116 @@
+<div class="main-panel">
+    <div class="panel-content">
+      <div class="panel-title fluid">
+        <div class="title-main  d-flex justify-content-between">
+          <div>
+            <div class="d-inline-block mr-2">
+              <!--展开/收起-->
+              <div class="btn-group">
+                <button type="button" class="btn btn-sm btn-light text-primary dropdown-toggle" data-toggle="dropdown" id="zhankai">展开/收起</button>
+                <div class="dropdown-menu" aria-labelledby="zhankai">
+                  <a class="dropdown-item" href="#">展开所有</a>
+                  <a class="dropdown-item" href="#">收起所有</a>
+                </div>
+              </div>
+            </div>
+          </div>
+          <div>
+            <a href="settings-data.html" class="btn btn-sm btn-light text-primary"><i class="fas fa-cog"></i> 标段管理</a>
+          </div>
+        </div>
+      </div>
+      <div class="content-wrap">
+          <div class="sjs-height-0">
+        <div class="c-body">
+            <!--没有标段数据-->
+            <div class="jumbotron">
+              <h3 class="display-6">还没有标段数据</h3>
+            </div>
+            <!--标段概况-->
+            <table class="table table-hover table-bordered">
+              <thead class="text-center">
+                <th>名称</th>
+                <th>收入合同金额</th>
+                <th>收款进度</th>
+                <th>支出合同金额</th>
+                <th>付款进度</th>
+                <th>质量巡检待整改</th>
+                <th>安全巡检待审批</th>
+              </thead>
+              <tr>
+                <td class="in-1"><span class="fold-switch mr-1" title="展开"><i class="fal fa-plus-square"></i></span><i class="fal fa-folder"></i>&nbsp;文件夹1</td>
+                <td class="text-right">0.00</td>
+                <td class="text-center">0%</td>
+                <td class="text-right">0.00</td>
+                <td class="text-center">0%</td>
+                <td class="text-center">0</td>
+                <td class="text-center">0</td>
+              </tr>
+              <tr>
+                <td class="in-1"><span class="fold-switch mr-1" title="收起"><i class="fal fa-minus-square"></i></span><i class="fal fa-folder-open"></i>&nbsp;文件夹2</td>
+                <td class="text-right">60000.00</td>
+                <td class="text-center">56%</td>
+                <td class="text-right">20000.00</td>
+                <td class="text-center">20%</td>
+                <td class="text-center">15</td>
+                <td class="text-center">22</td>
+              </tr>
+              <tr>
+                <td class="in-2"><span class="fold-switch mr-1" title="收起"><i class="fal fa-minus-square"></i></span><i class="fal fa-folder-open"></i>&nbsp;文件夹2.1</td>
+                <td class="text-right">40000.00</td>
+                <td class="text-center">36%</td>
+                <td class="text-right">10000.00</td>
+                <td class="text-center">10%</td>
+                <td class="text-center">8</td>
+                <td class="text-center">13</td>
+              </tr>
+              <tr>
+                <td class="in-3"><span class="text-muted mr-2">├</span><a href="biaoduan-panel.html">WWUJ-1<td class="text-right">30000.00</td>
+                <td class="text-center">16%</td>
+                <td class="text-right">7000.00</td>
+                <td class="text-center">4%</td>
+                <td class="text-center">4</td>
+                <td class="text-center">9</td>
+              </tr>
+              <tr>
+                <td class="in-3"><span class="text-muted mr-2">└</span><a href="biaoduan-panel.html">WWUJ-4</a></td>
+                <td class="text-right">10000.00</td>
+                <td class="text-center">20%</td>
+                <td class="text-right">3000.00</td>
+                <td class="text-center">7%</td>
+                <td class="text-center">4</td>
+                <td class="text-center">4</td>
+              </tr>
+              <tr>
+                <td class="in-2"><span class="fold-switch mr-1" title="收起"><i class="fal fa-minus-square"></i></span><i class="fal fa-folder-open"></i>&nbsp;文件夹2.2</td>
+                <td class="text-right">20000.00</td>
+                <td class="text-center">20%</td>
+                <td class="text-right">10000.00</td>
+                <td class="text-center">10%</td>
+                <td class="text-center">7</td>
+                <td class="text-center">9</td>
+              </tr>
+              <tr>
+                <td class="in-3"><span class="text-muted mr-2">├</span><a href="#">WWUJ-2</a></td>
+                <td class="text-right">15000.00</td>
+                <td class="text-center">15%</td>
+                <td class="text-right">1000.00</td>
+                <td class="text-center">1%</td>
+                <td class="text-center">2</td>
+                <td class="text-center">3</td>
+              </tr>
+              <tr>
+                <td class="in-3"><span class="text-muted mr-2">└</span><a href="biaoduan-panel.html">WWUJ-3</a></td>
+                <td class="text-right">5000.00</td>
+                <td class="text-center">5%</td>
+                <td class="text-right">9000.00</td>
+                <td class="text-center">9%</td>
+                <td class="text-center">5</td>
+                <td class="text-center">6</td>
+              </tr>
+            </table>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>

+ 218 - 0
web/views/project/dashboard.html

@@ -0,0 +1,218 @@
+
+<div class="main-panel">
+  <div class="panel-content">
+    <div class="panel-title fluid">
+      <div class="title-main"><h2>待办事项</h2></div>
+    </div>
+    <div class="content-wrap">
+      <div class="sjs-height-0">
+        <div class="row m-4">
+          <div class="col-12">
+            <h3 class="mb-2">项目名称</h3>
+          </div>
+          <!--系统维护-->
+          <div class="col-12">
+            <!--系统维护信息-->
+            <div class="card mb-3 bg-danger text-white">
+              <div class="card-body">
+                 <h4><i class="fa fa-wrench"></i> 系统将于 2019年3月10日 14:09 开始停机维护,持续30分钟。造成不便敬请谅解。</h4>
+                 <h5>维护内容</h5>
+              </div>
+            </div>
+          </div>
+          <!--需要处理-->
+          <div class="col-5">
+            <div class="card">
+              <div class="card-header">需要你处理</div>
+              <div class="card-body"><!-- 
+                <ul class="list-unstyled m-0">
+                  <li class="media pb-3 mb-3 border-bottom-1">
+                    <div class="media-body">
+                      <div class="row">
+                        <div class="col-auto"><span class="badge badge-info">质量巡检</span></div>
+                        <div class="col-6"><a href="taizhang.html">WWUJ-1</a> 台帐</div>
+                        <div class="col-3 ml-auto text-right pl-0"><a href="taizhang-shenpi.html" class="btn btn-sm btn-outline-primary">审批</a></div>
+                      </div>
+                      <p class="mt-1 mb-0">张三<small class="ml-1 text-muted">- 监理—</small><span class="pull-right text-muted">02-28 13:23</span></p>
+                    </div>
+                  </li>
+                  <li class="media pb-3 mb-3 border-bottom-1">
+                    <div class="media-body">
+                      <div class="row">
+                        <div class="col-auto"><span class="badge badge-success">安全巡检</span></div>
+                        <div class="col-6"><a href="taizhang.html">WWUJ-1</a> 第1期</div>
+                        <div class="col-3 ml-auto text-right pl-0"><a href="taizhang-shenpi.html" class="btn btn-sm btn-outline-primary">审批</a></div>
+                      </div>
+                      <p class="mt-1 mb-0">张三<small class="ml-1 text-muted">- 监理—</small><span class="pull-right text-muted">02-28 13:23</span></p>
+                    </div>
+                  </li>
+                </ul> -->
+                <!--没有处理信息-->
+                <p class="text-center text-muted">暂时没有需要你处理的事项</p>
+              </div>
+            </div>
+          </div>
+          <!--需要关注-->
+          <div class="col-5">
+            <div class="card">
+              <div class="card-header">需要你关注</div>
+              <div class="card-body">
+                <!-- <ul class="list-unstyled m-0">
+                  <li class="media pb-3 mb-3 border-bottom-1">
+                    <div class="media-body">
+                      <div class="row">
+                        <div class="col-auto"><span class="badge badge-info">台帐审批</span></div>
+                        <div class="col-6"><a href="taizhang.html">WWUJ-1</a> 台帐审批通过</div>
+                      </div>
+                      <p class="mt-1 mb-0">李四<small class="ml-1 text-muted">- 业主</small><span class="pull-right text-muted">02-30 09:11</span></p>
+                    </div>
+                  </li>
+                  <li class="media pb-3 mb-3 border-bottom-1">
+                    <div class="media-body">
+                      <div class="row">
+                        <div class="col-auto"><span class="badge badge-info">台帐审批</span></div>
+                        <div class="col-6"><a href="taizhang.html">WWUJ-1</a> 台帐审批通过</div>
+                      </div>
+                      <p class="mt-1 mb-0">王五<small class="ml-1 text-muted">- 监理二</small><span class="pull-right text-muted">02-29 16:22</span></p>
+                    </div>
+                  </li>
+                  <li class="media pb-3 mb-3 border-bottom-1">
+                    <div class="media-body">
+                      <div class="row">
+                        <div class="col-auto"><span class="badge badge-info">台帐审批</span></div>
+                        <div class="col-6"><a href="taizhang.html">WWUJ-1</a> 台帐审批通过</div>
+                      </div>
+                      <p class="mt-1 mb-0">张三<small class="ml-1 text-muted">- 监理—</small><span class="pull-right text-muted">02-28 13:23</span></p>
+                    </div>
+                  </li>
+                </ul> -->
+                <!--没有关注信息-->
+                <p class="text-center text-muted">暂时没有需要你关注的事项</p>
+              </div>
+            </div>
+          </div>
+          <!--销售信息-->
+          <div class="col-2">
+            <div class="card">
+              <div class="card-body">
+                <h5 class="card-title">纵横技术支持</h5>
+                <h6 class="card-subtitle mb-2 text-muted">张三</h6>
+              </div>
+              <ul class="list-group list-group-flush">
+                <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="腾讯QQ"><i class="fab fa-qq fa-fw"></i> 914630468</li>
+                <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="手机号码"><i class="fas fa-mobile-alt fa-fw"></i> 15812644017</li>
+                <li class="list-group-item" data-toggle="tooltip" data-placement="bottom" title="固定电话"><i class="fas fa-phone-volume fa-fw"></i> 0756-3850891</li>
+              </ul>
+            </div>
+            <div class="card mt-2">
+              <div class="card-body">
+                <a href="#version" data-toggle="modal" data-target="#version">当前版本:1.2.0</a>
+              </div>
+            </div>
+          </div>
+          <!--系统消息通知-->
+          <div class="col-12 mt-3">
+            <div>
+              <div class="card-body row">
+                <div class="col-auto">系统消息</div>
+                <div class="col-auto">
+                  <a href="" class="mr-5 mb-2">这是消息通知的标题标题(2019-02-01)</a><a href="" class="mr-5">这是消息通知的标题标题(2019-02-01)</a>
+                  </div>
+              </div>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+
+{{ define "project/dashboard-body"}}
+<!--弹出所有项目通知-->
+<div class="modal fade" id="view-msg" data-backdrop="static">
+  <div class="modal-dialog modal-lg" role="document">
+      <div class="modal-content">
+          <div class="modal-header">
+              <h5 class="modal-title">项目通知</h5>
+              <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                <span aria-hidden="true">&times;</span>
+              </button>
+          </div>
+          <div class="modal-body">
+            <div class="row">
+              <div class="col-12">
+                <div class="modal-height-500 scroll-y">
+                   <h4 class="text-center">通知标题</h4>
+                   <p class="text-center text-muted">
+                     张三 发布于 2019-02-02 
+                   <!--有编辑权用户-->
+                     <a href="" class="btn btn-sm btn-outline-primary">编辑</a> <a href="" class="btn btn-sm btn-outline-danger">删除</a>
+                   </p>
+                   <!--内容开始-->
+                   <div class="msg-content border-top-1 pt-3">
+                     <!--内容-->
+                      <p>内容</p>
+                      <p style="height:500px">内容</p>
+                      <p>内容</p>
+                     <!--内容-->
+                   </div>
+                </div>
+              </div>
+            </div>
+          </div>
+      </div>
+  </div>
+</div>
+<!--版本-->
+<div class="modal fade" id="version" data-backdrop="static">
+<div class="modal-dialog" role="document">
+  <div class="modal-content">
+      <div class="modal-header">
+          <h5 class="modal-title">升级说明</h5>
+      </div>
+      <div class="modal-body">
+        <div class="modal-height-500" style="overflow-y:auto">
+          <div class="card">
+            <div class="card-body">
+              <h4>v1.2.0</h4>
+              <p class="card-text">2020-01-02</p>
+              <p class="card-text">版本内容</p>
+            </div>
+          </div>
+          <div class="card mt-2">
+            <div class="card-body">
+              <h4>v1.1.0</h4>
+              <p class="card-text">2020-01-02</p>
+              <p class="card-text">版本内容</p>
+            </div>
+          </div>
+          <div class="card mt-2">
+            <div class="card-body">
+              <h4>v1.0.0</h4>
+              <p class="card-text">2020-01-02</p>
+              <p class="card-text">版本内容</p>
+            </div>
+          </div>
+          <div class="card mt-2">
+            <div class="card-body">
+              <h4>v0.9.0</h4>
+              <p class="card-text">2020-01-02</p>
+              <p class="card-text">版本内容</p>
+            </div>
+          </div>
+          <div class="card mt-2">
+            <div class="card-body">
+              <h4>v0.8.0</h4>
+              <p class="card-text">2020-01-02</p>
+              <p class="card-text">版本内容</p>
+            </div>
+          </div>
+        </div>
+      </div>
+    <div class="modal-footer">
+      <button type="button" class="btn btn-sm btn-secondary" data-dismiss="modal">关闭</button>
+    </div>
+  </div>
+</div>
+</div>
+{{ end }}

+ 17 - 0
web/views/project/layout.html

@@ -0,0 +1,17 @@
+
+{{ render "head/comm_head.html" }}
+<body>
+	<div class="main">
+    
+    {{ render "head/comm_nav.html" }}
+
+    {{ yield }}
+		
+  </div>
+  {{ part "body" }}
+ 
+  {{ render "head/comm_foot_js.html" }}
+
+</body>
+
+</html>