Skip to content

Commit

Permalink
优化
Browse files Browse the repository at this point in the history
  • Loading branch information
deatil committed Jun 1, 2024
1 parent efdb348 commit 4c538b2
Showing 10 changed files with 186 additions and 24 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -37,7 +37,7 @@ doak-cms 是使用 gofiber 和 Xorm 的 go 文章管理系统
<tr>
<td width="50%">
<center>
<img alt="文章管理" src="https://user-images.githubusercontent.com/24578855/174941958-b7127708-7c8c-4dac-98d8-efc4db0a5c8a.png" />
<img alt="文章管理" src="https://github.com/deatil/doak-cms/assets/24578855/26b576e1-d446-4d4b-9b8d-56ae219b1213" />
</center>
</td>
<td width="50%">
@@ -89,10 +89,10 @@ go run main.go

- xorm.io/xorm

- github.com/smallnest/rpcx

- github.com/spf13/cast

- github.com/smallnest/rpcx


### 开源协议

1 change: 1 addition & 0 deletions app/view/view_func.go
Original file line number Diff line number Diff line change
@@ -17,6 +17,7 @@ func SetViewFuncs(engine *jet.Engine) {
engine.AddFunc("formatTime", time.CreateFromFormat)
engine.AddFunc("nowTime", time.Now)
engine.AddFunc("formatSize", utils.FormatSize)
engine.AddFunc("formatViews", utils.FormatViews)

engine.AddFunc("adminUrl", url.AdminUrl)
engine.AddFunc("avatarUrl", url.AvatarUrl)
Binary file added docs/images/art-edit-1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/images/art-edit-2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed docs/images/art-edit.png
Binary file not shown.
Binary file modified docs/images/art.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 18 additions & 0 deletions pkg/utils/utils.go
Original file line number Diff line number Diff line change
@@ -51,6 +51,24 @@ func FormatSize(size int64) string {
return fmt.Sprintf("%.2f%s", s, units[i])
}

// 格式化浏览量大小
func FormatViews(size int64) string {
units := []string{"", "k", "m", "km", "wm"}

s := float64(size)

i := 0
for ; s >= 1000 && i < 4; i++ {
s /= 1000
}

if size < 1000 {
return fmt.Sprintf("%.0f", s)
}

return fmt.Sprintf("%.2f%s", s, units[i])
}

// 文件是否存在
func FileExists(path string) bool {
_, err := os.Stat(path)
145 changes: 144 additions & 1 deletion resources/static/admin/css/style.css
Original file line number Diff line number Diff line change
@@ -1 +1,144 @@
:root{--primary: #009CFF;--light: #F3F6F9;--dark: #191C24}.back-to-top{position:fixed;display:none;right:45px;bottom:45px;z-index:99}#spinner{opacity:0;visibility:hidden;transition:opacity .5s ease-out,visibility 0s linear .5s;z-index:99999}#spinner.show{transition:opacity .5s ease-out,visibility 0s linear 0s;visibility:visible;opacity:1}.btn{transition:.5s}.btn.btn-primary{color:#fff}.btn-square{width:38px;height:38px}.btn-sm-square{width:32px;height:32px}.btn-lg-square{width:48px;height:48px}.btn-square,.btn-sm-square,.btn-lg-square{padding:0;display:inline-flex;align-items:center;justify-content:center;font-weight:400;border-radius:50px}.sidebar{position:fixed;top:0;left:0;bottom:0;width:250px;height:100vh;overflow-y:auto;background:var(--light);transition:.5s;z-index:999}.content{margin-left:250px;min-height:100vh;background:#fff;transition:.5s}@media(min-width:992px){.sidebar{margin-left:0}.sidebar.open{margin-left:-250px}.content{width:calc(100% - 250px)}.content.open{width:100%;margin-left:0}}@media(max-width:991.98px){.sidebar{margin-left:-250px}.sidebar.open{margin-left:0}.content{width:100%;margin-left:0}}.sidebar .navbar .navbar-nav .nav-link{padding:7px 20px;color:var(--dark);font-weight:500;border-left:3px solid var(--light);border-radius:0 30px 30px 0;outline:none}.sidebar .navbar .navbar-nav .nav-link:hover,.sidebar .navbar .navbar-nav .nav-link.active{color:var(--primary);background:#fff;border-color:var(--primary)}.sidebar .navbar .navbar-nav .nav-link i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;background:#fff;border-radius:40px}.sidebar .navbar .navbar-nav .nav-link:hover i,.sidebar .navbar .navbar-nav .nav-link.active i{background:var(--light)}.sidebar .navbar .dropdown-toggle::after{position:absolute;top:15px;right:15px;border:none;content:"\f107";font-family:"font awesome 5 free";font-weight:900;transition:.5s}.sidebar .navbar .dropdown-toggle[aria-expanded=true]::after{transform:rotate(-180deg)}.sidebar .navbar .dropdown-item{padding-left:25px;border-radius:0 30px 30px 0}.content .navbar .navbar-nav .nav-link{margin-left:25px;padding:12px 0;color:var(--dark);outline:none}.content .navbar .navbar-nav .nav-link:hover,.content .navbar .navbar-nav .nav-link.active{color:var(--primary)}.content .navbar .sidebar-toggler,.content .navbar .navbar-nav .nav-link i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;background:#fff;border-radius:40px}.content .navbar .dropdown-toggle::after{margin-left:6px;vertical-align:middle;border:none;content:"\f107";font-family:"font awesome 5 free";font-weight:900;transition:.5s}.content .navbar .dropdown-toggle[aria-expanded=true]::after{transform:rotate(-180deg)}@media(max-width:575.98px){.content .navbar .navbar-nav .nav-link{margin-left:15px}}.bootstrap-datetimepicker-widget.bottom{top:auto!important}.bootstrap-datetimepicker-widget .table *{border-bottom-width:0}.bootstrap-datetimepicker-widget .table th{font-weight:500}.bootstrap-datetimepicker-widget.dropdown-menu{padding:10px;border-radius:2px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background:var(--primary)}.bootstrap-datetimepicker-widget table td.today::before{border-bottom-color:var(--primary)}.progress .progress-bar{width:0;transition:2s}.testimonial-carousel .owl-dots{margin-top:24px;display:flex;align-items:flex-end;justify-content:center}.testimonial-carousel .owl-dot{position:relative;display:inline-block;margin:0 5px;width:15px;height:15px;border:5px solid var(--primary);border-radius:15px;transition:.5s}.testimonial-carousel .owl-dot.active{background:var(--dark);border-color:var(--primary)}
:root{--primary: #009CFF;--light: #F3F6F9;--dark: #191C24}.back-to-top{position:fixed;display:none;right:45px;bottom:45px;z-index:99}#spinner{opacity:0;visibility:hidden;transition:opacity .5s ease-out,visibility 0s linear .5s;z-index:99999}#spinner.show{transition:opacity .5s ease-out,visibility 0s linear 0s;visibility:visible;opacity:1}.btn{transition:.5s}.btn.btn-primary{color:#fff}.btn-square{width:38px;height:38px}.btn-sm-square{width:32px;height:32px}.btn-lg-square{width:48px;height:48px}.btn-square,.btn-sm-square,.btn-lg-square{padding:0;display:inline-flex;align-items:center;justify-content:center;font-weight:400;border-radius:50px}.sidebar{position:fixed;top:0;left:0;bottom:0;width:250px;height:100vh;overflow-y:auto;background:var(--light);transition:.5s;z-index:999}.content{margin-left:250px;min-height:100vh;background:#fff;transition:.5s}@media(min-width:992px){.sidebar{margin-left:0}.sidebar.open{margin-left:-250px}.content{width:calc(100% - 250px)}.content.open{width:100%;margin-left:0}}@media(max-width:991.98px){.sidebar{margin-left:-250px}.sidebar.open{margin-left:0}.content{width:100%;margin-left:0}}.sidebar .navbar .navbar-nav .nav-link{padding:7px 20px;color:var(--dark);font-weight:500;border-left:3px solid var(--light);border-radius:0 30px 30px 0;outline:none}.sidebar .navbar .navbar-nav .nav-link:hover,.sidebar .navbar .navbar-nav .nav-link.active{color:var(--primary);background:#fff;border-color:var(--primary)}.sidebar .navbar .navbar-nav .nav-link i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;background:#fff;border-radius:40px}.sidebar .navbar .navbar-nav .nav-link:hover i,.sidebar .navbar .navbar-nav .nav-link.active i{background:var(--light)}.sidebar .navbar .dropdown-toggle::after{position:absolute;top:15px;right:15px;border:none;content:"\f107";font-family:"font awesome 5 free";font-weight:900;transition:.5s}.sidebar .navbar .dropdown-toggle[aria-expanded=true]::after{transform:rotate(-180deg)}.sidebar .navbar .dropdown-item{padding-left:25px;border-radius:0 30px 30px 0}.content .navbar .navbar-nav .nav-link{margin-left:25px;padding:12px 0;color:var(--dark);outline:none}.content .navbar .navbar-nav .nav-link:hover,.content .navbar .navbar-nav .nav-link.active{color:var(--primary)}.content .navbar .sidebar-toggler,.content .navbar .navbar-nav .nav-link i{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;background:#fff;border-radius:40px}.content .navbar .dropdown-toggle::after{margin-left:6px;vertical-align:middle;border:none;content:"\f107";font-family:"font awesome 5 free";font-weight:900;transition:.5s}.content .navbar .dropdown-toggle[aria-expanded=true]::after{transform:rotate(-180deg)}@media(max-width:575.98px){.content .navbar .navbar-nav .nav-link{margin-left:15px}}.bootstrap-datetimepicker-widget.bottom{top:auto!important}.bootstrap-datetimepicker-widget .table *{border-bottom-width:0}.bootstrap-datetimepicker-widget .table th{font-weight:500}.bootstrap-datetimepicker-widget.dropdown-menu{padding:10px;border-radius:2px}.bootstrap-datetimepicker-widget table td.active,.bootstrap-datetimepicker-widget table td.active:hover{background:var(--primary)}.bootstrap-datetimepicker-widget table td.today::before{border-bottom-color:var(--primary)}.progress .progress-bar{width:0;transition:2s}.testimonial-carousel .owl-dots{margin-top:24px;display:flex;align-items:flex-end;justify-content:center}.testimonial-carousel .owl-dot{position:relative;display:inline-block;margin:0 5px;width:15px;height:15px;border:5px solid var(--primary);border-radius:15px;transition:.5s}.testimonial-carousel .owl-dot.active{background:var(--dark);border-color:var(--primary)}

.pull-right {
float: right;
}

.pull-left {
float: left;
}

.icon.pull-left {
margin-right: .3em;
}

.icon.pull-right {
margin-left: .3em;
}

.icon-spin {
-webkit-animation: fa-spin 2s infinite linear;
-o-animation: fa-spin 2s infinite linear;
animation: fa-spin 2s infinite linear;
}

.icon-pulse {
-webkit-animation: fa-spin 1s infinite steps(8);
-o-animation: fa-spin 1s infinite steps(8);
animation: fa-spin 1s infinite steps(8);
}

@-webkit-keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
transform: rotate(359deg);
}
}

@-o-keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
-o-transform: rotate(359deg);
transform: rotate(359deg);
}
}

