talk_appAmin/pages/work/activity_sh/activity_info.vue

498 lines
10 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>
<view class="">
<!-- 审核的信息 -->
<view class="shenghe_item" >
<image v-if="actiInfoList.auditStatus==0" src="../../../static/images/icon/pass.png" mode="" class="pass_unpass pass"></image>
<image v-if="actiInfoList.auditStatus==4" src="../../../static/images/icon/unpass.png" mode="" class="pass_unpass unpass">
</image>
<view class="user_header">
<view class="">
<view class="user_img">
<image :src="avatarIcon(actiInfoList.avatarInfo)" mode=""></image>
</view>
<view class="user_msg">
<h4>{{ actiInfoList.nickName }}</h4>
<p>{{timeAgo(actiInfoList.createTime)}}·{{ actiInfoList.infoSchool }}</p>
</view>
</view>
<view class="text_style">
</view>
</view>
<!-- 审核的文章标题 -->
<view class="shenghe_title">
<h4>{{ actiInfoList.acTitle }}</h4>
<p>活动时间:{{ actiInfoList.startTime }} - {{ actiInfoList.endTime }}</p>
<p>活动地点:{{ actiInfoList.addres }}</p>
</view>
<!-- 活动内容 -->
<view class="text_msg">
<up-text size="15" color="#000000" lineHeight="23" :text="actiInfoList.acContent"></up-text>
</view>
<view class="cardx" v-for="(item, index) in toimage(actiInfoList.file)" :key="index">
<image :src="item" class="image"></image>
</view>
<view>
</view>
<!-- 审核未通过的提示框 -->
<view class="tishi_box" v-if="page_type==3">
<h2>审核未通过</h2>
<p>未通过原因存在敏感词“SB”</p>
</view>
</view>
<footer>
<view class="footer_top" v-if="page_type==1">
<view class="footer_btn footer_btn_left">
通过
</view>
<view class="footer_btn footer_btn_right" @click="show = true">
不通过
</view>
</view>
<view class="footer_bottom">
</view>
</footer>
<!-- 弹窗显示不通过原因 -->
<up-popup :show="show" @close="show = false" @open="openAudit" mode="center" :round="12">
<view class="popup">
<!-- 标题 -->
<h4>未通过原因</h4>
<!-- 输入区域0 -->
<up-textarea v-model="value2" placeholder="请输入内容" count class="input_area"></up-textarea>
<view class="popup_btns">
<view class="popup_btns_left popup_btn" @click="close()">
取消
</view>
<view class="popup_btns_right popup_btn" @click="UNpass">
</view>
</view>
</view>
</up-popup>
</view>
</template>
<script setup>
import { getTakePartsInfoByacId, gotoQrcode, gotoSing1, gotoSing2 } from "@/api/activityInfo/activityTakeInfo";
import { listInfo, getInfo, getInfoall, delInfo, addInfo, updateInfo } from "@/api/activityInfo/info";
import { getDicts } from "@/api/system/dict/data";
import { onShow, onLoad } from '@dcloudio/uni-app';
import { ref, reactive, getCurrentInstance, toRefs, computed } from 'vue';
import { useStore } from 'vuex';
const showqr = ref(false)
const { proxy } = getCurrentInstance();
const iconConfig = proxy.iconConfig;
const style = ref({
p: 'font-weight: 400;font-size: 24rpx;color: #000000 !important;',
});
const activityState = ref([]); // 字典 activity_state 活动状态
const takePartState = ref([]); // 字典 take_part_state 活动参与状态
const open = ref(false);
const title = ref('确认签到');
const content = ref('请您确认活动签到,祝您玩的愉快!');
const bgColor = ref('');
const store = useStore();
const QNDomain = store.state.user.QNDomain;
const actiInfoList = ref({});
const activityAttendInfo = ref({});
const qrcodeInfo = ref();
//头像组
const dataopen = ref(false)
const urls1 = reactive([])
const participationInfo = ref([])
const participation = (data) => {
// 根据条件决定保留的元素数量
const limit = actiInfoList.state === '1' ? 6 : 4;
// 创建一个新的数组来存储前 limit 个元素
const limitedData = data.slice(0, limit);
// 映射到新的数组
const refObjects = limitedData.map(item => (QNDomain + item.avatar));
return refObjects;
}
var value2 = ref('')
//判断文章状态根据 1 2 3 v-if判断
var page_type = ref(1)
// 创建响应式数据
const show = ref(false);
// 定义方法 弹出打开
function openAudit() {
// 打开逻辑,比如设置 show 为 true
show.value = true;
// console.log('open');
}
//弹出关闭
function close() {
// 关闭逻辑,设置 show 为 false
show.value = false;
// console.log('close');
}
// 未通过弹窗的确定点击事件
function UNpass() {
console.log(value2.value);
//close函数 在上传不通过原因当中上传文本
close()
}
const avatarIcon = (e) => {
return QNDomain + e;
};
function basetoimg(e) {
return "data:image/png;base64," + e
}
onLoad((options) => {
const _id = options.id;
getInfo(_id).then(response => {
actiInfoList.value = response.data;
console.log("actiInfoList:", actiInfoList.value);
});
getDicts('activity_state').then(e => {
activityState.value = e.data;
});
getDicts('take_part_state').then(e => {
takePartState.value = e.data;
});
});
const leftClick = () => {
proxy.$tab.navigateBack(1);
};
const toimage = (url) => {
if (typeof url === 'string') {
let info = url.split(",");
let processedInfo = info.map(item => QNDomain + item);
console.log("processedInfo", processedInfo);
return processedInfo;
}
return null;
};
const goQrcode = () => {
uni.scanCode({
onlyFromCamera: true,
success: (res) => {
console.log('扫描二维码成功,结果:', res);
toqrcode(res);
},
error: (res) => {
console.log('扫描二维码出现错误');
}
});
}
const toqrcode = (e) => {
qrcodeInfo.value = JSON.parse(e.result);
if (actiInfoList.value.id !== qrcodeInfo.value.id) {
proxy.$modal.msgError('二维码不匹配!')
return;
} else {
open.value = !open.value;
console.log("信息:", qrcodeInfo.value);
}
};
function timeAgo(input) {
const date = new Date(input);
if (isNaN(date)) {
throw new Error('Invalid date');
}
const now = new Date();
const diff = now - date;
const minutes = Math.floor(diff / 60000); // 1 minute = 60000 ms
const hours = Math.floor(diff / 3600000); // 1 hour = 3600000 ms
const days = Math.floor(diff / 86400000); // 1 day = 86400000 ms
if(diff < 0){
return formatDate(date);
}
if (minutes < 60) {
if (minutes == 0) {
return '刚刚';
}
return `${minutes}分钟前`;
} else if (hours < 24) {
return `${hours}小时前`;
} else if (days < 3) {
return `${days}天前`;
} else {
return formatDate(date);
}
}
function formatDate(input) {
const date = new Date(input);
if (isNaN(date)) {
throw new Error('Invalid date');
}
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}.${month}.${day}`;
}
</script>
<style lang="scss" scoped>
.cardx {
margin-top: 48rpx;
.image {
width: 686rpx;
border-radius: 24rpx;
height: 720rpx;
}
}
page {
background-color: #fff;
}
.shenghe_item {
width: 750rpx;
background: #ffffff;
padding: 30rpx 32rpx 216rpx 32rpx;
position: relative;
}
.pass_unpass {
position: absolute;
right: 0;
}
.pass {
width: 263rpx;
height: 200rpx;
}
.unpass {
width: 230rpx;
height: 200rpx;
}
.user_header {
width: 100%;
display: flex;
justify-content: space-between;
height: 84rpx;
.user_img {
width: 84rpx;
height: 84rpx;
margin-right: 19rpx;
image {
width: 84rpx;
height: 84rpx;
border-radius: 50%;
}
}
.user_msg {
h4 {
font-weight: 600;
height: 31rpx;
font-size: 30rpx;
text-align: left;
color: #000000 100%;
margin-bottom: 18rpx;
}
p {
height: 30rpx;
font-size: 30rpx;
color: #999999;
}
}
.text_style {
right: 0;
font-weight: 400;
width: 84rpx;
height: 28rpx;
font-size: 28rpx;
text-align: left;
color: #6AA2FF;
}
}
.user_header>view {
display: flex;
}
.shenghe_title {
h4 {
font-weight: 400;
width: 100%;
font-size: 32rpx;
text-align: left;
color: #000000;
margin-top: 32rpx;
margin-bottom: 28rpx;
}
}
.shenghe_title p{
font-weight: 400;
height: 24rpx;
font-size: 24rpx;
color: #999999;
margin-bottom: 12rpx;
}
.text_msg{
font-size: 24rpx;
margin-top: 48rpx;
}
.image_box{
width: 686rpx;
height: 720rpx;
border-radius: 24rpx 24rpx 24rpx 24rpx;
background: #caf6f5;
margin-top: 48rpx;
}
footer {
position: fixed;
bottom: 0px;
border-top: 4rpx solid #f6f6f6;
}
.footer_top {
width: 750rpx;
height: 94rpx;
background: #ffffff;
display: flex;
align-items: center;
justify-content: space-around;
}
.footer_bottom {
width: 750rpx;
height: 68rpx;
background: #f6f6f6;
}
.footer_btn {
width: 300rpx;
height: 60rpx;
border-radius: 30rpx 30rpx 30rpx 30rpx;
display: flex;
align-items: center;
justify-content: center;
color: #fff;
font-size: 28rpx;
font-weight: 600;
}
.footer_btn_left {
background: #6aa2ff;
}
.footer_btn_right {
background: #fa3939;
}
.popup {
width: 600rpx;
height: 470rpx;
border-radius: 24rpx 24rpx 24rpx 24rpx;
background: #ffffff;
}
.popup {}
.popup h4 {
font-weight: 600;
text-align: center;
height: 31rpx;
font-size: 30rpx;
color: #000000 100%;
margin-top: 32rpx;
}
.input_area {
width: 552rpx;
height: 246rpx;
border-radius: 16rpx 16rpx 16rpx 16rpx;
background: #f4f5f6;
margin: 31rpx auto;
}
.popup_btns {
width: 100%;
display: flex;
align-items: center;
justify-content: space-around;
}
.popup_btn {
width: 180rpx;
height: 50rpx;
border-radius: 16rpx 16rpx 16rpx 16rpx;
display: flex;
align-items: center;
justify-content: space-around;
font-weight: 600;
font-size: 24rpx;
margin-top: 48rpx;
color: #FFFFFF;
}
.popup_btns_left {
background-color: #6AA2FF;
}
.popup_btns_right {
background-color: #FA3939;
}
.tishi_box {
width: 686rpx;
height: 134rpx;
border-radius: 24rpx 24rpx 24rpx 24rpx;
background: #ffffff;
box-shadow: 0rpx 0rpx 20rpx #ececed;
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
color: #FA3939;
}
.tishi_box h2{
font-size: 36rpx;
}
.tishi_box p{
font-size: 24rpx;
margin-top: 16rpx;
}
</style>