Browse Source

个人资料

layui
yirenyishi 6 years ago
parent
commit
bec7f51084
  1. 8
      controllers/BlogController.go
  2. 18
      controllers/PageController.go
  3. 87
      controllers/UserController.go
  4. BIN
      data/beeblog.db
  5. 22
      models/DataInit.go
  6. 2
      models/Like.go
  7. 12
      models/User.go
  8. 3
      routers/UserRouter.go
  9. 7
      service/BlogService.go
  10. 44
      service/LikeService.go
  11. 4
      service/UserService.go
  12. 5
      static/css/common.css
  13. 6
      static/css/me.css
  14. 6
      views/blog.html
  15. 125
      views/iframe/user.html
  16. 88
      views/uinfo.html
  17. 37
      views/ulike.html

8
controllers/BlogController.go

@ -5,7 +5,6 @@ import (
"beeblog/service"
"github.com/astaxie/beego"
"strconv"
"fmt"
)
type BlogController struct {
@ -44,8 +43,7 @@ func (this *BlogController) Get() {
this.Redirect("/500", 302)
return
}
uid := this.GetSession("userid")
if uid != nil {
if uid := this.GetSession("userid"); uid != nil {
if blog.UserId == uid.(int64) {
this.Data["IsAuthor"] = true
}
@ -53,6 +51,9 @@ func (this *BlogController) Get() {
this.Data["IsLike"] = flag
}
}
if blogs, err := service.TopBlogByUser(blog.UserId); err == nil {
this.Data["Top"] = blogs
}
this.Data["Blog"] = blog
this.Data["NickName"] = this.GetSession("nickname")
this.Data["IsLogin"] = this.GetSession("nickname") != nil
@ -126,7 +127,6 @@ func (this *BlogController) BlogsPage() {
if cat <= 0 {
cat = -1
}
fmt.Println("nelson page", num, size, cat)
pages, err := service.FindBlogs(num, size, cat, flag)
if err != nil {
this.Redirect("/500", 302)

18
controllers/PageController.go

@ -3,6 +3,7 @@ package controllers
import (
"github.com/astaxie/beego"
"beeblog/service"
"beeblog/models"
)
type PageController struct {
@ -20,6 +21,23 @@ func (this *PageController) Blog() {
this.TplName = "iframe/blog.html"
}
// @router /iframe/user [get]
func (this *PageController) IframeUser() {
uid := this.GetSession("userid")
if uid == nil {
this.Data["IsLogin"] = false
} else {
this.Data["IsLogin"] = true
if user, err := service.GetUser(uid.(int64)); err == nil {
this.Data["User"] = user
} else {
this.Data["User"] = &models.User{Id: uid.(int64)}
}
}
this.TplName = "iframe/user.html"
return
}
// @router /iframe/note [get]
func (this *PageController) IframeNote() {
this.TplName = "iframe/note.html"

87
controllers/UserController.go

@ -36,17 +36,13 @@ func (this *UserController) PersonBlog() {
flag, _ := this.GetInt("flag")
page, err := service.MeBlogs(num, size, flag, uid.(int64))
if err != nil {
if uid == nil {
this.Redirect("/500", 302)
return
}
this.Redirect("/500", 302)
return
}
user, uerr := service.GetUser(uid.(int64))
if uerr != nil {
if uid == nil {
this.Redirect("/500", 302)
return
}
this.Redirect("/500", 302)
return
}
this.Data["NickName"] = this.GetSession("nickname")
this.Data["IsLogin"] = this.GetSession("nickname") != nil
@ -75,10 +71,8 @@ func (this *UserController) PersonNote() {
notColl = make([]*models.NoteColl, 0)
}
if err != nil {
if uid == nil {
this.Redirect("/500", 302)
return
}
this.Redirect("/500", 302)
return
}
user, uerr := service.GetUser(uid.(int64))
if uerr != nil {
@ -106,13 +100,10 @@ func (this *UserController) PersonLike() {
if num <= 0 {
num = 1
}
flag, _ := this.GetInt("flag")
page, err := service.MeBlogs(num, size, flag, uid.(int64))
page, err := service.MeLikes(num, size, uid.(int64))
if err != nil {
if uid == nil {
this.Redirect("/500", 302)
return
}
this.Redirect("/500", 302)
return
}
user, uerr := service.GetUser(uid.(int64))
if uerr != nil {
@ -121,11 +112,65 @@ func (this *UserController) PersonLike() {
return
}
}
this.Data["NickName"] = this.GetSession("nickname")
this.Data["IsLogin"] = this.GetSession("nickname") != nil
this.Data["Page"] = page
this.Data["IsMeBlog"] = true
this.Data["Flag"] = 0
this.Data["IsMeLike"] = true
this.Data["User"] = user
this.TplName = "ublogs.html"
this.TplName = "ulike.html"
}
func (this *UserController) PersonInfo() {
uid := this.GetSession("userid")
if uid == nil {
this.Redirect("/login", 302)
return
}
user, err := service.GetUser(uid.(int64))
if err != nil {
this.Redirect("/500", 302)
return
}
this.Data["NickName"] = this.GetSession("nickname")
this.Data["IsLogin"] = this.GetSession("nickname") != nil
this.Data["IsMeInfo"] = true
this.Data["User"] = user
this.TplName = "uinfo.html"
}
func (this *UserController) Edit() {
uid := this.GetSession("userid")
if uid == nil {
models.ReurnError(401, "")
this.ServeJSON()
return
}
user, err := service.GetUser(uid.(int64))
if err != nil {
this.Data["json"] = models.ReurnError(500, "")
this.ServeJSON()
return
}
birthday := this.GetString("birthday")
if birthday != "" {
birthday += " 00:00:00"
if localTime, errt := time.ParseInLocation("2006-01-02 15:04:05", birthday, time.Local); errt == nil {
user.Birthday = localTime
}
}
user.NickName = this.GetString("nickName")
user.Email = this.GetString("email")
user.Mobile = this.GetString("mobile")
user.QQ = this.GetString("qqnum")
user.Sex, _ = this.GetInt("catory")
user.DescInfo = this.GetString("mdesc")
if _,err :=service.EditUser(user); err !=nil{
this.Data["json"] = models.ReurnError(500, "")
}else{
this.Data["json"] = models.ReurnSuccess("")
}
this.ServeJSON()
return
}
func (this *UserController) Login() {

BIN
data/beeblog.db

Binary file not shown.

22
models/DataInit.go

@ -1,11 +1,12 @@
package models
import (
"github.com/Unknwon/com"
"os"
"path"
//"github.com/Unknwon/com"
//"os"
//"path"
"github.com/astaxie/beego/orm"
_ "github.com/mattn/go-sqlite3"
//_ "github.com/mattn/go-sqlite3"
_ "github.com/go-sql-driver/mysql"
)
const(
@ -14,12 +15,13 @@ const(
)
func RegistDB() {
if !com.IsExist(_DB_NAME){
os.MkdirAll(path.Dir(_DB_NAME),os.ModePerm)
os.Create(_DB_NAME)
}
//if !com.IsExist(_DB_NAME){
// os.MkdirAll(path.Dir(_DB_NAME),os.ModePerm)
// os.Create(_DB_NAME)
//}
//orm.RegisterModel(new(Attachment),new(Topic))
orm.RegisterModel(new(Attachment),new(User),new(Blog),new(NLabel),new(Note),new(NoteColl),new(Category),new(Like))
orm.RegisterDriver(_SQLITE3_DRIVER,orm.DRSqlite)
orm.RegisterDataBase("default",_SQLITE3_DRIVER,_DB_NAME,10)
//orm.RegisterDriver(_SQLITE3_DRIVER,orm.DRSqlite)
//orm.RegisterDataBase("default",_SQLITE3_DRIVER,_DB_NAME,10)
orm.RegisterDataBase("default", "mysql", "root:booszy@tcp(127.0.0.1:3306)/beeblog?charset=utf8&loc=Local", 30)
}

2
models/Like.go

@ -8,5 +8,5 @@ type Like struct {
BlogId int64
Ltime time.Time `orm:"auto_now_add;type(datetime)"`
Note Note `orm:"-"`
Blog *Blog `orm:"-"`
}

12
models/User.go

@ -9,17 +9,17 @@ type User struct {
UserPwd string
Salt string
Headimg string
Birthday time.Time `orm:"null;type(date)"`
Birthday time.Time `orm:"auto_now_add;type(datetime)"`
Email string
Mobile string
QQ string
HomeUrl string
Sex int
Sex int `orm:"default(1)"`
DescInfo string
Ctime time.Time `orm:"auto_now_add;type(datetime)"`
BlogCount int
BlogBrowes int
BlogComment int
BlogLike int
BlogCount int `orm:"default(0)"`
BlogBrowes int `orm:"default(0)"`
BlogComment int `orm:"default(0)"`
BlogLike int `orm:"default(0)"`
}

3
routers/UserRouter.go

@ -11,10 +11,13 @@ func init() {
beego.Router("/login", &controllers.UserController{}, "post:Login")
beego.Router("/regist", &controllers.UserController{}, "post:Regist")
beego.Router("/regist", &controllers.UserController{}, "get:RegistPage")
beego.Router("/user/edit", &controllers.UserController{}, "post:Edit")
beego.Router("/me/blog", &controllers.UserController{}, "get:PersonBlog")
beego.Router("/me/note", &controllers.UserController{}, "get:PersonNote")
beego.Router("/me/like", &controllers.UserController{}, "get:PersonLike")
beego.Router("/me/info", &controllers.UserController{}, "get:PersonInfo")
}

7
service/BlogService.go

@ -41,6 +41,13 @@ func EditBlogBrows(id int64) {
}
}
func TopBlogByUser(uid int64) ([]*models.Blog, error) {
o := orm.NewOrm()
var blogs []*models.Blog
o.QueryTable(models.Blog{}).Filter("UserId",uid).Limit(12,0).OrderBy("-Browses").All(&blogs)
return blogs, nil
}
func GetBlog(id int64) (*models.Blog, error) {
o := orm.NewOrm()
blog := &models.Blog{Id: id}

44
service/LikeService.go

@ -4,26 +4,62 @@ import (
"beeblog/models"
"github.com/astaxie/beego/orm"
"fmt"
"beeblog/utils"
)
func SaveLike(like *models.Like) (int64, error) {
return orm.NewOrm().Insert(like)
}
func DelLike(like *models.Like) (int64, error) {
return orm.NewOrm().QueryTable(models.Like{}).Filter("BlogId",like.BlogId).Filter("UserId", like.UserId).Delete()
return orm.NewOrm().QueryTable(models.Like{}).Filter("BlogId", like.BlogId).Filter("UserId", like.UserId).Delete()
}
func IsLike(bid int64, uid int64) (bool, error) {
totalCount, err := orm.NewOrm().QueryTable(&models.Like{}).Filter("BlogId", bid).Filter("UserId", uid).Count()
if err == nil {
fmt.Println(totalCount,"like count")
fmt.Println(totalCount, "like count")
if totalCount > 0 {
return true, nil
} else {
return false, nil
}
}else{
} else {
fmt.Println(err)
return false,err
return false, err
}
}
func MeLikes(num int, size int, uid int64) (*utils.Page, error) {
page, err := countLike(num, size, uid)
if err != nil {
return nil, err
}
var likes []*models.Like
o := orm.NewOrm()
qs := o.QueryTable(&models.Like{})
qs = qs.Filter("UserId", uid)
qs = qs.Limit(size, (page.PageNo-1)*size)
if _, err = qs.All(&likes); err != nil {
return nil, err
}
if len(likes) > 0 {
for i := 0; i < len(likes); i++ {
blog := &models.Blog{Id: likes[i].BlogId}
if err := o.Read(blog); err == nil {
likes[i].Blog = blog
}
}
}
page.List = likes
return page, nil
}
func countLike(num int, size int, uid int64) (*utils.Page, error) {
o := orm.NewOrm()
qs := o.QueryTable(&models.Like{})
totalCount, err := qs.Filter("UserId", uid).Count()
if err != nil {
return nil, err
}
return utils.PageUtil(totalCount, num, size), nil
}

4
service/UserService.go

@ -62,3 +62,7 @@ func CountLike(uid int64) {
o.Raw("UPDATE `user` SET `blog_like` = (select count(id) from like where user_id = ?1) WHERE `id` = ?2 ", uid, uid).QueryRow(&browses)
return
}
func EditUser(user *models.User) (int64, error){
return orm.NewOrm().Update(user)
}

5
static/css/common.css

@ -13,6 +13,11 @@ body {
margin-top: 2px;
}
.img-circle-large{
width: 110px;
height: 110px;
}
.root-container {
position: absolute;
height: 100%;

6
static/css/me.css

@ -64,4 +64,10 @@
width: 100%;
height: 110px;
padding: 0 4%;
}
.info-header{
flex: 1;
}
.info-header span{
margin-right: 6px;
}

6
views/blog.html

@ -32,6 +32,12 @@
</div>
</div>
<hr style="height:1px;border:none;border-top:1px solid #EEE;margin: 6px;"/>
{{range .Top}}
<div>
<a href=""><p style="max-width:245px;overflow: hidden;text-overflow: ellipsis;white-space: nowrap;">{{.Title}}</p></a>
</div>
{{end}}
</div>
<div class="blog-root">
<h1 style="text-align: center">{{.Blog.Title}}</h1>

125
views/iframe/user.html

@ -0,0 +1,125 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="个人随笔是一个面向IT技术人员,提供个人平时工作总结和在线记录学习笔记,个人技术博客,在线云笔记,码农笔录,最新的技术博客,www.aiprose.com">
<meta name="keywords"
content="个人随笔,博客,个人博客,个人笔记,技术博客,免费云笔记,云笔记,随笔,IT博客,谷歌地图,码农笔录,www.aiprose.com,aiprose.com,aiprose">
<link rel="stylesheet" href="//g.alicdn.com/sui/sui3/0.0.18/css/sui.min.css">
<script type="text/javascript" src="//g.alicdn.com/sj/lib/jquery/dist/jquery.min.js"></script>
{{/*<script type="text/javascript" src="/static/js/aljquery.js"></script>*/}}
<script type="text/javascript" src="/static/js/sui.js"></script>
<script type="text/javascript" src="/static/js/layer.js"></script>
<title>首页 - 个人随笔</title>
<style>
.common {
margin: 0 0 3px 0;
}
.common label {
width: 42px;
}
.common input {
width: 150px;
height: 26px;
border-radius: 5px;
border: 1px solid #ddd;
}
</style>
</head>
<body>
<div style="margin: 20px 35px;">
<div class="common">
<label>生日:</label>
<input type="text" id="birthday" class="form-control" style="display: inline-block" placeholder="输入日期"
data-toggle="datepicker" value='{{.User.Birthday.Format "2006-01-02"}}'
data-date-start-date='1969-12-12'/>
</div>
<div class="common">
<label>昵称:</label>
<input id="nickName" value="{{.User.NickName}}">
</div>
<div class="common">
<label>邮箱:</label>
<input type="email" id="email" value="{{.User.Email}}">
</div>
<div class="common">
<label>手机:</label>
<input type="number" id="mobile" value="{{.User.Mobile}}">
</div>
<div class="common">
<label>Q Q:</label>
<input type="number" id="qqnum" value="{{.User.QQ}}">
</div>
<div class="common">
<label>性别:</label>
<select class="form-control " style="width: 150px;display: inline-block;height: 26px" id="catory">
<option value="1"></option>
<option value="0"></option>
</select>
</div>
<div class="common">
<label>简介:</label>
<textarea class="form-control" id="mdesc" rows="3"></textarea>
</div>
<div class="common" style="text-align: end;margin-top: 20px">
<button type="button" class="btn btn-xl" id="cancelBtn">取消</button>
<button type="button" class="btn btn-primary btn-xl" id="saveBtn">保存</button>
</div>
</div>
</body>
<script>
$(function () {
$("#mdesc").val("{{.User.DescInfo}}")
if(!{{.IsLogin}}){
parent.location.href = "/login"
}
$("#saveBtn").click(function () {
var obj = {}
obj.birthday = $("#birthday").val()
obj.nickName = $("#nickName").val()
obj.email = $("#email").val()
if (obj.email && obj.email.trim().length != 0) {
reg = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
if (!reg.test(obj.email)) {
layer.msg('邮箱格式不正确', function () {
});
return
}
}
obj.mobile = $("#mobile").val()
if (obj.mobile && obj.mobile.trim() != "") {
if (obj.mobile.trim().length != 11) {
layer.msg('手机号格式不对', function () {
});
return
}
}
obj.qqnum = $("#qqnum").val()
obj.catory = $("#catory").val()
obj.mdesc = $("#mdesc").val()
$.post('/user/edit', obj,
function (data) {
if (data.Status == 0) {
parent.layer.msg("保存成功", {icon: 6});
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
parent.refresh()
} else if (data.Status == 401) {
parent.location.href = "/login"
parent.layer.close(index);
} else {
layer.msg("服务器异常", {icon: 5});
}
}, 'json')
})
$("#cancelBtn").click(function () {
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
})
})
</script>
</html>

88
views/uinfo.html

@ -6,44 +6,70 @@
<div class="root-container">
{{template "nav" .}}
{{template "memenu" .}}
<div class="me-blog-root">
<div class="me-blog-list">
{{range .Page.List}}
<p><a href="/blog/{{.Id}}">{{.Title}}</a></p>
<div>
<em>发布时间:{{.Ctime.Format "2006/01/02"}}</em>
<em>浏览量:{{.Browses}}</em>
<span style="width: 35px;margin-left: 30px;"><a href="" style="color: #F84822">删除</a></span>
<span style="width: 35px;margin-left: 10px;"><a href="" style="color: #F84822">编辑</a></span>
</div>
<hr style="height:1px;border:none;border-top:1px solid #EEE;margin: 6px;"/>
{{end}}
<div style="text-align: center">
<nav>
<div class="pagination pagination-lg">
<ul>
{{if .Page.FirstPage}}
{{else}}
<li class="prev">
<a href="/me/blog?num={{ .Page.PageNo | NAdd -1}}&flag={{.Flag}}">&laquo;</a>
</li>
{{end}}
<li class="active"><a href="javascript:void(0)">{{.Page.PageNo}}</a></li>
{{if .Page.LastPage}}
{{else}}
<li class="next">
<a href="/me/blog?num={{ .Page.PageNo | NAdd +1}}&flag={{.Flag}}">&raquo;</a>
</li>
{{end}}
</ul>
<ol class="breadcrumb">
<li>个人中心</li>
<li>我的资料</li>
<li class="active">个人信息</li>
</ol>
<div style="display: flex">
<div style="width: 128px">
<img src="/static/img/2.png" alt="头像" class="img-circle img-circle-large">
</div>
<div class="info-header">
<div style="display: flex">
<p style="flex: 1;color: #888">ID: {{.User.UserName}}</p>
<p><a href="" style="text-decoration: none">个人主页 ></a></p>
</div>
<div>
<span>博客 {{.User.BlogCount}}</span>
<span>浏览量 {{.User.BlogBrowes}}</span>
<span>博客 {{.User.BlogCount}}</span>
<span>博客 {{.User.BlogCount}}</span>
</div>
</nav>
<hr style="height:1px;border:none;border-top:1px solid #EEE;margin: 10px 0 5px 0;"/>
<div>
<div style="display: flex">
<p style="flex: 1">昵称 :{{.User.NickName}}</p>
<p><a href="javascript:void(0)" style="text-decoration: none" id="editBtn">修改资料</a></p>
</div>
<p>生日 :{{.User.Birthday.Format "2006-01-02"}}</p>
<p>邮箱 :{{.User.Email}}</p>
<p>手机 :{{.User.Mobile}}</p>
<p>Q Q :{{.User.QQ}}</p>
{{if eq 0 .User.Sex}}
<p>性别 :女</p>
{{else}}
<p>性别 :男</p>
{{end}}
<p>简介 :{{.User.DescInfo}}</p>
</div>
</div>
</div>
</div>
{{template "footer"}}
<div class="me-footer">
{{template "footer"}}
</div>
</div>
</div>
</div>
</body>
<script>
function refresh() {
window.location.href = window.location.href
}
$(function () {
$("#editBtn").click(function () {
layer.open({
type: 2,
title: '修改个人资料',
shadeClose: true,
shade: 0.5,
area: ['450px', '415px'],
content: '/iframe/user.html' //iframe的url
});
})
})
</script>
</html>

37
views/ulike.html

@ -10,14 +10,16 @@
<div class="me-blog-root">
<div class="me-blog-list">
{{range .Page.List}}
<p><a href="/blog/{{.Id}}">{{.Title}}</a></p>
<div>
<em>发布时间:{{.Ctime.Format "2006/01/02"}}</em>
<em>浏览量:{{.Browses}}</em>
<span style="width: 35px;margin-left: 30px;"><a href="" style="color: #F84822">删除</a></span>
<span style="width: 35px;margin-left: 10px;"><a href="" style="color: #F84822">编辑</a></span>
<p><a href="/blog/{{.BlogId}}">{{.Blog.Title}}</a></p>
<div>
<em>收藏时间:{{.Ltime.Format "2006/01/02"}}</em>
<em>浏览量:{{.Blog.Browses}}</em>
<span style="width: 35px;margin-left: 30px;"><a href="javascript:void(0)" style="color: #F84822"
onclick="del(this,{{.BlogId}})">删除</a></span>
</div>
<hr style="height:1px;border:none;border-top:1px solid #EEE;margin: 6px;"/>
</div>
<hr style="height:1px;border:none;border-top:1px solid #EEE;margin: 6px;"/>
{{end}}
<div style="text-align: center">
<nav>
@ -46,4 +48,27 @@
</div>
</div>
</body>
<script>
function del(obj, id) {
layer.confirm('删除后将无法恢复', {
btn: ['确认', '手滑了'] //按钮
}, function () {
$.get('/unlike/' + id,
function (data) {
if (data.Status == 0) {
$(obj).parent().parent().parent().remove()
layer.msg("删除成功", {icon: 6});
} else if (data.Status == 401) {
window.location.href = "/login"
} else if (data.Status == 403) {
layer.msg("暂无权限", {icon: 5});
} else {
layer.msg("服务器异常", {icon: 5});
}
}, 'json')
}, function () {
});
}
</script>
</html>
Loading…
Cancel
Save