@keyframes fa-spin {
0% {
-webkit-transform: rotate(0deg);
-o-transform: rotate(0deg);
transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(359deg);
-o-transform: rotate(359deg);
transform: rotate(359deg);
}
}

.icon-rotate-90 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
-webkit-transform: rotate(90deg);
-ms-transform: rotate(90deg);
-o-transform: rotate(90deg);
transform: rotate(90deg);
}

.icon-rotate-180 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
-webkit-transform: rotate(180deg);
-ms-transform: rotate(180deg);
-o-transform: rotate(180deg);
transform: rotate(180deg);
}

.icon-rotate-270 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
-webkit-transform: rotate(270deg);
-ms-transform: rotate(270deg);
-o-transform: rotate(270deg);
transform: rotate(270deg);
}

.icon-flip-horizontal {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
-webkit-transform: scale(-1, 1);
-ms-transform: scale(-1, 1);
-o-transform: scale(-1, 1);
transform: scale(-1, 1);
}

.icon-flip-vertical {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
-webkit-transform: scale(1, -1);
-ms-transform: scale(1, -1);
-o-transform: scale(1, -1);
transform: scale(1, -1);
}

:root .icon-rotate-90,
:root .icon-rotate-180,
:root .icon-rotate-270,
:root .icon-flip-horizontal,
:root .icon-flip-vertical {
-webkit-filter: none;
filter: none;
}

