mirror of https://github.com/mindoc-org/mindoc.git
钉钉初步免登,移动端样式优化
parent
545537ecf1
commit
3ca09b7cbf
|
@ -19,6 +19,8 @@ var (
|
||||||
ErrorMemberPasswordError = errors.New("用户密码错误")
|
ErrorMemberPasswordError = errors.New("用户密码错误")
|
||||||
//ErrorMemberAuthMethodInvalid 不支持此认证方式
|
//ErrorMemberAuthMethodInvalid 不支持此认证方式
|
||||||
ErrMemberAuthMethodInvalid = errors.New("不支持此认证方式")
|
ErrMemberAuthMethodInvalid = errors.New("不支持此认证方式")
|
||||||
|
//ErrHTTPServerFail
|
||||||
|
ErrHTTPServerFail = errors.New("系统内部异常")
|
||||||
//ErrLDAPConnect 无法连接到LDAP服务器
|
//ErrLDAPConnect 无法连接到LDAP服务器
|
||||||
ErrLDAPConnect = errors.New("无法连接到LDAP服务器")
|
ErrLDAPConnect = errors.New("无法连接到LDAP服务器")
|
||||||
//ErrLDAPFirstBind 第一次LDAP绑定失败
|
//ErrLDAPFirstBind 第一次LDAP绑定失败
|
||||||
|
|
|
@ -185,14 +185,14 @@ func (m *Member) httpLogin(account, password string) (*Member, error) {
|
||||||
resp, err := http.PostForm(urlStr, val)
|
resp, err := http.PostForm(urlStr, val)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
beego.Error("通过接口登录失败 -> ", urlStr, account, err)
|
beego.Error("通过接口登录失败 -> ", urlStr, account, err)
|
||||||
return nil, err
|
return nil, ErrHTTPServerFail
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer resp.Body.Close()
|
||||||
|
|
||||||
body, err := ioutil.ReadAll(resp.Body)
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
beego.Error("读取接口返回值失败 -> ", urlStr, account, err)
|
beego.Error("读取接口返回值失败 -> ", urlStr, account, err)
|
||||||
return nil, err
|
return nil, ErrHTTPServerFail
|
||||||
}
|
}
|
||||||
beego.Info("HTTP 登录接口返回数据 ->", string(body))
|
beego.Info("HTTP 登录接口返回数据 ->", string(body))
|
||||||
|
|
||||||
|
@ -200,7 +200,7 @@ func (m *Member) httpLogin(account, password string) (*Member, error) {
|
||||||
|
|
||||||
if err := json.Unmarshal(body, &result); err != nil {
|
if err := json.Unmarshal(body, &result); err != nil {
|
||||||
beego.Error("解析接口返回值失败 -> ", urlStr, account, string(body))
|
beego.Error("解析接口返回值失败 -> ", urlStr, account, string(body))
|
||||||
return nil, errors.New("解析接口返回值失败")
|
return nil, ErrHTTPServerFail
|
||||||
}
|
}
|
||||||
|
|
||||||
if code, ok := result["errcode"]; !ok || code.(float64) != 200 {
|
if code, ok := result["errcode"]; !ok || code.(float64) != 200 {
|
||||||
|
@ -208,7 +208,7 @@ func (m *Member) httpLogin(account, password string) (*Member, error) {
|
||||||
if msg, ok := result["message"]; ok {
|
if msg, ok := result["message"]; ok {
|
||||||
return nil, errors.New(msg.(string))
|
return nil, errors.New(msg.(string))
|
||||||
}
|
}
|
||||||
return nil, errors.New("接口返回值格式不正确")
|
return nil, ErrHTTPServerFail
|
||||||
}
|
}
|
||||||
if m.MemberId <= 0 {
|
if m.MemberId <= 0 {
|
||||||
member := NewMember()
|
member := NewMember()
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
package models
|
package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/lifei6671/mindoc/conf"
|
|
||||||
"errors"
|
"errors"
|
||||||
"github.com/astaxie/beego/orm"
|
|
||||||
"github.com/astaxie/beego"
|
"github.com/astaxie/beego"
|
||||||
|
"github.com/astaxie/beego/orm"
|
||||||
|
"github.com/lifei6671/mindoc/conf"
|
||||||
)
|
)
|
||||||
|
|
||||||
type TeamMember struct {
|
type TeamMember struct {
|
||||||
|
@ -204,16 +205,16 @@ func (m *TeamMember) FindNotJoinMemberByAccount(teamId int, account string, limi
|
||||||
}
|
}
|
||||||
o := orm.NewOrm()
|
o := orm.NewOrm()
|
||||||
|
|
||||||
sql := `select member.member_id,member.account,team.team_member_id
|
sql := `select member.member_id,member.account,member.real_name,team.team_member_id
|
||||||
from md_members as member
|
from md_members as member
|
||||||
left join md_team_member as team on team.team_id = ? and member.member_id = team.member_id
|
left join md_team_member as team on team.team_id = ? and member.member_id = team.member_id
|
||||||
where member.account like ? AND team_member_id IS NULL
|
where member.account like ? or member.real_name like ? AND team_member_id IS NULL
|
||||||
order by member.member_id desc
|
order by member.member_id desc
|
||||||
limit ?;`
|
limit ?;`
|
||||||
|
|
||||||
members := make([]*Member, 0)
|
members := make([]*Member, 0)
|
||||||
|
|
||||||
_, err := o.Raw(sql, teamId, "%"+account+"%", limit).QueryRows(&members)
|
_, err := o.Raw(sql, teamId, "%"+account+"%", "%"+account+"%", limit).QueryRows(&members)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
beego.Error("查询团队用户时出错 ->", err)
|
beego.Error("查询团队用户时出错 ->", err)
|
||||||
|
@ -226,7 +227,7 @@ limit ?;`
|
||||||
for _, member := range members {
|
for _, member := range members {
|
||||||
item := KeyValueItem{}
|
item := KeyValueItem{}
|
||||||
item.Id = member.MemberId
|
item.Id = member.MemberId
|
||||||
item.Text = member.Account
|
item.Text = member.Account + "(" + member.RealName + ")"
|
||||||
items = append(items, item)
|
items = append(items, item)
|
||||||
}
|
}
|
||||||
result.Result = items
|
result.Result = items
|
||||||
|
@ -234,9 +235,9 @@ limit ?;`
|
||||||
return &result, err
|
return &result, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *TeamMember) FindByBookIdAndMemberId(bookId,memberId int) (*TeamMember, error) {
|
func (m *TeamMember) FindByBookIdAndMemberId(bookId, memberId int) (*TeamMember, error) {
|
||||||
if bookId <= 0 || memberId <= 0 {
|
if bookId <= 0 || memberId <= 0 {
|
||||||
return nil,ErrInvalidParameter
|
return nil, ErrInvalidParameter
|
||||||
}
|
}
|
||||||
//一个用户可能在多个团队中,且一个项目可能有多个团队参与。因此需要查询用户最大权限。
|
//一个用户可能在多个团队中,且一个项目可能有多个团队参与。因此需要查询用户最大权限。
|
||||||
sql := `select *
|
sql := `select *
|
||||||
|
@ -246,11 +247,11 @@ and team.member_id = ? order by team.role_id asc limit 1;`
|
||||||
|
|
||||||
o := orm.NewOrm()
|
o := orm.NewOrm()
|
||||||
|
|
||||||
err := o.Raw(sql,bookId,memberId).QueryRow(m)
|
err := o.Raw(sql, bookId, memberId).QueryRow(m)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
beego.Error("查询用户项目所在团队失败 ->bookId=",bookId," memberId=", memberId, err)
|
beego.Error("查询用户项目所在团队失败 ->bookId=", bookId, " memberId=", memberId, err)
|
||||||
return nil,err
|
return nil, err
|
||||||
}
|
}
|
||||||
return m,nil
|
return m, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -1037,6 +1037,24 @@ textarea{
|
||||||
margin-left: 0;
|
margin-left: 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
.navbar-mobile {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 10px 0;
|
||||||
|
font-size: 14px;
|
||||||
|
line-height: 30px;
|
||||||
|
color: #563d7c;
|
||||||
|
}
|
||||||
|
.navbar-mobile a {
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (min-width: 768px) {
|
||||||
|
.navbar-mobile {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -86,6 +86,28 @@
|
||||||
<!-- Include all compiled plugins (below), or include individual files as needed -->
|
<!-- Include all compiled plugins (below), or include individual files as needed -->
|
||||||
<script src="{{cdnjs "/static/bootstrap/js/bootstrap.min.js"}}" type="text/javascript"></script>
|
<script src="{{cdnjs "/static/bootstrap/js/bootstrap.min.js"}}" type="text/javascript"></script>
|
||||||
<script src="{{cdnjs "/static/layer/layer.js"}}" type="text/javascript"></script>
|
<script src="{{cdnjs "/static/layer/layer.js"}}" type="text/javascript"></script>
|
||||||
|
<script src="{{cdnjs "/static/js/dingtalk-jsapi.js"}}" type="text/javascript"></script>
|
||||||
|
<!-- <script src="https://g.alicdn.com/dingding/dingtalk-jsapi/2.10.3/dingtalk.open.js"></script> -->
|
||||||
|
<script type="text/javascript">
|
||||||
|
if (dd.env.platform !== "notInDingTalk"){
|
||||||
|
dd.ready(function() {
|
||||||
|
dd.runtime.permission.requestAuthCode({
|
||||||
|
corpId: "dingd55b04400e53d11cbc961a6cb783455b", // 企业id
|
||||||
|
onSuccess: function (info) {
|
||||||
|
$.post("http://192.168.0.51/token?action=AuthCorpUser", {"code": info.code}, function(rdata){
|
||||||
|
if (rdata.status == 0) {
|
||||||
|
$(window).attr('location', rdata.data.url)
|
||||||
|
|
||||||
|
}else{
|
||||||
|
alert(rdata.msg)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
// alert(info.code) // 通过该免登授权码可以获取用户身份
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
$(function () {
|
$(function () {
|
||||||
$("#account,#password,#code").on('focus', function () {
|
$("#account,#password,#code").on('focus', function () {
|
||||||
|
|
|
@ -30,7 +30,7 @@
|
||||||
<div class="manual-list">
|
<div class="manual-list">
|
||||||
{{range $index,$item := .Lists}}
|
{{range $index,$item := .Lists}}
|
||||||
<div class="search-item">
|
<div class="search-item">
|
||||||
<div class="title">{{if eq $item.BlogStatus "password"}}<span class="label">密</span>{{end}} <a href="{{urlfor "BlogController.Index" ":id" $item.BlogId}}" title="{{$item.BlogTitle}}" target="_blank">{{$item.BlogTitle}}</a> </div>
|
<div class="title">{{if eq $item.BlogStatus "password"}}<span class="label">密</span>{{end}} <a href="{{urlfor "BlogController.Index" ":id" $item.BlogId}}" title="{{$item.BlogTitle}}">{{$item.BlogTitle}}</a> </div>
|
||||||
<div class="description">
|
<div class="description">
|
||||||
{{$item.BlogExcerpt}}
|
{{$item.BlogExcerpt}}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -30,6 +30,19 @@
|
||||||
<link href="{{cdncss "/static/css/print.css" "version"}}" media="print" rel="stylesheet">
|
<link href="{{cdncss "/static/css/print.css" "version"}}" media="print" rel="stylesheet">
|
||||||
|
|
||||||
<script type="text/javascript">window.book={"identify":"{{.Model.Identify}}"};</script>
|
<script type="text/javascript">window.book={"identify":"{{.Model.Identify}}"};</script>
|
||||||
|
<style>
|
||||||
|
.btn-mobile {
|
||||||
|
position: absolute;
|
||||||
|
right: 10px;
|
||||||
|
top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media screen and (min-width: 840px) {
|
||||||
|
.btn-mobile{
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="m-manual manual-mode-view manual-reader">
|
<div class="m-manual manual-mode-view manual-reader">
|
||||||
|
@ -40,6 +53,7 @@
|
||||||
<a href="{{urlfor "DocumentController.Index" ":key" .Model.Identify}}" title="{{.Model.BookName}}" class="book-title">{{.Model.BookName}}</a>
|
<a href="{{urlfor "DocumentController.Index" ":key" .Model.Identify}}" title="{{.Model.BookName}}" class="book-title">{{.Model.BookName}}</a>
|
||||||
<span style="font-size: 12px;font-weight: 100;"></span>
|
<span style="font-size: 12px;font-weight: 100;"></span>
|
||||||
</div>
|
</div>
|
||||||
|
<a href="{{urlfor "HomeController.Index"}}" class="btn btn-default btn-mobile"> <i class="fa fa-home" aria-hidden="true"></i>首页</a>
|
||||||
<div class="navbar-header pull-right manual-menu">
|
<div class="navbar-header pull-right manual-menu">
|
||||||
<a href="javascript:window.print();" id="printSinglePage" class="btn btn-default" style="margin-right: 10px;"><i class="fa fa-print"></i> 打印</a>
|
<a href="javascript:window.print();" id="printSinglePage" class="btn btn-default" style="margin-right: 10px;"><i class="fa fa-print"></i> 打印</a>
|
||||||
{{if gt .Member.MemberId 0}}
|
{{if gt .Member.MemberId 0}}
|
||||||
|
|
|
@ -26,12 +26,12 @@
|
||||||
<div class="list-item">
|
<div class="list-item">
|
||||||
<dl class="manual-item-standard">
|
<dl class="manual-item-standard">
|
||||||
<dt>
|
<dt>
|
||||||
<a href="{{urlfor "DocumentController.Index" ":key" $item.Identify}}" title="{{$item.BookName}}-{{$item.CreateName}}" target="_blank">
|
<a href="{{urlfor "DocumentController.Index" ":key" $item.Identify}}" title="{{$item.BookName}}-{{$item.CreateName}}">
|
||||||
<img src="{{cdnimg $item.Cover}}" class="cover" alt="{{$item.BookName}}-{{$item.CreateName}}" onerror="this.src='{{cdnimg "static/images/book.jpg"}}';">
|
<img src="{{cdnimg $item.Cover}}" class="cover" alt="{{$item.BookName}}-{{$item.CreateName}}" onerror="this.src='{{cdnimg "static/images/book.jpg"}}';">
|
||||||
</a>
|
</a>
|
||||||
</dt>
|
</dt>
|
||||||
<dd>
|
<dd>
|
||||||
<a href="{{urlfor "DocumentController.Index" ":key" $item.Identify}}" class="name" title="{{$item.BookName}}-{{$item.CreateName}}" target="_blank">{{$item.BookName}}</a>
|
<a href="{{urlfor "DocumentController.Index" ":key" $item.Identify}}" class="name" title="{{$item.BookName}}-{{$item.CreateName}}">{{$item.BookName}}</a>
|
||||||
</dd>
|
</dd>
|
||||||
<dd>
|
<dd>
|
||||||
<span class="author">
|
<span class="author">
|
||||||
|
|
|
@ -29,6 +29,10 @@
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
|
<div style="display: inline-block;" class="navbar-mobile">
|
||||||
|
<a href="{{urlfor "HomeController.Index" }}" title="首页">首页</a>
|
||||||
|
<a href="{{urlfor "BlogController.List" }}" title="文章">文章</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="btn-group dropdown-menu-right pull-right slidebar visible-xs-inline-block visible-sm-inline-block">
|
<div class="btn-group dropdown-menu-right pull-right slidebar visible-xs-inline-block visible-sm-inline-block">
|
||||||
<button class="btn btn-default dropdown-toggle hidden-lg" type="button" data-toggle="dropdown"><i class="fa fa-align-justify"></i></button>
|
<button class="btn btn-default dropdown-toggle hidden-lg" type="button" data-toggle="dropdown"><i class="fa fa-align-justify"></i></button>
|
||||||
|
|
Loading…
Reference in New Issue