优化邮件夹列表展示和跳转到邮件详情

pull/30/head
taoshihan1991 5 years ago
parent 165ae5a154
commit 79bebca012

@ -26,6 +26,8 @@ func main() {
http.HandleFunc("/check", check) http.HandleFunc("/check", check)
//邮件夹接口 //邮件夹接口
http.HandleFunc("/folders", folders) http.HandleFunc("/folders", folders)
//邮件接口
http.HandleFunc("/mail", mail)
//详情界面 //详情界面
http.HandleFunc("/view", view) http.HandleFunc("/view", view)
//监听端口 //监听端口
@ -53,71 +55,7 @@ func index(w http.ResponseWriter, r *http.Request) {
//输出列表 //输出列表
func list(w http.ResponseWriter, r *http.Request) { func list(w http.ResponseWriter, r *http.Request) {
values := r.URL.Query() tmpl.RenderList(w, nil)
fid := ""
currentPage := 0
if len(values["fid"]) != 0 {
fid = values["fid"][0]
}
if len(values["page"]) != 0 {
currentPage, _ = strconv.Atoi(values["page"][0])
}
if fid == "" {
fid = "INBOX"
}
if currentPage == 0 {
currentPage = 1
}
mailServer:=tools.GetMailServerFromCookie(r)
render := new(tools.IndexData)
render.CurrentPage = currentPage
var prePage int
if (currentPage - 1) <= 0 {
prePage = 1
} else {
prePage = currentPage - 1
}
render.PrePage = fmt.Sprintf("/list?fid=%s&page=%d", fid, prePage)
render.NextPage = fmt.Sprintf("/list?fid=%s&page=%d", fid, currentPage+1)
var wg sync.WaitGroup
wg.Add(2)
go func() {
defer wg.Done()
folders := tools.GetFolders(mailServer.Server, mailServer.Email,mailServer.Password, fid)
render.Folders = folders
render.Fid = fid
//PageCount:= render.Folders[fid]/PAGE_SIZE
numPages := ""
start := currentPage - 5
if start <= 0 {
start = 1
}
end := start + 11
//if end>=PageCount{
// end=PageCount
//}
for i := start; i < end; i++ {
active := ""
if currentPage == i {
active = "active"
}
numPages += fmt.Sprintf("<li class=\"page-item %s\"><a class=\"page-link\" href=\"/list?fid=%s&page=%d\">%d</a></li>", active, fid, i, i)
}
render.NumPages = template.HTML(numPages)
}()
go func() {
defer wg.Done()
mails := tools.GetFolderMail(mailServer.Server, mailServer.Email, mailServer.Password, fid, currentPage, PageSize)
render.MailPagelist = mails
}()
wg.Wait()
tmpl.RenderList(w, render)
} }
//详情界面 //详情界面
@ -249,6 +187,59 @@ func folders(w http.ResponseWriter, r *http.Request) {
result["mails"]=mails result["mails"]=mails
}() }()
wg.Wait() wg.Wait()
result["pagesize"]=PageSize
result["fid"]=fid
msg, _ := json.Marshal(tools.JsonFolders{
JsonResult: tools.JsonResult{Code: 200, Msg: "获取成功"},
Result: result,
})
w.Write(msg)
}
//邮件接口
func mail(w http.ResponseWriter, r *http.Request) {
values := r.URL.Query()
fid := ""
if len(values["fid"]) != 0 {
fid = values["fid"][0]
} else {
fid = "INBOX"
}
var id uint32
if len(values["id"]) != 0 {
i, _ := strconv.Atoi(values["id"][0])
id = uint32(i)
} else {
id = 0
}
mailServer:=tools.GetMailServerFromCookie(r)
w.Header().Set("content-type","text/json;charset=utf-8;")
if mailServer==nil{
msg, _ := json.Marshal(tools.JsonResult{Code: 400, Msg: "验证失败"})
w.Write(msg)
return
}
var wg sync.WaitGroup
result :=make(map[string]interface{})
wg.Add(2)
go func() {
defer wg.Done()
folders := tools.GetFolders(mailServer.Server, mailServer.Email, mailServer.Password, fid)
result["folders"]=folders
result["total"]=folders[fid]
}()
go func() {
defer wg.Done()
mail := tools.GetMessage(mailServer.Server, mailServer.Email, mailServer.Password, fid, id)
result["from"] = mail.From
result["to"] = mail.To
result["subject"] = mail.Subject
result["date"] = mail.Date
result["html"] = mail.Body
}()
wg.Wait()
result["fid"]=fid
msg, _ := json.Marshal(tools.JsonFolders{ msg, _ := json.Marshal(tools.JsonFolders{
JsonResult: tools.JsonResult{Code: 200, Msg: "获取成功"}, JsonResult: tools.JsonResult{Code: 200, Msg: "获取成功"},
@ -256,8 +247,4 @@ func folders(w http.ResponseWriter, r *http.Request) {
}) })
w.Write(msg) w.Write(msg)
} }
//加密cookie
//func authCookie(){
//
//}

