<style lang="scss">
@import "../assets/css/px2rem.scss";
.sign-box {
width: %;
min-height: %;
background: #f5f5f5;
position: relative;
.top-box {
padding: px2rem() px2rem() px2rem();
background: #4bc7c7;
}
.person-box {
display: flex;
justify-content: space-around;
align-items: center;
}
.sign-personInfor {
display: flex;
color: #fff;
align-items: center;
.headImg {
position: relative;
margin-right: px2rem();
img {
width: px2rem();
height: px2rem();
display: block;
}
}
.nickname {
p:first-child {
font-size: px2rem();
}
p:last-child {
font-size: px2rem();
span {
color: #f60;
}
}
}
}
.sign-btn {
font-size: px2rem();
border: ;
background: rgba(, , , 0.4);
height: px2rem();
line-height: px2rem();
width: px2rem();
border-radius: px2rem();
color: #fff;
}
.integral-box {
font-size: px2rem();
color: #fff;
display: flex;
justify-content: space-around;
margin-top: px2rem();
font-size: px2rem();
.sign-price {
flex: %;
p {
text-align: center;
height: px2rem();
line-height: px2rem();
img {
width: px2rem();
margin-right: px2rem();
vertical-align: sub;
}
}
}
}
.calender {
background: #fff;
width: %;
border-radius: px2rem();
box-shadow: px2rem() px2rem() rgba($color: #, $alpha: 0.2);
.ui-datepicker-wrapper {
width: %;
font-size: px2rem();
color: #;
box-shadow: px2rem() px2rem() px2rem() px2rem() rgba(,,,.);
&.ui-datepicker-wrapper-show {
display: block;
}
.ui-datepicker-header {
height: px2rem();
line-height: px2rem();
text-align: center;
border-bottom: px2rem() solid #eaeaea;
font-weight: bold;
.ui-datepicker-curr-month {
font-size: px2rem();
}
.ui-datepicker-btn {
height: px2rem();
width: px2rem();
}
.ui-datepicker-prev {
background: url(../assets/img/arrow-l.png) no-repeat center center;
background-size: px2rem() auto;
float: left;
}
.ui-datepicker-next {
background: url(../assets/img/arrow-r.png) no-repeat center center;
background-size: px2rem() auto;
float: right;
}
}
.ui-datepicker-body {
.datepicker-weekday {
.weekday-head {
display: flex;
justify-content: space-around;
border-bottom: px2rem() solid #;
li {
height: px2rem();
line-height: px2rem();
font-size: px2rem();
font-weight: bold;
}
}
.weekday-days {
display: flex;
justify-content: space-around;
flex-wrap: wrap;
li {
flex: 14.2%;
text-align: center;
height: px2rem();
line-height: px2rem();
font-size: px2rem();
&.active {
background: url(../assets/img/right-mark.png) no-repeat center center;
background-size: % auto;
}
&.ifDiabled {
color: #DDD;
visibility: hidden;
}
}
}
}
}
}
}
}
</style>
<template>
<div class="sign-box">
<div class="top-box">
<div class="person-box">
<div class="sign-personInfor">
<div class="headImg">
<img src="../assets/img/head-img.png" alt="">
</div>
<div class="nickname">
<p>我是大橙子</p>
<p>您连续签到:<span>7天</span></p>
</div>
</div>
<button class="sign-btn" @click="signIn">签到</button>
</div>
<div class="integral-box">
<div class="sign-price">
<p><img src="../assets/img/red-packet.png" alt="">红包:5.00</p>
</div>
<div class="sign-price">
<p><img src="../assets/img/banshou.png" alt=""> 小扳手:</p>
</div>
</div>
</div>
<div class="calender">
<div class="ui-datepicker-wrapper ui-datepicker-wrapper-show">
<div class="ui-datepicker-header">
<a href="javascript:;" class="ui-datepicker-btn ui-datepicker-prev" @click="getPrevMonth(1)"></a>
<a href="javascript:;" class="ui-datepicker-btn ui-datepicker-next" @click="getNextMonth(2)"></a>
<span class="ui-datepicker-curr-month">{{thisMonthDays.year}}年{{thisMonthDays.month}}月</span>
</div>
<div class="ui-datepicker-body">
<div class="datepicker-weekday">
<ul class="weekday-head">
<li>日</li>
<li>一</li>
<li>二</li>
<li>三</li>
<li>四</li>
<li>五</li>
<li>六</li>
</ul>
<!-- active -->
<ul class="weekday-days">
<li v-for="item in this.thisMonthDays.days" :data-date="thisMonthDays.year+'-'+thisMonthDays.month+'-'+item.showDate" :key="item.id" :class="{active: item.hasMark ==thisMonthDays.year+'-'+thisMonthDays.month+'-'+item.showDate,ifDiabled: !item.ifThisMonthDays}">
{{item.showDate}}
</li>
</ul>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import Hotcss from "hotcss";
import qs from "qs";
export default {
name: "signIn",
data: function() {
return {
ret: [],
thisMonthDays: {},
daysHtml: '',
setYear: new Date().getFullYear(),
setMonth: new Date().getMonth()+,
uid: '',
signMark: []
};
},
created() {
this.login();
},
mounted: function() {
this.getMonthData(this.setYear,this.setMonth);
this.getSignData(this.setMonth,this.setYear,this.setMonth);
},
methods: {
login(){
this.axios.get('http://app.lanbanshou.com/mpdemo/login/translate',{
params: {
openid: 'oFX2IwUkoxBLEmk999HaPrxCB79c'
}
}).then((response)=> {
response = JSON.parse(response.data.obj);
console.log(response)
sessionStorage.setItem('uid',response.info.id)
this.uid = response.info.id;
}).catch((response)=>{
console.log(response);
})
},
signIn(){
this.axios.get('http://192.168.2.88:8080/mpdemo/qiandao/qiandao',{
params:{
uid: this.uid
}
}).then((response)=>{
console.log(response);
alert(response.data.obj)
}).catch((response)=>{
console.log(response);
})
},
fillZero(s) {
return s < ? '' + s : s;
},
getNextMonth(mon){
this.setMonth = this.setMonth + ;
this.getSignData(this.setMonth,this.setYear,this.setMonth,mon)
//this.getMonthData(this.setYear,this.setMonth)
},
getPrevMonth(mon){
this.setMonth = this.setMonth - ;
this.getSignData(this.setMonth,this.setYear,this.setMonth,mon) // this.getMonthData(this.setYear,this.setMonth)
},
getMonthData(year,month){
if(!year || !month){
var today = new Date();
year = today.getFullYear();
month = today.getMonth()+;
}
var firstDay = new Date(year,month - , );
var firstDayWeekDay = firstDay.getDay();
if(firstDayWeekDay === ) firstDayWeekDay = ; year = firstDay.getFullYear();
month = firstDay.getMonth() + ; var lastDayOfLastMonth = new Date(year,month-,);
var lastDateOfLastMonth = lastDayOfLastMonth.getDate(); var preMonthDayCount = firstDayWeekDay - ; var lastDay = new Date(year,month,);
var lastDate = lastDay.getDate();
this.ret = [];
for (var i = ; i < ; i++) {
var date = i - preMonthDayCount;
var showDate = date;
var thisMonth = month;
var ifThisMonthDays = true; if (date <= ) {
//上一月
thisMonth = month - ;
showDate = lastDateOfLastMonth + date;
ifThisMonthDays = false;
} else if(date > lastDate){
//下一月
thisMonth = month + ;
showDate = showDate -lastDate;
ifThisMonthDays = false;
}
if (thisMonth === ) thisMonth = ;
if (thisMonth === ) thisMonth = ;
this.ret.push({
month: thisMonth,
date:date,
showDate: this.fillZero(showDate),
ifThisMonthDays: ifThisMonthDays
});
}
this.signMark.map((obj1,index1)=>{
var homologous1 = obj1.time.split(' ')[];
this.ret.map((obj2,index2)=>{
var mark1 = homologous1.split('-')[];
// console.log(mark1);
if(obj2.showDate == mark1){
obj2.hasMark = homologous1;
}
})
})
this.thisMonthDays = {
year: year,
month: this.fillZero(month),
days: this.ret
}
// return {
// year: year,
// month: month,
// days: this.ret
// };
console.log({
year: year,
month: this.fillZero(month),
days: this.ret
});
},
getSignData(defaultDate,changeYear,changeMonth,mon){
console.log(defaultDate,changeYear,changeMonth)
this.axios.get('http://192.168.2.88:8080/mpdemo/qiandao/sign',{
params : {
uid: sessionStorage.getItem('uid'),
time: defaultDate
}
}).then((response)=>{
response = JSON.parse(response.data.obj);
if(response.code == ){
alert(response.msg)
if(mon == ){
this.setMonth = this.setMonth-;
} else {
this.setMonth = this.setMonth+;
}
//this.setMonth = new Date().getMonth()+1;
return;
}
this.signMark = response.list;
console.log(this.signMark)
this.getMonthData(changeYear,changeMonth);
}).catch((response)=>{
console.log(response)
})
},
}
};
</script>

VUE 日历签到的更多相关文章

  1. 使用 UICollectionView 实现日历签到功能

    概述 在 App 中,日历通常与签到功能结合使用.是提高用户活跃度的一种方式,同时,签到数据中蕴含了丰富的极其有价值的信息.下面我们就来看看如何在 App 中实现日历签到功能. 效果图 ..... 思 ...

  2. 多功能版vue日历控件

    下载地址:https://pan.baidu.com/s/1nvpx0tB5cIvvqHuApz_MpQ 之前写了一个简单的vue日历控件:https://www.cnblogs.com/mrzhu/ ...

  3. php+mysql+jquery日历签到

    在网站开发过程中我们会经常用到签到功能来奖励用户积分,或者做一些其他活动.这次项目开发过程中做了日历签到,因为没有经验所有走了很多弯路,再次记录过程和步骤. 1.日历签到样式: 2.本次签到只记录本月 ...

  4. PHP实现日历签到,并实现累计积分功能

    在网站开发过程中我们会经常用到签到功能来奖励用户积分,或者做一些其他活动.这次项目开发过程中做了日历签到,因为没有经验所有走了很多弯路,再次记录过程和步骤. 1.日历签到样式:使用的是calendar ...

  5. jquery日历签到控件的实现

    calendar.js var calUtil = { //当前日历显示的年份 showYear:2015, //当前日历显示的月份 showMonth:1, //当前日历显示的天数 showDays ...

  6. vue 日历组件只显示本月和下个月 -- 多选日期

    效果就是上图 代码贴出 1.在components > calander > index.vue <template> <div class="page&quo ...

  7. Vue日历

    Vue生成日历,根据返回值将日期标红 HTML: <h1>CSS 日历</h1> <div id="calendar"> <div cla ...

  8. vue日历/日程提醒/html5本地缓存

    先上图 功能: 1.上拉日历折叠,展示周 2.左右滑动切换月 2.“今天”回到今天:“+”添加日程 3.localStorage存储日程 index,html <body> <div ...

  9. vue 日历组件

    Github 上很多点击弹出日历选择某个时间的组件,却没有找到单纯展示日历并且能点击获取时间的组件 npm i vue-calendar-component --save cnpm i vue-cal ...

随机推荐

  1. C# 世界坐标 页面坐标 PageUnit PageScale

    PageScale:  获取或设置此 Graphics 的世界单位和页单位之间的比例.PageUnit:  获取或设置用于此 Graphics 中的页坐标的度量单位. 话不多说,上代码: privat ...

  2. 编写高质量代码改善C#程序的157个建议——建议17:多数情况下使用foreach进行循环遍历

    建议17:多数情况下使用foreach进行循环遍历 由于本建议涉及集合的遍历,所以在开始讲解本建议之前,我们不妨来设想一下如何对结合进行遍历.假设存在一个数组,其遍历模式可以采用依据索引来进行遍历的方 ...

  3. 20169219 TCP_IP网络协议攻击实验报告

    (1) ARP缓存欺骗 RP 缓存是 ARP 协议的重要组成部分.ARP 协议运行的目标就是建立 MAC 地址和 IP 地址的映射,然后把这一映射关系保存在 ARP 缓存中,使得不必重复运行 ARP ...

  4. 关于在jeecms中css,图片,html,模板是如何组装成——part1

    先从HTML入手:index.html <!DOCTYPE HTML> <html> <meta name="viewport" content=&q ...

  5. tornado设置cookie过期时间(expires time)

    具体的tornado设置过期时间的东西, 我也是查资料才发现的, 现在就贴代码吧 用户登录之后, 设置cookie, 我使用set_secure_cookie的, 它默认是有个30天的过期时间, 导致 ...

  6. Header Only Library

    什么是Header Only Library Header Only Library把一个库的内容完全写在头文件中,不带任何cpp文件. 这是一个巧合,决不是C++的原始设计. 第一次这么做估计是ST ...

  7. 《Andorid开源》greenDao 数据库orm框架

       一 前言:以前没用框架写Andorid的Sqlite的时候就是用SQLiteDatabase ,SQLiteOpenHelper ,SQL语句等一些东西,特别在写SQL语句来进行 数据库操作的时 ...

  8. golang subprocess tests

    golang Subprocess tests Sometimes you need to test the behavior of a process, not just a function. f ...

  9. EXCEL vlookup和small 综合运用

    表数据如下: 如何通过EXCEL函数把 “谁拥有错误的代码” 的名称列出来,数组公式如下: =IFERROR(INDIRECT("A"& IFERROR(SMALL(IF( ...

  10. postgresql删除活动链接的数据库

    当我们在使用drop database testdb命令删除数据库时,会提示该数据库正在被使用,这样我们就无法删除,此时我们可以通过如下语句断开该数据库的所有链接: SELECT pg_termina ...