talk_appAmin/pages/signln/signid.vue

658 lines
13 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!-- 签到任务 -->
<template>
<navbar_neadVue title="签到任务" background_color="#CAF6F5"></navbar_neadVue>
<view class="content-top">
<view class="top">
<view class="top-right-text">
<text @click="GoTo()"></text>
</view>
<view>
<view class="top-left-text">
<text>{{campus_coin}}</text>
<text>校园币</text>
</view>
<view class="top-left">
<text>我的校园币</text>
</view>
</view>
<view class="right-image">
<image src="../../static/images/sign/jin.png"></image>
</view>
<view class="content-bottom">
<view class="c-bottom">
<text>
已连续签到<text class="text-1">{{number_days_sign}}</text>
</text>
</view>
</view>
<view class="content-bottom-bot">
<view class="bot-text">
<text>记得去商城兑换礼物奥</text>
</view>
<!-- 签到日期 -->
<view>
<view class="data">
<view class="data-view" v-for="(item,index) in weekDates" :key="index">
<image v-if="item.isDate == true" class="data-image"
src="../../static/images/sign/one_l.png">
</image>
<image v-else class="data-image" src="../../static/images/sign/one.png"></image>
<text class="data-text">{{item.data}}日</text>
</view>
</view>
</view>
</view>
</view>
</view>
<!-- 签到任务 -->
<view class="task">
<view style="height: 60rpx;">
<text class="tasktext">签到任务</text>
</view>
<view class="task-content" v-for="(item,index) in arr" :key="index">
<!-- -->
<view class="task-right" @click="goTaskRight(item.type,item.id)">
<text>{{item.type}}</text>
</view>
<view>
<text class="c-text">{{item.title}}</text>
<image style="width: 21rpx;height: 21rpx;margin-left: 36rpx;vertical-align: middle;"
src="../../static/images/sign/one.png">
</image>
<text class="count-text">+{{item.rewards}}</text>
</view>
<view class="task-left">
<text class="left-text">{{item.content}}</text>
<text v-show="item.conditons != null" class="left-text"
style="margin-left: 20rpx;">{{leftParenthesis}}</text>
<text v-show="item.conditons != null" class="left-0text">{{acquiesce}}</text>
<text v-show="item.conditons != null"
class="left-text">{{slash}}{{item.conditons}}{{rightParenthesis}}</text>
</view>
</view>
<view style="height: 24rpx;"></view>
</view>
<view class="bottom">
<view class="bottom-left"></view>
<view class="bottom-text">
<text class="bottom-text-s">兑换商城</text>
<view class="bottom-text-r" @click="GoExchange()">
<text style=" vertical-align: middle;">更多</text>
<image style="width: 14rpx; height: 23rpx;margin-left: 9rpx; vertical-align: middle;"
src="../../static/images/sign/rig.png">
</image>
</view>
</view>
</view>
<view>
<ex></ex>
</view>
</template>
<script setup>
import {
ref,
reactive,
getCurrentInstance
} from "vue";
import navbar_neadVue from "@/pages/common/navbar/navbar_nead.vue";
import ex from "@/pages/common/exchange/index.vue";
import {
listTask,
getTask,
delTask,
addTask,
updateTask
} from "@/api/signln/checktask/task";
import {
listSignTa,
getSignTa,
delSignTa,
addSignTa,
updateSignTa,
newtableone,
listSignTaUser
} from "@/api/signln/SignTa/SignTa";
const {
proxy
} = getCurrentInstance();
//首次进入页面的用户创建一条数据
function FirstEntry() {
newtableone('sign_table').then(response => {})
}
// 签到的数据
let arr = ref([])
const leftParenthesis = ref("(")
const rightParenthesis = ref(")")
const slash = ref("/");
const acquiesce = ref("0");
/** 查询签到任务列表 */
function getList() {
listTask().then(response => {
arr.value = response.rows;
});
}
getList();
//签到表自己的数据
const form = reactive([]);
// 校园币
let campus_coin = ref(0);
// 连续签到天数
let number_days_sign = ref(0);
//上次签到的时间
let lastTimeSign = ref();
//具体日期
const past = 12;
/** 查询签到详情列表 */
function getListsign() {
listSignTaUser().then(response => {
if (response.rows.length > 0) {
form.value = response.rows[0];
campus_coin.value = response.rows[0].campusCoin;
number_days_sign.value = response.rows[0].numberDaysSign;
lastTimeSign.value = response.rows[0].lastTimeSign;
} else {
FirstEntry();
}
});
}
getListsign();
//签到点击事件
function goTaskRight(type, id) {
switch (type) {
case "立即签到":
SignSuccess(id);
break;
case "立即邀请":
break;
default:
proxy.$tab.navigateTo('/pages/index')
break;
}
cot.value++;
Ipp(cot.value);
console.log(weekDates)
console.log(cot.value)
}
// 签到成功
function SignSuccess(id) {
//判断是否给币的条件
ToDaySign();
form.value.numberDaysSign++;
form.value.lastTimeSign = parseTime(new Date(), '{y}-{m}-{d}')
form.value.campusCoin = arr.value.find(item => item.id == id).rewards;
form.value.taskid = id;
console.log(form.value)
// 修改签到表
updateSignTa(form.value).then(response => {
getListsign();
});
// 添加签到明细
// addSign(form.value).then(response => {
// });
// uni.showToast({
// title: '操作成功',
// //将值设置为 success 或者直接不用写icon这个参数
// icon: 'success',
// //显示持续时间为 2秒
// duration: 2000
// })
}
// 今天是否签到了
function ToDaySign() {
var today = new Date().getDate();
var lasttimesign = new Date(form.value.lastTimeSign).getDate();
if (today != lasttimesign) {
return;
} else {
}
}
// 获取上次签到时间 然后返回后面7天的时间 然后上次签到断了则开始新的日期
var date = new Date();
console.log("日" + date.getDate() + "年" + date.getFullYear() + "月" + (date.getMonth() + 1))
const datetimes = reactive([{
data: date.getDate(),
}])
const sdate = new Date();
const dayof = date.getDay();
const weekDates = reactive([]);
sdate.setDate(date.getDate() - dayof + (dayof === 0 ? -6 : 1));
console.log(dayof)
for (let i = 0; i < 7; i++) {
const date = new Date(sdate);
date.setDate(sdate.getDate() + i);
const list = {
data: date.getDate(),
isDate: false
}
weekDates.push(list);
}
//连续签到天数
const cot = ref(2);
async function Ipp(ite) {
const indexs = weekDates.indexOf(weekDates.find(item => item.data == past));
for (let j = 0; j < ite; j++) {
weekDates.find(item => item.data == past + j).isDate = true;
}
}
Ipp(cot.value);
// console.log(indexs)
// console.log(weekDates)
//签到时间
const datetime = reactive([])
//
function GoTo() {
uni.navigateTo({
url: './signiddetails'
});
}
//
function GoExchange() {
uni.navigateTo({
url: './exchangemall',
});
}
//时间
function parseTime(time, pattern) {
if (arguments.length === 0 || !time) {
return null
}
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}'
let date
if (typeof time === 'object') {
date = time
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time)
} else if (typeof time === 'string') {
time = time.replace(new RegExp(/-/gm), '/').replace('T', ' ').replace(new RegExp(/\.[\d]{3}/gm), '');
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = time * 1000
}
date = new Date(time)
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay()
}
const time_str = format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
let value = formatObj[key]
// Note: getDay() returns 0 on Sunday
if (key === 'a') {
return ['日', '一', '二', '三', '四', '五', '六'][value]
}
if (result.length > 0 && value < 10) {
value = '0' + value
}
return value || 0
})
return time_str
}
</script>
<style scoped>
@import '@/pages/common/navbar/navbar.css';
.content-top {
/* height: 424rpx; */
height: 502rpx;
background: linear-gradient(-180deg, #c9f6f5, #ffffff);
}
.top {
margin-left: 32rpx;
margin-right: 32rpx;
}
.top-right-text>text {
font-weight: Regular;
/* width: 95rpx; */
height: 24rpx;
font-size: 24rpx;
text-align: left;
color: #000000;
float: right;
margin-top: 24rpx;
}
.top-left-text {
padding-top: 99rpx;
padding-left: 1rpx;
}
.top-left-text>text:first-child {
color: #000000;
font-weight: Regular;
font-face: Microsoft YaHei;
font-size: 48rpx;
text-align: left;
line-height: 46.29rpx;
}
.top-left-text>text:last-child {
color: #000000;
font-weight: Regular;
font-weight: 600;
font-face: Microsoft YaHei;
font-size: 28rpx;
text-align: left;
line-height: 46.29rpx;
}
.top-left>text {
display: block;
font-weight: Regular;
/* width: 119rpx; */
font-size: 24rpx;
text-align: left;
color: #6F6F6F;
padding-left: 1rpx;
line-height: 24rpx;
}
.right-image>image {
width: 248rpx;
height: 289rpx;
position: absolute;
top: 279rpx;
right: 32rpx;
z-index: 7;
}
.content-bottom {
width: 319rpx;
height: 60rpx;
border-radius: 20rpx 20rpx 0 0;
background: #ffffff;
margin-top: 48rpx;
}
.c-bottom {
padding-left: 26rpx;
padding-top: 8rpx;
}
.c-bottom>text:first-child {
color: #000000;
font-weight: Regular;
font-face: Microsoft YaHei;
font-size: 28rpx;
text-align: left;
line-height: 46.29rpx;
}
.text-1 {
color: #fa3939;
font-weight: Regular;
font-face: Microsoft YaHei;
font-size: 28rpx;
text-align: left;
line-height: 46.29rpx;
}
.content-bottom-bot {
position: relative;
/* width: 686rpx; */
height: 214rpx;
border-radius: 0 32rpx 32rpx 32rpx;
background: #ffffff;
z-index: 9;
}
.bot-text {
padding-left: 24rpx;
display: block;
/* padding-top: 12rpx; */
}
.bot-text>text {
font-weight: Regular;
width: 248rpx;
height: 24rpx;
font-size: 24rpx;
text-align: left;
color: #6F6F6F;
}
.task {
width: 686rpx;
/* height: 484rpx; */
border-radius: 32rpx 32rpx 32rpx 32rpx;
background: #ffffff;
/* background: #fa3939; */
margin-left: 32rpx;
margin-right: 32rpx;
margin-top: 24rpx;
}
.tasktext {
display: block;
font-weight: Regular;
width: 144rpx;
height: 36rpx;
font-size: 36rpx;
text-align: left;
color: #000000;
padding-top: 24rpx;
margin-left: 24rpx;
}
.task-content {
margin-left: 24rpx;
margin-top: 24rpx;
}
.task-right {
margin-top: 16rpx;
width: 120rpx;
height: 48rpx;
border-radius: 24rpx 24rpx 24rpx 24rpx;
background: #f99b46;
float: right;
margin-right: 24rpx;
}
.c-text {
font-weight: Regular;
width: 95rpx;
height: 24rpx;
font-size: 24rpx;
text-align: left;
color: #000000;
vertical-align: middle;
}
.count-text {
font-weight: Regular;
width: 20rpx;
height: 16rpx;
font-size: 20rpx;
text-align: left;
color: #F99B46;
padding-left: 3rpx;
line-height: 16rpx;
vertical-align: middle;
}
.task-right>text {
font-weight: Regular;
/* width: 95rpx; */
height: 25rpx;
font-size: 24rpx;
text-align: left;
color: #FFFFFF;
display: block;
margin: auto;
text-align: center;
line-height: 48rpx;
}
.task-left {
/* display: block; */
height: 20rpx;
}
.left-text {
display: inline;
color: #999999;
font-weight: Regular;
font-face: Microsoft YaHei;
font-size: 20rpx;
text-align: left;
/* margin-top: 12rpx; */
}
.left-0text {
color: #fb5c5c;
font-weight: Regular;
font-face: Microsoft YaHei;
font-size: 20rpx;
text-align: left;
}
.bottom {
margin-right: 32rpx;
margin-left: 32rpx;
margin-top: 24rpx;
}
.bottom-left {
width: 4rpx;
height: 30rpx;
border-radius: 2rpx 2rpx 2rpx 2rpx;
background: #f99b46;
float: left;
margin-top: 8rpx;
}
.bottom-text-s {
font-weight: Regular;
/* width: 123rpx; */
height: 31rpx;
font-size: 30rpx;
text-align: left;
color: #000000;
margin-left: 24rpx;
vertical-align: baseline;
}
.bottom-text-r {
float: right;
font-weight: Regular;
/* width: 47rpx; */
height: 24rpx;
line-height: 48rpx;
font-size: 24rpx;
text-align: left;
color: #999999;
vertical-align: middle;
margin-right: 32rpx;
}
.bottom-text-r>text {}
.data {
display: flex;
margin-left: 24rpx;
padding-left: 2rpx;
margin-top: 48rpx;
border-radius: 0 32rpx 32rpx 32rpx;
}
.data-view {
margin-right: 45rpx;
}
.data-image {
display: flex;
}
.data-image {
width: 42rpx;
height: 44rpx;
}
.data-text {
display: block;
font-weight: Regular;
width: 60rpx;
height: 22rpx;
font-size: 24rpx;
text-align: center;
vertical-align: middle;
color: #7E7E7E;
margin-left: -8rpx;
margin-top: 12rpx;
}
</style>