.icon-stack {
position: relative;
display: inline-block;
width: 2em;
height: 2em;
line-height: 2em;
vertical-align: middle;
}

.icon-stack-1x,
.icon-stack-2x {
position: absolute;
left: 0;
width: 100%;
text-align: center;
}

.icon-stack-1x {
line-height: inherit;
}

.icon-stack-2x {
font-size: 2em;
}

.icon-inverse {
color: #ffffff;
}
16 changes: 8 additions & 8 deletions resources/views/admin/art/index.jet.html
Original file line number Diff line number Diff line change
@@ -169,6 +169,10 @@ <h6 class="mb-4">
</div>

<div class="art-item mt-1">
{{if value.IsTop == 1 }}
<span class="badge bg-danger" title="置顶"></span>
{{end}}

{{ value.Title }}

{{if value.Cover != ""}}
@@ -186,20 +190,16 @@ <h6 class="mb-4">
{{end}}
</td>
<td width="75" class="text-center">
{{ value.Views }}
<span title="阅读量: {{ value.Views }}">
{{ formatViews(value.Views) }}
</span>
</td>
<td width="120" class="text-center">
<td width="60" class="text-center">
{{if value.Status == 1 }}
<span class="badge bg-success">启用</span>
{{else}}
<span class="badge bg-danger">禁用</span>
{{end}}

