Bläddra i källkod

vue iviewui引入成功

vue
mail_yanpeng@163.com 5 år sedan
förälder
incheckning
f38e0dadec
  1. 39
      static/css/common.css
  2. 870
      static/css/fonts/ionicons.svg
  3. Binär
      static/css/fonts/ionicons.ttf
  4. Binär
      static/css/fonts/ionicons.woff
  5. Binär
      static/css/fonts/ionicons.woff2
  6. 1
      static/css/iview.css
  7. 27
      static/js/iview.min.js
  8. 6
      static/js/vue.min.js
  9. 15
      views/T.header.tpl
  10. 2
      views/T.nav.tpl
  11. 7
      views/blogs.html
  12. 92
      views/index.html
  13. 74
      views/login.html
  14. 82
      views/regist.html
  15. 129
      views/search.html

39
static/css/common.css

@ -1,8 +1,11 @@
body {
html,body {
font-size: 14px !important;
background: #fff;
color: #353535;
height: 100%;
width: 100%;
}
#cnzz_stat_icon_1277992374{
text-align: center;
display: block;
@ -12,7 +15,6 @@ body {
}
a{
color: #28a3ef;
text-decoration: none;
}
@ -53,10 +55,6 @@ a{
font-size: 20px;
}
.layui-nav .layui-this:after, .layui-nav-bar, .layui-nav-tree .layui-nav-itemed:after{
height: 2px;
}
::-webkit-scrollbar {
width: 1px;
/*height: 0px;*/
@ -100,7 +98,16 @@ a{
}
.layui-nav .layui-nav-item{
line-height: 48px;
line-height: 49px !important;
}
.layui-nav .layui-nav-item a{
height: 49px !important;
line-height: 49px;
}
.layui-nav .layui-this:after, .layui-nav-bar, .layui-nav-tree .layui-nav-itemed:after{
height: 1px;
}
.footer-container{
@ -138,6 +145,9 @@ a{
width: 68%;
margin: 40px auto;
}
.blog-root a{
color: #28a3ef !important;
}
.blog-root .blog-title{
display: block;
margin: 60px 0 20px 0;
@ -350,13 +360,16 @@ img {
width: 370px;
height: 500px;
}
.login-root .input-container .input-root p {
font-size: 21px;
text-align: center;
padding-top: 195px;
}
.login-root .input-container .input-root .inputs-class{
padding: 0 50px;
margin-top: 220px;
padding: 10px 50px 10px 50px;
}
.login-root .input-container .input-root .regist{
margin-top: 200px;
}
.login-root .input-container .input-root .inputs-class .login-bottom{
margin-top: 10px;
text-align: right;
}
.login-root .input-container .input-root .input-group{
display: table;

870
static/css/fonts/ionicons.svg

File diff suppressed because one or more lines are too long

Efter

Bredd:  |  Höjd:  |  Storlek: 542 KiB

Binär
static/css/fonts/ionicons.ttf

Binary file not shown.

Binär
static/css/fonts/ionicons.woff

Binary file not shown.

Binär
static/css/fonts/ionicons.woff2

Binary file not shown.

1
static/css/iview.css

File diff suppressed because one or more lines are too long

27
static/js/iview.min.js

File diff suppressed because one or more lines are too long

6
static/js/vue.min.js

File diff suppressed because one or more lines are too long

15
views/T.header.tpl

@ -8,12 +8,17 @@
{{else}}
<meta name="description" content="码农随笔,个人随笔是一个面向IT技术人员,提供个人平时工作总结和在线记录学习笔记,个人技术博客,在线云笔记,码农笔录,最新的技术博客,www.aiprose.com">
{{end}}
<script type="text/javascript" src="/static/js/checkm.js"></script>
<script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.4.0/jquery.min.js"></script>
<link type="text/css" rel="styleSheet" href="/static/css/common.css"/>
<script type="text/javascript" src="/static/js/vue.min.js"></script>
<link rel="stylesheet" href="/static/css/iview.css">
<script src="/static/js/iview.min.js"></script>
<script src="/static/js/jquery-1.11.1.min.js"/>
{{/* <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.4.0/jquery.min.js"></script>*/}}
<script type="text/javascript" src="/static/js/layer.js"></script>
<link rel="stylesheet" href="/static/layui/css/layui.css">
{{/* <script type="text/javascript" src="/static/js/checkm.js"></script>*/}}
<script type="text/javascript" src="/static/layui/layui.js"></script>
<link type="text/css" rel="styleSheet" href="/static/css/common.min.css"/>
{{/* <link type="text/css" rel="styleSheet" href="/static/css/common.css"/>*/}}
<script type="text/javascript" src="https://tajs.qq.com/stats?sId=66471694" charset="UTF-8"></script>
{{/* <link type="text/css" rel="styleSheet" href="/static/css/common.min.css"/>*/}}
{{/* <script type="text/javascript" src="https://tajs.qq.com/stats?sId=66471694" charset="UTF-8"></script>*/}}
{{end}}

2
views/T.nav.tpl

@ -2,7 +2,7 @@
<div class='nav-container'>
<nav>
<ul class="layui-nav layui-bg-molv" lay-filter="">
<p>码农随笔</p>
<a href="/" style="color: rgba(255,255,255,.9)"><p>码农随笔</p></a>
<li class="layui-nav-item">
<a href="/search"><i class="layui-icon">&#xe615;</i><span style="padding-left:8px">搜索</span></a>
</li>

7
views/blogs.html

@ -90,6 +90,13 @@
</div>
</body>
<script>
var app = new Vue({
el: ".root-container",
delimiters: ['${', '}'],
data: {
user: {}
},
})
$(function () {
$("#selCat").val({{.Cat}})
$("#selCat").change(function () {

92
views/index.html

@ -3,51 +3,60 @@
<title>码农随笔· IT技术博客</title>
</head>
<body>
{{template "nav" .}}
<div class="blog-root">
<div class="jumbotron" style="margin-top: 50px;margin-bottom: 10px">
<blockquote class="layui-elem-quote">码农随笔 2.0(golang)版本正式上线</blockquote>
</div>
<div style="display: flex">
<div style="flex: 1">
<h5>最新发布</h5>
{{range .TimeBlog}}
<p><a href="/blog/{{.Id}}" target="_blank">{{.Title}}</a></p>
{{end}}
<p><a href="https://www.aiprose.com/blogs">查看更多...</a></p>
</div>
<div style="flex: 1">
<h5>流量王者</h5>
{{range .BrowsBlog}}
<p><a href="/blog/{{.Id}}" target="_blank">{{.Title}}</a></p>
{{end}}
<p><a href="https://www.aiprose.com/blogs">查看更多...</a></p>
<div id="vue-app">
{{template "nav" .}}
<div class="blog-root">
<div class="jumbotron" style="margin-top: 50px;margin-bottom: 10px">
<blockquote class="layui-elem-quote">码农随笔 3.0(golang + vue)版本正式上线</blockquote>
</div>
</div>
<div style="display: flex">
<div style="flex: 1">
<h5>收藏排行</h5>
{{range .LikeBlog}}
<p><a href="/blog/{{.Id}}" target="_blank">{{.Title}}</a></p>
{{end}}
<p><a href="https://www.aiprose.com/blogs">查看更多...</a></p>
<div style="display: flex">
<div style="flex: 1">
<h5>最新发布</h5>
{{range .TimeBlog}}
<p><a href="/blog/{{.Id}}" target="_blank">{{.Title}}</a></p>
{{end}}
<p><a href="https://www.aiprose.com/blogs">查看更多...</a></p>
</div>
<div style="flex: 1">
<h5>流量王者</h5>
{{range .BrowsBlog}}
<p><a href="/blog/{{.Id}}" target="_blank">{{.Title}}</a></p>
{{end}}
<p><a href="https://www.aiprose.com/blogs">查看更多...</a></p>
</div>
</div>
<div style="flex: 1">
<h5>人气最旺</h5>
{{range .CommBlog}}
<p><a href="/blog/{{.Id}}" target="_blank">{{.Title}}</a></p>
{{end}}
<p><a href="https://www.aiprose.com/blogs">查看更多...</a></p>
<div style="display: flex">
<div style="flex: 1">
<h5>收藏排行</h5>
{{range .LikeBlog}}
<p><a href="/blog/{{.Id}}" target="_blank">{{.Title}}</a></p>
{{end}}
<p><a href="https://www.aiprose.com/blogs">查看更多...</a></p>
</div>
<div style="flex: 1">
<h5>人气最旺</h5>
{{range .CommBlog}}
<p><a href="/blog/{{.Id}}" target="_blank">{{.Title}}</a></p>
{{end}}
<p><a href="https://www.aiprose.com/blogs">查看更多...</a></p>
</div>
</div>
</div>
<div class="footer-container">
{{template "footer"}}
</div>
</div>
<div>
</div>
<div class="footer-container">
{{template "footer"}}
</div>
</body>
<script>
var app = new Vue({
delimiters: ['${', '}'],
el: '#vue-app',
data: {
msg: "vue test"
}
})
</script>
<script>
$(function () {
/*百度收录*/
@ -55,8 +64,7 @@
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
} else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
@ -66,13 +74,13 @@
var qihuo = document.createElement('script');
if (curProtocol === 'https') {
qihuo.src = 'https://jspassport.ssl.qhimg.com/11.0.1.js?d33b14200fa89b7ecd3780341cd234c';
}
else {
} else {
qihuo.src = 'http://js.passport.qihucdn.com/11.0.1.js?d33b14200fa89b7ecd3780341cd234c4';
}
qihuo.id = "sozz"
var s = document.getElementsByTagName("script")[1];
s.parentNode.insertBefore(qihuo, s);
})
</script>
</html>

74
views/login.html

@ -8,19 +8,23 @@
<div class="login-root">
<div class="input-container">
<div class="input-root">
<p>登录</p>
<div class="inputs-class">
<div class="input-group input-group-lg input-class">
<span class="input-group-addon">用户</span>
<input type="text" class="form-control" placeholder="请输入用户名" aria-describedby="sizing-addon1"
id="username">
<i-form>
<form-item prop="user">
<i-input type="text" v-model="user.username" placeholder="请输入用户名">
<Icon type="ios-person-outline" slot="prepend"></Icon>
</i-input>
</form-item>
<form-item prop="password">
<i-input type="password" v-model="user.userpwd" placeholder="请输入密码">
<Icon type="ios-lock-outline" slot="prepend"></Icon>
</i-input>
</form-item>
<i-button type="info" long @click="login">快速登录</i-button>
</i-form>
<div class="login-bottom">
<a href="/regist">快速注册</a>
</div>
<div class="input-group input-group-lg input-class">
<span class="input-group-addon">密码</span>
<input type="password" class="form-control" placeholder="请输入密码" aria-describedby="sizing-addon1"
id="userpwd">
</div>
<button class="layui-btn layui-btn-fluid" id="loginBtn">登录</button>
</div>
</div>
</div>
@ -28,34 +32,38 @@
</div>
</body>
<script>
$(function () {
$("#loginBtn").click(function () {
var username = $("#username").val()
var userpwd = $("#userpwd").val()
if (username.trim().length < 4) {
layer.msg('用户名最低4位', function () {
});
return
}
if (userpwd.trim().length < 6) {
layer.msg('密码最低6位', function () {
});
return
}
$.post('/api/login', {
username: username,
userpwd: userpwd
},
var app = new Vue({
el: ".root-container",
delimiters: ['${', '}'],
data: {
user: {}
},
methods: {
login (){
var _this= this
if (this.user.username.trim().length < 4) {
this.$Message.warning('用户名最低4位');
// this.$Notice.warning({
// title: '用户名最低4位',
// desc: ''
// });
return
}
if (this.user.userpwd.trim().length < 6) {
this.$Message.warning('密码最低6位');
return
}
$.post('/api/login', this.user,
function (data) {
console.log(data)
if (data.Status == 1) {
layer.msg(data.Msg, {icon: 5});
_this.$Message.warning(data.Msg);
} else {
layer.msg("登录成功", {icon: 6});
_this.$Message.success("登录成功");
window.location.href = "/"
}
}, 'json')
})
}
}
})
</script>
<script type="text/javascript" src="/static/js/seo.js"></script>

82
views/regist.html

@ -8,19 +8,28 @@
<div class="login-root">
<div class="input-container">
<div class="input-root">
<p>注册</p>
<div class="inputs-class">
<div class="input-group input-group-lg input-class">
<span class="input-group-addon">用户</span>
<input type="text" class="form-control" placeholder="请输入用户名" id="username"
aria-describedby="sizing-addon1">
<div class="inputs-class regist">
<i-form>
<form-item prop="user">
<i-input type="text" v-model="user.username" placeholder="请输入用户名">
<Icon type="ios-person-outline" slot="prepend"></Icon>
</i-input>
</form-item>
<form-item prop="password">
<i-input type="password" v-model="user.userpwd" placeholder="请输入密码">
<Icon type="ios-lock-outline" slot="prepend"></Icon>
</i-input>
</form-item>
<form-item prop="password">
<i-input type="password" v-model="user.userpwdrepeat" placeholder="请重复密码">
<Icon type="ios-lock-outline" slot="prepend"></Icon>
</i-input>
</form-item>
<i-button type="info" long @click="regist">快速注册</i-button>
</i-form>
<div class="login-bottom">
<a href="/login">快速登录</a>
</div>
<div class="input-group input-group-lg input-class">
<span class="input-group-addon">密码</span>
<input type="password" class="form-control" placeholder="请输入密码" id="userpwd"
aria-describedby="sizing-addon1">
</div>
<button class="layui-btn layui-btn-fluid" id="loginBtn">注册</button>
</div>
</div>
</div>
@ -28,36 +37,41 @@
</div>
</body>
<script>
$(function () {
$("#loginBtn").click(function () {
var username = $("#username").val()
var userpwd = $("#userpwd").val()
if (username.trim().length < 4) {
layer.msg('用户名最低4位', function () {
});
return
}
if (userpwd.trim().length < 6) {
layer.msg('密码最低6位', function () {
});
return
}
$.post('/api/regist', {
username: username,
userpwd: userpwd
},
var app = new Vue({
el: ".root-container",
delimiters: ['${', '}'],
data: {
user: {}
},
methods: {
regist (){
var _this= this
if (this.user.username.trim().length < 4) {
this.$Message.warning('用户名最低4位');
return
}
if (this.user.userpwd.trim().length < 6) {
this.$Message.warning('密码最低6位');
return
}
if (!this.user.userpwdrepeat || (this.user.userpwdrepeat.trim() != this.user.userpwd.trim())) {
this.$Message.warning('两次密码输入不一致');
return
}
$.post('/api/regist', this.user,
function (data) {
console.log(data)
if (data.Status == 1) {
layer.msg(data.Msg, {icon: 5});
_this.$Message.warning(data.Msg);
} else {
layer.msg("注册成功,现在去登陆哦", {icon: 6});
_this.$Message.success("注册成功,现在去登陆哦");
setTimeout(function () {
window.location.href = "/login"
}, 800)
}
}, 'json')
})
}
}
})
</script>
<script type="text/javascript" src="/static/js/seo.js"></script>
</html>

129
views/search.html

@ -10,86 +10,91 @@
<div>
<div>
<div class="input-group input-class">
<input type="text" class="form-control" placeholder="请输入关键字" aria-describedby="sizing-addon1"
id="searchVal">
<span class="input-group-addon" id="searchBtn">搜索</span>
<i-input id="searchVal" search enter-button @on-search="searchHandler" placeholder="请输入关键字"/>
</div>
</div>
</div>
<div class="search-result">
<div class="search-item" v-for="el in list">
<div class="search-title">
<a style="color: #28a3ef" :href="'https://www.aiprose.com/blog/' + el._source.Id " target="_blank">${el._source.Title}</a>
<span> ${mtime(el._source.Ctime)}</span>
</div>
<p class="search-content">${el._source.BlogDesc }</p>
</div>
<p v-if="list.length == 0">没有搜索到相关文章</p>
</div>
</div>
</div>
</body>
<script>
var pageNo = 1;
var pageSize = 30;
// var pageNo = page;
var searchParms = {
from: 0,
size: 20,
query: {
multi_match: {
query: "",
// type: "best_fields",
fields: ["Title", "BlogHtml"]
var app = new Vue({
el: ".root-container",
delimiters: ['${', '}'],
data: {
list: [],
pageNo: 1,
pageSize: 30,
searchParms: {
from: 0,
size: 20,
query: {
multi_match: {
query: "",
// type: "best_fields",
fields: ["Title", "BlogHtml"]
}
}
}
},
methods: {
mtime (time){
return dayjs(time).format("YYYY-MM-DD")
},
searchHandler (searchVal){
var _this = this;
if (!searchVal || searchVal.trim().length == 0) {
this.$Message.warning('请输入查询内容');
return
}
this.searchParms.query.multi_match.query = searchVal;
var stringify = JSON.stringify(this.searchParms);
$.ajax({
url: "https://www.aiprose.com/es/search",    //请求的url地址
headers: {'Content-Type': 'application/json;charset=utf8'},
dataType: "json",   //返回格式为json
async: true,//请求是否异步,默认为异步,这也是ajax重要特性
data: stringify,    //参数值
type: "POST",   //请求方式
beforeSend: function () {
//请求前的处理
},
success: function (resp) {
_this.list = []
if (resp.hits.total != 0) {
_this.list = resp.hits.hits;
}
//请求成功时处理
},
complete: function () {
//请求完成的处理
},
error: function () {
//请求出错处理
}
})
}
}
}
})
$(function () {
$("#searchVal").keypress(function (e) {
if (e.which == 13) {
search();
}
});
$("#searchBtn").click(function () {
search();
})
function search() {
var searchVal = $("#searchVal").val()
if (!searchVal || searchVal.trim().length == 0) {
layer.msg("请输入查询内容")
return
}
searchParms.query.multi_match.query = searchVal;
var stringify = JSON.stringify(searchParms);
$.ajax({
url: "https://www.aiprose.com/es/search",    //请求的url地址
headers: {'Content-Type': 'application/json;charset=utf8'},
dataType: "json",   //返回格式为json
async: true,//请求是否异步,默认为异步,这也是ajax重要特性
data: stringify,    //参数值
type: "POST",   //请求方式
beforeSend: function () {
//请求前的处理
},
success: function (resp) {
$(".search-result").children().remove();
if (resp.hits.total != 0) {
resp.hits.hits.forEach(function (el, index) {
console.log(el._source)
var htmlStr = '<div class=\"search-item\">\n' +
' <div class=\"search-title\"><a href=\"https://www.aiprose.com/blog/' + el._source.Id + '\" target=\"_blank\">' + el._source.Title + '</a><span>' + dayjs(el._source.Ctime).format("YYYY-MM-DD") + '</span></div>\n' +
' <p class=\"search-content\">' + el._source.BlogDesc + '</p>\n' +
' </div>'
$(".search-result").append(htmlStr)
})
}else{
$(".search-result").append('<p>没有搜索到相关文章</p>')
}
//请求成功时处理
},
complete: function () {
//请求完成的处理
},
error: function () {
//请求出错处理
}
})
}
})
</script>

Laddar…
Avbryt
Spara