Huanyuyuehui/pages/activity/registrate_activity/index.vue

1316 lines
38 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<view :style="'background-color: '+activityData.color">
<form v-if="!posterStatus" @submit="formSubmit">
<view v-if="activityData.activity_name" class='personal-data' :style="viewColor">
<view class='list'>
<!--活动背景图-->
<view class="activity-pic">
<image :src="activityData.pic" class="image" mode="widthFix"></image>
</view>
<view class="wrapper">
<view class="text-info">
<view class="acea-row activity-name">
<view class="title line2">{{activityData.activity_name}}</view>
<view class="share" @click="listenerActionSheet">
<i class="iconfont icon-fenxiang4"></i>
分享
</view>
</view>
<view class="activity-item">
<view class="iconfont icon-huodong-shijian"></view>
<view v-if="activityData.start_time&&activityData.end_time" class="info">
{{formatDate(new Date(activityData.start_time))}} - {{formatDate(new Date(activityData.end_time))}}
</view>
</view>
<view class="activity-item">
<view class="iconfont icon-huodong-renshu"></view>
<view class="info">{{activityData.count == 0 ? '不限人数' : activityData.count+'人'}}</view>
</view>
<view class="activity-item">
<view class="iconfont icon-huodong-renshu"></view>
<view class="info info-theme">
{{activityData.total}}人
</view>
</view>
<view class="acea-row">
<view class="iconfont icon-huodong-jianjie"></view>
<view class="info acea-info">{{activityData.info}}</view>
</view>
</view>
</view>
<view class='wrapper' :class="{'form-wrapper' : disabled}" v-if="formData.length">
<view class='item acea-row row-between-wrapper' :class="{on:(item.name=='radios' || item.name=='checkboxs'),on2:item.name == 'dateranges',on3:item.name == 'citys'}" v-for="(item,index) in formData" :key="index">
<view class="name">
{{ item.titleConfig.value }}
<span class="asterisk" v-if="item.titleShow.val">*</span>
</view>
<!-- radio -->
<view v-if="item.name=='radios'" class="discount">
<radio-group @change="radioChange($event, index, item)" class="acea-row row-middle row-right item-select" :class="disabled == 1 ? 'disabled' : ''">
<label class="radio" v-for="(j,jindex) in item.wordsConfig.list" :key="jindex">
<view class="acea-row row-middle">
<!-- #ifndef MP -->
<radio :value="jindex.toString()" :checked='j.show'/>
<!-- #endif -->
<!-- #ifdef MP -->
<radio :value="jindex" :checked='j.show'/>
<!-- #endif -->
<view>{{j.val}}</view>
</view>
</label>
</radio-group>
</view>
<!-- checkbox -->
<view v-if="item.name=='checkboxs'" class="discount">
<checkbox-group @change="checkboxChange($event, index, item)" class="acea-row row-middle row-right item-select" :class="disabled == 1 ? 'disabled' : ''">
<label class="radio" v-for="(j,jindex) in item.wordsConfig.list" :key="jindex">
<view class="acea-row row-middle">
<!-- #ifndef MP -->
<checkbox :value="jindex.toString()" :checked="j.show" style="transform:scale(0.9)" />
<!-- #endif -->
<!-- #ifdef MP -->
<checkbox :value="jindex" :checked="j.show" style="transform:scale(0.9)" />
<!-- #endif -->
<view>{{j.val}}</view>
</view>
</label>
</checkbox-group>
</view>
<!-- text -->
<view v-if="item.name=='texts' && item.valConfig.tabVal == 0" class="discount">
<input type="text" :placeholder="item.tipConfig.value" placeholder-class="placeholder" v-model="item.value" :disabled="disabled"/>
</view>
<!-- number -->
<view v-if="item.name=='texts' && item.valConfig.tabVal == 4" class="discount">
<input type="number" :placeholder="item.tipConfig.value" placeholder-class="placeholder" v-model="item.value" :disabled="disabled"/>
</view>
<!-- email -->
<view v-if="item.name=='texts' && item.valConfig.tabVal == 3" class="discount">
<input type="text" :placeholder="item.tipConfig.value" placeholder-class="placeholder" v-model="item.value" :disabled="disabled"/>
</view>
<!-- date -->
<view v-if="item.name=='dates'" class="discount">
<picker mode="date" :value="item.value" @change="bindDateChange($event,index)" :class="item.value.length ? '' : 'placeholder'">
<view class="acea-row row-between-wrapper">
<view v-if="item.value == ''">{{item.tipConfig.value}}</view>
<view v-else>{{item.value}}</view>
<text class='iconfont icon-jiantou'></text>
</view>
</picker>
</view>
<!-- dateranges -->
<view v-if="item.name=='dateranges'" class="discount" :class="item.value.length ? '' : 'placeholder'">
<uni-datetime-picker v-model="item.value" type="daterange" @maskClick="maskClick" :class="disabled == 1 ? 'disabled' : ''">
{{item.value.length?item.value[0]+' - '+item.value[1]:item.tipConfig.value}}
<text class='iconfont icon-jiantou'></text>
</uni-datetime-picker>
</view>
<!-- time -->
<view v-if="item.name=='times'" class="discount" :class="item.value.length ? '' : 'placeholder'">
<picker mode="time" :value="item.value" @change="bindTimeChange($event,index)"
:placeholder="item.tipConfig.value" :class="disabled == 1 ? 'disabled' : ''">
<view class="acea-row row-between-wrapper">
<view v-if="item.value == ''">{{item.tipConfig.value}}</view>
<view v-else>{{item.value}}</view>
<text class='iconfont icon-jiantou'></text>
</view>
</picker>
</view>
<!-- timeranges -->
<view v-if="item.name=='timeranges'" class="discount acea-row row-between-wrapper" @click="getTimeranges(index)" :class="item.value.length ? '' : 'placeholder'">
<view v-if="item.value">{{item.value}}</view>
<view v-else>{{item.tipConfig.value}}</view>
<text class='iconfont icon-jiantou'></text>
</view>
<!-- select -->
<view v-if="item.name=='selects'" class="discount">
<picker :value="item.value" :range="item.wordsConfig.list" @change="bindSelectChange($event,index,item)" range-key="val" :class="disabled ? 'disabled' : ''">
<view class="acea-row row-between-wrapper">
<view v-if="item.value">{{item.value}}</view>
<view v-else class="placeholder">请选择</view>
<text class='iconfont icon-jiantou'></text>
</view>
</picker>
</view>
<!-- city -->
<view v-if="item.name=='citys'" class="discount" @click="changeRegion(index)" :class="disabled ? 'disabled' : ''">
<view class="acea-row row-middle row-right">
<view class="city" v-if="item.value == ''">{{item.tipConfig.value}}</view>
<view class="city item-select" v-else>{{item.value}}</view>
<text class='iconfont icon-jiantou'></text>
</view>
</view>
<!-- id -->
<view v-if="item.name=='texts' && item.valConfig.tabVal == 2" class="discount">
<input type="idcard" :placeholder="item.tipConfig.value" placeholder-class="placeholder" v-model="item.value" :disabled="disabled" />
</view>
<!-- phone -->
<view v-if="item.name=='texts' && item.valConfig.tabVal == 1" class="discount">
<input type="number" :placeholder="item.tipConfig.value" placeholder-class="placeholder" v-model="item.value" :disabled="disabled" />
</view>
<!-- img -->
<view v-if="item.name=='uploadPicture'" class="confirmImg" style="padding-bottom: 0;">
<view class='upload acea-row row-middle'>
<view class='pictrue' v-for="(items,indexs) in item.value" :key="indexs">
<image :src='items' mode="aspectFill"></image>
<view v-if="!disabled" class="close acea-row row-center-wrapper" @tap='DelPic(index,indexs)'>
<view class="iconfont icon-guanbi5"></view>
</view>
</view>
<view class='pictrue acea-row row-center-wrapper row-column' @tap.stop='uploadpic(index)'
v-if="item.value.length < item.numConfig.val && !disabled">
<text class='iconfont icon-icon25201'></text>
<view>上传图片</view>
</view>
</view>
</view>
</view>
</view>
</view>
<view class="footer">
<button v-if="activityData.time_status==-1" class='modifyBnt disabled'>已结束</button>
<button v-else-if="activityData.count==activityData.total && activityData.count!=0" class='modifyBnt disabled'>已报满</button>
<button v-else-if="disabled && activityData.time_status==1" class='modifyBnt' @click="listenerActionSheet">分享好友</button>
<block v-else>
<button v-if="activityData.time_status==1" class='modifyBnt' formType="submit">提交报名</button>
<button v-else-if="activityData.time_status==0" class='modifyBnt disabled'>未开始</button>
</block>
</view>
</view>
</form>
<timeranges :isShow='isShow' :time='timeranges' @confrim="confrim" @cancel="cancels"></timeranges>
<!--提交成功弹窗-->
<view class="success" v-if="isShowbox">
<view class="bg" @click="isShowbox=false"></view>
<view class="con">
<image :src="domain+'/static/images/sign_success.png'" mode=""></image>
<view class="title">报名成功</view>
<view class="text">感谢参与,您已完成报名!</view>
<view class="foot">
<navigator url="/pages/activity/my_registrate/index" hover-class='none' class="btn">查看详情</navigator>
<view class="btn" @click="listenerActionSheet">分享报名</view>
</view>
</view>
</view>
<!-- 分享按钮 -->
<view class="generate-posters acea-row row-middle" :class="posters ? 'on' : ''">
<!-- #ifndef MP -->
<button class="item" :class="weixinStatus ? 'item3' : ''" hover-class='none' v-if="weixinStatus === true" @click="H5ShareBox=true;posters=false;">
<view class="iconfont icon-weixin3"></view>
<view class="">发送给朋友</view>
</button>
<!-- #endif -->
<!-- #ifdef MP -->
<button class="item" :class="weixinStatus ? 'item3' : ''" open-type="share" hover-class='none' @click="goFriend">
<view class="iconfont icon-weixin3"></view>
<view class="">发送给朋友</view>
</button>
<!-- #endif -->
<button class="item" :class="weixinStatus ? 'item3' : ''" hover-class='none' @tap="goPoster">
<view class="iconfont icon-haibao"></view>
<view class="">生成海报</view>
</button>
</view>
<view class="mask" v-if="posters" @click="listenerActionClose"></view>
<!-- 发送给朋友图片 -->
<view class="share-box" v-if="H5ShareBox">
<image :src="`${domain}/static/images/share-info.png`" @click="H5ShareBox=false;"></image>
</view>
<areaWindow ref="areaWindow" :display="display" :address='addressInfoArea' :cityShow='cityShow' @submit="OnAreaAddress" @changeClose="changeAddressClose"></areaWindow>
<!--分享海报-->
<view class='distribution-posters' v-if="posterStatus">
<swiper :indicator-dots="indicatorDots" :autoplay="autoplay" :circular="circular" :interval="interval" :duration="duration"
@change="bindchange" previous-margin="40px" next-margin="40px">
<block v-for="(item,index) in spreadData" :key="index" class="img-list">
<swiper-item class="aaa">
<div class="box" ref="bill" :class="swiperIndex == index ? 'active' : 'quiet'">
<view class="user-msg">
<view class="user-code">
<image class="canvas" :style="{height:hg+'px'}" :src="posterImage[index]"
v-if="posterImage[index]"></image>
<canvas class="canvas" :style="{height:hg+'px'}" :canvas-id="'myCanvas'+ index"
v-else></canvas>
</view>
</view>
</div>
<!-- <image :src="item.wap_poster" class="slide-image" :class="swiperIndex == index ? 'active' : 'quiet'" mode='aspectFill' /> -->
</swiper-item>
</block>
</swiper>
<!-- #ifndef H5 -->
<view class='keep b-color' @click='savePosterPath(posterImage[swiperIndex])' :style="viewColor">保存海报</view>
<!-- #endif -->
</view>
</view>
</template>
<script>
// +----------------------------------------------------------------------
// | CRMEB [ CRMEB赋能开发者助力企业发展 ]
// +----------------------------------------------------------------------
// | Copyright (c) 2016~2024 https://www.crmeb.com All rights reserved.
// +----------------------------------------------------------------------
// | Licensed CRMEB并不是自由软件未经许可不能去掉CRMEB相关版权
// +----------------------------------------------------------------------
// | Author: CRMEB Team <admin@crmeb.com>
// +----------------------------------------------------------------------
const CACHE_CITY = {};
import { registrateDetail, registrateCreate, registrateRecordDetail,
registratePoster, imgToBase } from '@/api/user.js';
import shareScence from '@/libs/spread';
import { switchH5Login, getCity } from '@/api/api.js';
import { mapGetters } from "vuex";
import { toLogin } from '@/libs/login.js';
import { HTTP_REQUEST_URL } from '@/config/app';
import dayjs from "@/plugin/dayjs/dayjs.min.js";
import areaWindow from '@/components/areaWindow';
import timeranges from '@/components/timeranges';
export default {
data() {
return {
domain: HTTP_REQUEST_URL,
userInfo: {},
activityData: {},
formData: {},
loginType: 'h5', //app.globalData.loginType
activity_id: "",
isShowbox: false,
selectIndex:0,
timerangesIndex:0,
newImg: [],
display: false,
cityShow: 2,
addressInfoArea: [],
timeranges: [],
mp_is_new: this.$Cache.get('MP_VERSION_ISNEW') || false,
posters: false,
weixinStatus: false,
posterStatus: false,
H5ShareBox: false,
disabled: false,
isShow:false,
imgUrls: [],
indicatorDots: false,
posterImageStatus: true,
circular: false,
autoplay: false,
interval: 3000,
duration: 500,
swiperIndex: 0,
spreadList: [],
spid: "",
poster: '',
spreadData: [{}], //新海报数据
nickName: "",
siteName: "",
mpUrl: "",
canvasImageUrl: '',
posterImage: [],
//二维码参数
codeShow: false,
cid: '1',
ifShow: true,
val: "", // 要生成的二维码值
size: 200, // 二维码大小
unit: 'upx', // 单位
background: '#FFF', // 背景色
foreground: '#000', // 前景色
pdground: '#32dbc6', // 角标色
icon: '', // 二维码图标
iconsize: 40, // 二维码图标大小
lv: 3, // 二维码容错级别 一般不用设置,默认就行
onval: true, // val值变化时自动重新生成二维码
loadMake: true, // 组件加载完成后自动生成二维码
src: '', // 二维码生成后的图片地址或base64
codeSrc: "",
wd: 225,
hg: 500
};
},
components: {
areaWindow,
timeranges,
},
computed:{
...mapGetters(['isLogin','viewColor','keyColor']),
},
watch: {
},
onLoad(option) {
this.activity_id = option.id
this.spid = option.spid
let current = (dayjs(new Date(Number(new Date().getTime()))).format('HH:mm')).split(':');
let currentArray = current;
currentArray.push(0);
let arrayNew = [];
[...currentArray,...current].forEach(item=>{
arrayNew.push(Number(item))
})
this.timeranges = arrayNew;
if (this.isLogin) {
this.registrateDetail();
shareScence(this.spid,this.isLogin)
}else{
toLogin()
}
},
onShow() {
},
/**
* 用户点击右上角分享
*/
// #ifdef MP
onShareAppMessage: function() {
let that = this;
that.$set(that, 'actionSheetHidden', !that.actionSheetHidden);
return {
title: that.activityData.activity_name || '',
imageUrl: that.activityData.pic || '',
path: '/activity/registrate_activity/index?id=' + that.activity_id + '&spid=' + that.uid,
}
},
onShareTimeline: function() {
let that = this;
that.$set(that, 'actionSheetHidden', !that.actionSheetHidden);
return {
title: that.activityData.activity_name || '',
query: {
id: that.activity_id,
spid: that.uid
},
imageUrl: that.activityData.pic || ''
}
},
// #endif
methods: {
/*判断时间大小*/
compareTime(time) {
var date1 = new Date(time);
var date2 = new Date();
if (date1 > date2) {
return true;
} else if (date1 <= date2) {
return false;
}
},
formatDate(date){
let year = date.getFullYear();
let month = date.getMonth()+1;
let day = date.getDate();
let H = date.getHours();
let M = date.getMinutes();
let S = date.getSeconds();
month = month < 10 ?'0'+ month : month;
day = day < 10 ?'0'+ day : day;
H = H < 10 ?'0'+ H : H;
M = M < 10 ?'0'+ M : M;
S = S < 10 ?'0'+ S : S;
return year+'.'+month+'.'+day +'.'+H +':'+M;
},
/**
* 获取表单数据详情
*/
registrateDetail: function() {
let that = this;
uni.showLoading()
registrateDetail(that.activity_id).then(res => {
uni.hideLoading()
let data = res.data;
if(data.activity_related_id){
that.disabled = true
that.getRecordDetail(data.activity_related_id)
}else{
that.$set(that, 'activityData', data);
that.disabled = that.compareTime(data.end_time) ? false : true
if(that.disabled){
return this.$util.Tips({
title: '活动已结束'
}, {
tab: 3,
url: 1
})
}
if(data.systemForm&&data.systemForm.value){
let formData = that.objToArr(data.systemForm.value)
that.filterData(formData)
}else{
return this.$util.Tips({
title: '关联表单已被删除'
}, {
tab: 3,
url: 1
})
}
}
}).catch(err => {
uni.hideLoading();
return this.$util.Tips({
title: err
}, {
tab: 3,
url: 1
})
})
},
getRecordDetail(id){
let that = this
registrateRecordDetail(id).then(res => {
uni.hideLoading()
let data = res.data;
that.$set(that, 'activityData', data.activity);
let formData = that.objToArr(data.form_value)
formData.forEach((item, index)=>{
for(var i in data.value){
if(item['key'] == i){
item.value = data.value[i]
if(item['name']=='checkboxs' || item['name']=='radios'){
let valueList = data.value[i].split(',')
item['wordsConfig']['list'].forEach((list,idx)=>{
valueList.forEach((val,i)=>{
if(list['val'] == val){
item['wordsConfig']['list'][idx]['show'] = true
}
})
})
}
}
}
})
function sortNumber(a, b) {
return a.timestamp - b.timestamp;
}
formData.sort(sortNumber);
that.$set(that, 'formData', formData);
}).catch(err => {
uni.hideLoading();
return that.$util.Tips({
title: err
}, {
tab: 3,
url: 1
})
})
},
filterData(formData){
let that = this;
formData.forEach((item, index, arr)=>{
that.$set(item, 'value', "");
CACHE_CITY[index] = ''; //清空省市区
if(item.name == 'texts'){
if(item.defaultValConfig.value){
item.value = item.defaultValConfig.value
}else{
item.value = ''
}
}else if(item.name == 'radios'){
item.value = item.wordsConfig.list[0].val
}else if(item.name == 'uploadPicture'){
item.value = [];
}else if(item.name == 'dateranges'){
if(item.valConfig.tabVal==0){
if(item.valConfig.tabData==0){
let obj = dayjs(new Date(Number(new Date().getTime()))).format('YYYY-MM-DD');
item.value = [obj,obj]
}else{
let data1 = dayjs(new Date(Number(new Date(item.valConfig.specifyDate[0]).getTime()))).format('YYYY-MM-DD');
let data2 = dayjs(new Date(Number(new Date(item.valConfig.specifyDate[1]).getTime()))).format('YYYY-MM-DD');
item.value = [data1,data2];
}
}else{
item.value = [];
}
}else{
if(['times','dates','timeranges'].indexOf(item.name) != -1){
if(item.valConfig.tabVal==0){
if(item.valConfig.tabData==0){
if(item.name == 'times'){
item.value = dayjs(new Date(Number(new Date().getTime()))).format('HH:mm');
}else if(item.name == 'dates'){
item.value = dayjs(new Date(Number(new Date().getTime()))).format('YYYY-MM-DD');
}else{
let current = dayjs(new Date(Number(new Date().getTime()))).format('HH:mm');
item.value = current+' - '+current;
}
}else{
if(item.name == 'times' || item.name == 'dates'){
item.value = item.valConfig.specifyDate;
}else{
item.value = item.valConfig.specifyDate[0]+' - '+item.valConfig.specifyDate[1];
}
}
}else{
item.value = '';
}
}else if(item.name == 'city'){
item.value = '';
}else{
item.value = '';
}
}
})
function sortNumber(a, b) {
return a.timestamp - b.timestamp;
}
formData.sort(sortNumber);
that.$set(that, 'formData', formData);
},
// 对象转数组
objToArr(data) {
let obj = Object.keys(data);
let m = obj.map(key => data[key]);
return m;
},
// 单选
radioChange(e, index, item){
this.formData[index].value = item.wordsConfig.list[e.detail.value].val
},
clickTextArea() {
this.$refs.textarea.focus()
},
bindDateChange(e, index) {
this.formData[index].value = e.target.value
this.$forceUpdate()
},
bindTimeChange(e, index) {
this.formData[index].value = e.target.value
},
bindSelectChange(e, index, item) {
this.$set(this.formData[index], 'value', item.wordsConfig.list[e.detail.value].val);
},
getTimeranges(index){
this.isShow = true
this.timerangesIndex = index
},
confrim(e){
this.isShow = false;
this.formData[this.timerangesIndex].value = e.time;
let arrayNew = [];
e.val.forEach(item=>{
arrayNew.push(Number(item))
})
this.timeranges = arrayNew;
},
cancels(){
this.isShow = false;
},
// 多选
checkboxChange(e, index, item){
let obj = e.detail.value;
let val = '';
item.wordsConfig.list.forEach((j,jindex)=>{
obj.forEach(x=>{
if(jindex == x){
val = val +(val?',':'') + j.val;
}
})
})
this.formData[index].value = val
},
OnAreaAddress(address){
let addr = '';
addr = address.map(v=>v.name).join('/');
this.formData[this.timerangesIndex].value = addr;
CACHE_CITY[this.timerangesIndex] = address;
},
changeRegion(index){
if(!this.formData[index].value){
this.addressInfoArea = [];
}
this.timerangesIndex = index;
this.cityShow = Number(this.formData[index].valConfig.tabVal) + 1;
this.display = true;
if(CACHE_CITY[index]){
this.addressInfoArea = CACHE_CITY[index];
}
},
// 关闭地址弹窗;
changeAddressClose: function() {
this.display = false;
},
/**上传文件*/
uploadpic: function(index) {
let that = this;
this.$util.uploadImageOne('upload/image', function(res) {
that.newImg.push(res.data.path);
that.$set(that.formData[index], 'value', that.newImg);
});
},
/**
* 删除图片
*
*/
DelPic: function(index, indexs) {
let that = this,
pic = this.formData[index].value;
that.formData[index].value.splice(indexs, 1);
that.$set(that.formData[index], 'value', that.formData[index].value);
},
/**
* 提交修改
*/
formSubmit: function(e) {
let that = this,parmas={};
if(!that.isLogin){
toLogin()
}else{
for (var i = 0; i < that.formData.length; i++) {
let data = that.formData[i]
if (['radios'].indexOf(data.name) == -1 && (data.titleShow.val || (['uploadPicture','dateranges'].indexOf(data.name) == -1 && data.value && data.value.trim()))) {
if ((data.name === 'texts' && data.valConfig.tabVal == 0) || ['dates','times','selects','citys','checkboxs'].indexOf(data.name) != -1) {
if (!data.value || (data.value && !data.value.trim())) {
return that.$util.Tips({
title: `请选择${data.titleConfig.value}`
});
}
}
if(data.name === 'timeranges'){
if(!data.value){
return that.$util.Tips({
title: `请选择${data.titleConfig.value}`
});
}
}
if (data.name === 'dateranges') {
if (!data.value.length) {
return that.$util.Tips({
title: `请选择${data.titleConfig.value}`
});
}
}
if (data.name === 'texts' && data.valConfig.tabVal == 4) {
if (data.value <= 0) {
return that.$util.Tips({
title: `请填写大于0的${data.titleConfig.value}`
});
}
}
if (data.name === 'texts' && data.valConfig.tabVal == 3) {
if (!/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/.test(data.value)) {
return that.$util.Tips({
title: `请填写正确的${data.titleConfig.value}`
});
}
}
if (data.name === 'texts' && data.valConfig.tabVal == 1) {
if (!/^1(3|4|5|7|8|9|6)\d{9}$/i.test(data.value)) {
return that.$util.Tips({
title: `请填写正确的${data.titleConfig.value}`
});
}
}
if (data.name === 'texts' && data.valConfig.tabVal == 2) {
if (!
/^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/i
.test(data.value)) {
return that.$util.Tips({
title: `请填写正确的${data.titleConfig.value}`
});
}
}
if (data.name === 'uploadPicture') {
if (!data.value.length) {
return that.$util.Tips({
title: `请上传${data.titleConfig.value}`
});
}
}
}
parmas[data.key]=data.value
}
}
uni.showLoading({
title: '提交中',
mask: true
});
registrateCreate(that.activity_id,parmas).then(res => {
uni.hideLoading();
that.isShowbox = true;
}).catch(err => {
uni.hideLoading();
return that.$util.Tips({
title: err
});
});
},
/**
* 分享打开
*
*/
listenerActionSheet: function() {
if (this.isLogin == false) {
toLogin()
} else {
// #ifdef H5
if (this.$wechat.isWeixin() === true) {
this.weixinStatus = true;
}
// #endif
this.posters = !this.posters;
}
},
// 分享关闭
listenerActionClose: function() {
this.posters = false;
},
bindchange(e) {
this.swiperIndex = e.detail.current;
},
async goPoster() {
var that = this;
that.posters = false;
that.posterStatus = true;
this.isShowbox = false;
this.$nextTick(() => {
let selector = uni.createSelectorQuery().select('.aaa');
selector.fields({
size: true
}, data => {
console.log(data)
this.wd = data.width
this.hg = data.height
}).exec();
})
await this.getPosters()
},
//获取图片
async getPosters() {
let that = this
let rqData = {
id: that.activityData.activity_id,
// #ifdef MP
type: 'routine',
// #endif
// #ifndef MP
type: 'h5',
// #endif
}
let res = await registratePoster(that.activityData.activity_id)
that.spreadData = res.data.poster
that.nickName = res.data.nickname
// #ifdef MP || APP-PLUS
let mpUrl = await that.downloadFilestoreImage(res.data.qrcode)
// #endif
// #ifdef H5 || APP-PLUS
let qrCode = await that.imgToBase(res.data.qrcode)
// #endif
uni.showLoading({
title: '海报生成中',
mask: true
});
for (let i = 0; i < res.data.poster.length; i++) {
let arr2
// #ifdef MP || APP-PLUS
arr2 = [mpUrl, await that.downloadFilestoreImage(res.data.poster[i])]
// #endif
// #ifdef H5
let img = await that.imgToBase(res.data.poster[i])
arr2 = [qrCode, img]
// #endif
that.$util.userPosterCanvas(arr2, res.data.nickname, res.data.mark, i, that.wd, that.hg, (tempFilePath) => {
that.$set(that.posterImage, i, tempFilePath);
});
uni.hideLoading();
}
},
async imgToBase(url) {
let res = await imgToBase({
image: url
})
return res.data.image
},
//图片转符合安全域名路径
downloadFilestoreImage(url) {
return new Promise((resolve, reject) => {
let that = this;
uni.downloadFile({
url: url,
success: function(res) {
resolve(res.tempFilePath);
},
fail: function() {
return that.$util.Tips({
title: ''
});
}
});
})
},
savePosterPath(url) {
let that = this;
// #ifdef MP
uni.getSetting({
success(res) {
if (!res.authSetting['scope.writePhotosAlbum']) {
uni.authorize({
scope: 'scope.writePhotosAlbum',
success() {
uni.saveImageToPhotosAlbum({
filePath: url,
success: function(res) {
that.$util.Tips({
title: '保存成功',
icon: 'success'
});
},
fail: function(res) {
that.$util.Tips({
title: '保存失败'
});
}
});
}
});
} else {
uni.saveImageToPhotosAlbum({
filePath: url,
success: function(res) {
that.$util.Tips({
title: '保存成功',
icon: 'success'
});
},
fail: function(res) {
that.$util.Tips({
title: '保存失败'
});
}
});
}
}
});
// #endif
// #ifdef APP-PLUS
uni.saveImageToPhotosAlbum({
filePath: url,
success: function(res) {
that.$util.Tips({
title: '保存成功',
icon: 'success'
});
},
fail: function(res) {
that.$util.Tips({
title: '保存失败'
});
}
});
// #endif
},
// 小程序关闭分享弹窗;
goFriend: function() {
this.posters = false;
// this.H5ShareBox = true
},
}
}
</script>
<style scoped lang="scss">
/deep/radio .wx-radio-input.wx-radio-input-checked,
/deep/uni-radio .uni-radio-input.uni-radio-input-checked {
border: 1px solid var(--view-theme)!important;
background-color: var(--view-theme)!important;
}
/deep/checkbox .uni-checkbox-input.uni-checkbox-input-checked,
/deep/checkbox .wx-checkbox-input.wx-checkbox-input-checked {
border: 1px solid var(--view-theme)!important;
background-color: var(--view-theme)!important;
color: #fff!important;
}
.personal-data{
padding-bottom: 150rpx;
padding-bottom: calc(150rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
padding-bottom: calc(150rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
min-height: 100vh;
}
.personal-data .activity-pic{
display: flex;
align-items: center;
justify-content: center;
.image{
width: 100%;
}
}
.personal-data .wrapper {
background-color: #fff;
width: 710rpx;
border-radius: 16rpx;
margin: 0 auto;
position: relative;
top: -20rpx;
+.wrapper{
margin-top: 20rpx;
}
}
.form-wrapper{
pointer-events: none;
}
.personal-data .wrapper .text-info{
padding: 30rpx;
>view{
+view{
margin-top: 30rpx;
}
}
.activity-name{
justify-content: space-between;
.title{
width: 580rpx;
color: #282828;
font-size: 32rpx;
font-weight: bold;
}
}
.share{
text-align: center;
color: #666666;
font-size: 18rpx;
cursor: pointer;
.icon-fenxiang4{
display: block;
color: #282828;
font-size: 34rpx;
margin: 0 0 3rpx 0;
}
}
.iconfont{
margin-right: 17rpx;
}
.activity-item{
display: flex;
align-items: center;
}
}
.personal-data .wrapper .text-info .iconfont{
color: #666666;
}
.personal-data .wrapper .text-info .info{
color: #282828;
&.info-theme{
color: var(--view-theme);
}
}
.personal-data .wrapper .text-info .acea-info{
width: 600rpx;
text-align: justify;
word-break: break-all;
}
.personal-data .wrapper .item .name {
position: relative;
width: 190rpx;
}
.personal-data .wrapper .item {
padding: 27rpx 30rpx;
font-size: 28rpx;
color: #282828;
position: relative;
&::after{
content: "";
width: 670rpx;
border-bottom: 1px solid #eee;
position: absolute;
bottom: 0;
}
}
.personal-data .wrapper .disabled{
pointer-events: none;
}
.personal-data .wrapper .item.on{
padding: 16rpx 30rpx;
align-items: baseline;
}
.personal-data .wrapper .item.on3{
align-items: baseline;
}
.personal-data .wrapper .item .discount {
color: #282828;
font-size: 30rpx;
}
.personal-data .wrapper .item.on .discount,
.personal-data .wrapper .item.on3 .discount{
width: 460rpx;
text-align: right;
}
.personal-data .wrapper .item .item-select{
color: #282828;
}
.personal-data .wrapper .item.on3 .discount .city{
width: 400rpx;
color: #ccc;
&.item-select{
color: #282828;
}
}
.personal-data .wrapper .item .discount input {
text-align: right;
width: 450rpx;
}
.personal-data .wrapper .item .discount .iconfont {
color: #BBBBBB;
font-size: 28rpx;
margin-left: 15rpx;
}
.personal-data .wrapper .item .discount .num {
font-size: 32rpx;
margin-right: 20rpx;
}
.personal-data .wrapper .item .discount .radio{
margin: 0 22rpx 0 22rpx;
padding: 10rpx 0;
}
.personal-data .wrapper .item .discount .radio /deep/uni-checkbox .uni-checkbox-input{
border-radius: 0;
}
.personal-data .wrapper .item textarea {
background-color: #f9f9f9;
width: 650rpx;
height: 140rpx;
border-radius: 3rpx;
margin-top: 30rpx;
padding: 25rpx 28rpx;
box-sizing: border-box;
}
.personal-data .wrapper .item .placeholder {
color: #ccc;
font-size: 30rpx;
}
.asterisk{
color: red;
}
.footer{
background: #ffffff;
width: 750rpx;
height: 126rpx;
height: calc(126rpx+ constant(safe-area-inset-bottom)); ///兼容 IOS<11.2/
height: calc(126rpx + env(safe-area-inset-bottom)); ///兼容 IOS>11.2/
display: flex;
align-items: center;
justify-content: center;
position: fixed;
left: 0;
bottom: 0;
}
.personal-data .modifyBnt {
font-size: 32rpx;
color: var(--view-theme);
background-color: #ffffff;
border: 1px solid var(--view-theme);
width: 690rpx;
height: 90rpx;
border-radius: 50rpx;
text-align: center;
line-height: 90rpx;
&.disabled{
color: #ffffff;
background-color: #BBBBBB;
border-color: #BBBBBB;
}
}
.success {
z-index: 10;
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
.bg {
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, .5);
}
.con {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
width: 520rpx;
height: 526rpx;
background: #fff;
border-radius: 10rpx;
font-size: 34rpx;
color: #282828;
image {
width: 214rpx;
height: 180rpx;
}
.title{
color: #282828;
font-size: 32rpx;
font-weight: bold;
}
.text{
color: #999999;
font-size: 26rpx;
margin-top: 30rpx;
}
.foot {
height: 78rpx;
border-top: 1px solid #EAEAEA;
display: flex;
align-items: center;
justify-content: center;
width: 100%;
position: absolute;
bottom: 0;
left: 0;
.btn{
color: #999999;
font-size: 26rpx;
width: 50%;
text-align: center;
height: 78rpx;
display: flex;
align-items: center;
justify-content: center;
+.btn{
color: #E93323;
position: relative;
&::before{
content: "";
display: block;
width: 1px;
height: 78rpx;
background: #EAEAEA;
position: absolute;
left: 0;
top: 0;
}
}
}
}
}
}
.generate-posters {
width: 100%;
height: 170rpx;
background-color: #fff;
position: fixed;
left: 0;
bottom: 0;
z-index: 301;
transform: translate3d(0, 100%, 0);
transition: all 0.3s cubic-bezier(0.25, 0.5, 0.5, 0.9);
border-top: 1rpx solid #eee;
}
.generate-posters.on {
transform: translate3d(0, 0, 0);
}
.generate-posters .item {
/* #ifdef H5 */
flex: 50%;
/* #endif */
/* #ifndef H5 */
flex: 33.33%;
/* #endif */
text-align: center;
font-size: 30rpx;
&.item3{
flex: 33.33%;
}
}
.generate-posters .item .iconfont {
font-size: 80rpx;
color: #5eae72;
}
.generate-posters .item .iconfont.icon-haibao {
color: #5391f1;
}
.generate-posters .item .iconfont.icon-fuzhikouling1 {
color: #FBB324;
}
.distribution-posters{
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: #a3a3a3;
}
.canvas {
width: 100%;
position: absolute;
top: 0;
left: 0;
}
.box {
width: 100%;
height: 100%;
position: relative;
border-radius: 18rpx;
overflow: hidden;
.user-msg {
position: absolute;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
.user-code {
width: 100%;
display: flex;
align-items: center;
justify-content: center;
justify-content: space-between;
image {
width: 100%;
}
}
}
}
.img-list {
margin-right: 40px;
}
.distribution-posters swiper {
width: 100%;
height: 1000rpx;
position: relative;
margin-top: 40rpx;
}
.distribution-posters .slide-image {
width: 100%;
height: 100%;
margin: 0 auto;
border-radius: 15rpx;
}
.distribution-posters /deep/.active {
transform: none;
transition: all 0.2s ease-in 0s;
}
.distribution-posters /deep/ .quiet {
transform: scale(0.8333333);
transition: all 0.2s ease-in 0s;
}
.distribution-posters .keep {
font-size: 30rpx;
color: #fff;
width: 600rpx;
height: 80rpx;
border-radius: 50rpx;
text-align: center;
line-height: 80rpx;
margin: 38rpx auto;
background-color: var(--view-theme);
}
.share-box {
z-index: 1000;
position: fixed;
left: 0;
top: 0;
width: 100%;
height: 100%;
image {
width: 100%;
height: 100%;
}
}
</style>