{{if value.IsTop == 1 }}
<span class="badge bg-primary">已置顶</span>
{{else}}
<span class="badge bg-secondary">未置顶</span>
{{end}}
</td>
<td width="165">
{{ createTime(value.AddTime).DateTimeString() }}
24 changes: 12 additions & 12 deletions resources/views/admin/setting/index.jet.html
Original file line number Diff line number Diff line change
@@ -20,10 +20,10 @@ <h6 class="mb-4">网站设置</h6>
<div class="mb-3">
<label
for="inputWebsiteName"
class="form-label"
class="form-label d-block"
>
网站名称
<span class="text-success">
<span class="text-success pull-right">
[website_name]
</span>
</label>
@@ -40,10 +40,10 @@ <h6 class="mb-4">网站设置</h6>

<div class="mb-3">
<label for="inputWebsiteKeywords"
class="form-label"
class="form-label d-block"
>
网站关键字
<span class="text-success">
<span class="text-success pull-right">
[website_keywords]
</span>
</label>
@@ -60,10 +60,10 @@ <h6 class="mb-4">网站设置</h6>

<div class="mb-3">
<label for="websiteDescriptionTextarea"
class="form-label"
class="form-label d-block"
>
网站描述
<span class="text-success">
<span class="text-success pull-right">
[website_description]
</span>
</label>
@@ -80,10 +80,10 @@ <h6 class="mb-4">网站设置</h6>

<div class="mb-3">
<label for="inputWebsiteCopyright"
class="form-label"
class="form-label d-block"
>
版权
<span class="text-success">
<span class="text-success pull-right">
[website_copyright]
</span>
</label>
@@ -100,10 +100,10 @@ <h6 class="mb-4">网站设置</h6>

<div class="mb-3">
<label for="inputWebsiteBeian"
class="form-label"
class="form-label d-block"
>
网站备案
<span class="text-success">
<span class="text-success pull-right">
[website_beian]
</span>
</label>
@@ -119,9 +119,9 @@ <h6 class="mb-4">网站设置</h6>
</div>

<div class="mb-3">
<label class="form-label">
<label class="form-label d-block">
网站状态
<span class="text-success">
<span class="text-success pull-right">
[website_status]
</span>
</label>

0 comments on commit 4c538b2

Please sign in to comment.