@ -17,7 +17,7 @@
margin: 0; margin: 0;
} }
body { body {
padding-bottom: 40px; overflow: hidden;
background-color: #f5f5f5; background-color: #f5f5f5;
} }
.el-container{ .el-container{
@ -32,6 +32,15 @@
.el-aside .el-menu{ .el-aside .el-menu{
border-right: none; border-right: none;
} }
.mainLogo{
font-size: 20px;
font-weight: bold;
}
.mainMain{
background: #fff;
margin-left: 10px;
margin-bottom: 60px;
}
</style> </style>
</head> </head>
@ -41,8 +50,9 @@
<el-menu <el-menu
default-active="2" default-active="2"
mode="horizontal"> mode="horizontal">
<el-menu-item index="1" class="mainLogo">GO-IMAP</el-menu-item> <el-menu-item index="1" class="mainLogo" v-on:click="getFolders(1)">GO-IMAP</el-menu-item>
<el-menu-item index="2">收信</el-menu-item> <el-menu-item index="2" v-on:click="getFolders(1,fid)">收信<el-badge class="mark" :value="mailTotal" style="margin-bottom: 20px;"/>
</el-menu-item>
<el-menu-item index="3">写信</el-menu-item> <el-menu-item index="3">写信</el-menu-item>
<el-header style="text-align: right; font-size: 12px" class="logout"> <el-header style="text-align: right; font-size: 12px" class="logout">
<a href="/logout">退出</a> <a href="/logout">退出</a>
@ -51,8 +61,8 @@
<el-container v-loading.fullscreen.lock="fullscreenLoading"> <el-container v-loading.fullscreen.lock="fullscreenLoading">
<el-aside> <el-aside>
<el-menu <el-menu
default-active="1"> :default-active="fid">
<el-menu-item index="1" v-on:click="" v-for="(f,v) in folderlist.folders" v-bind:key="v"> <el-menu-item :index="v" v-for="(f,v) in folderlist.folders" v-bind:key="v" v-on:click="getFolders(1,v)">
<i class="el-icon-menu"></i> <i class="el-icon-menu"></i>
<span slot="title"><{v}></span> <span slot="title"><{v}></span>
</el-menu-item> </el-menu-item>
@ -63,7 +73,7 @@
<div class="block"> <div class="block">
<el-timeline :reverse="true"> <el-timeline :reverse="true">
<el-timeline-item v-for="item in folderlist.mails" v-bind:key="item.Id" :timestamp="item.Date" placement="top"> <el-timeline-item v-for="item in folderlist.mails" v-bind:key="item.Id" :timestamp="item.Date" placement="top">
<el-card> <el-card v-on:click.native="openUrl('/view?fid='+fid+'&id='+item.Id)">
<h4><{item.Subject}></h4> <h4><{item.Subject}></h4>
<p><{item.From}> 发送于 <{item.Date}></p> <p><{item.From}> 发送于 <{item.Date}></p>
</el-card> </el-card>
@ -73,6 +83,7 @@
<el-pagination <el-pagination
background background
:current-page="page" :current-page="page"
:page-size="pagesize"
@current-change="getFolders" @current-change="getFolders"
layout="prev, pager, next" layout="prev, pager, next"
:total="mailTotal"> :total="mailTotal">
@ -91,24 +102,36 @@
folderlist:[], folderlist:[],
mailTotal:0, mailTotal:0,
page:1, page:1,
pagesize:10,
fid:"INBOX",
}, },
methods: { methods: {
//提交表单 //获取邮件夹
getFolders: function (page) { getFolders: function (page,fid) {
this.fullscreenLoading=true; this.fullscreenLoading=true;
if(page==""){ if(page==""){
page=1; page=1;
} }
var data={}; var data={};
data.page=page; data.page=page;
if(fid!=""){
data.fid=fid;
this.fid=fid;
}
let _this = this; let _this = this;
$.get('/folders',data, function (rs) { $.get('/folders',data, function (rs) {
_this.folderlist=rs.result; _this.folderlist=rs.result;
_this.mailTotal=rs.result.total; _this.mailTotal=rs.result.total;
_this.pagesize=rs.result.pagesize;
_this.fid=rs.result.fid;
_this.fullscreenLoading=false; _this.fullscreenLoading=false;
}).then(()=>{ }).then(()=>{
_this.fullscreenLoading=false; _this.fullscreenLoading=false;
}); });
},
//跳转
openUrl(url){
window.location.href=url;
}, },
}, },
created: function () { created: function () {

Loading…
Cancel
Save