优化一系列

This commit is contained in:
王创世 2025-06-17 16:51:43 +08:00
parent d3089285fb
commit d7fdf23901
20 changed files with 1733 additions and 1512 deletions

View File

@ -22,7 +22,7 @@
<span class="first-name white-space">{{detail.title}}</span> <span class="first-name white-space">{{detail.title}}</span>
<view class="rbot flex align-items"> <view class="rbot flex align-items">
<image src="/static/center/address.png" mode="" style="width: 32rpx;height: 32rpx;margin-right: 20rpx;"></image> <image src="/static/center/address.png" mode="" style="width: 32rpx;height: 32rpx;margin-right: 20rpx;"></image>
<span class="white-space">{{detail.address_detail}}</span> <span class="white-space">{{detail.address}}{{detail.address_detail}}</span>
</view> </view>
</view> </view>
</view> </view>
@ -507,7 +507,7 @@
width: 430rpx; width: 430rpx;
// height: 77rpx; // height: 77rpx;
font-family: PingFang SC, PingFang SC; font-family: PingFang SC, PingFang SC;
font-weight: 400; font-weight: 600;
font-size: 28rpx; font-size: 28rpx;
color: #323232; color: #323232;
// margin-left: 16rpx; // margin-left: 16rpx;
@ -695,12 +695,12 @@
// height: 1100rpx; // height: 1100rpx;
.popup_tk{ .popup_tk{
font-size: 42rpx;font-weight: 800;margin: 12rpx 0 24rpx 0;height: 120rpx; font-size: 42rpx;font-weight: 800;margin: 12rpx 0 24rpx 0;
text-align: center; text-align: center;
} }
.popup-content{ .popup-content{
height: 700rpx; height: 700rpx;
margin-bottom: 140rpx; margin-bottom: 75rpx;
// overflow-y: auto; // overflow-y: auto;
} }
.popup-content-item{ .popup-content-item{

View File

@ -5,7 +5,7 @@
<view class="con-center w-100 flex justify-center flex-column align-items flex-start"> <view class="con-center w-100 flex justify-center flex-column align-items flex-start">
<view class="first-box flex flex-start flex-column justify-start"> <view class="first-box flex flex-start flex-column justify-start">
<view class="flex align-items justify-center"> <view class="flex align-items justify-center" @click="toDetail">
<image class="head_img" :src="info.detail.images[0]" mode=""></image> <image class="head_img" :src="info.detail.images[0]" mode=""></image>
<view style="margin-left: 20rpx;"> <view style="margin-left: 20rpx;">
<view class="flex align-items"> <view class="flex align-items">
@ -187,7 +187,7 @@
<view class="first-image flex align-items space-between" style="width: 100%;margin-top: 30rpx;"> <view class="first-image flex align-items space-between" style="width: 100%;margin-top: 30rpx;">
<view class="flex" style="align-items: center;"> <view class="flex" style="align-items: center;">
<image src="/static/center/address.png" mode="" class="icon-size"></image> <image src="/static/center/address.png" mode="" class="icon-size"></image>
<text>{{ info.detail.address_detail }}</text> <text>{{ info.detail.address }}{{ info.detail.address_detail }}</text>
</view> </view>
</view> </view>
</view> </view>
@ -231,7 +231,7 @@
<view class="first-image flex align-items space-between" style="width: 100%;margin-top: 30rpx;"> <view class="first-image flex align-items space-between" style="width: 100%;margin-top: 30rpx;">
<view class="flex" style="align-items: center;"> <view class="flex" style="align-items: center;">
<image src="/static/center/address.png" mode="" class="icon-size"></image> <image src="/static/center/address.png" mode="" class="icon-size"></image>
<text>{{ info.detail.address_detail }}</text> <text>{{ info.detail.address }}{{ info.detail.address_detail }}</text>
</view> </view>
</view> </view>
</view> </view>
@ -299,6 +299,11 @@ export default {
} }
}, },
methods: { methods: {
toDetail() {
uni.navigateTo({
url: '/packageA/center/detail?id=' + this.info.activity_id
});
},
SuccessDo(type) { SuccessDo(type) {
uni.$u.http.post('/api/school.newworker.activity.order/shop_confirmation', { uni.$u.http.post('/api/school.newworker.activity.order/shop_confirmation', {
order_no: this.id, order_no: this.id,
@ -483,7 +488,7 @@ export default {
width: 440rpx; width: 440rpx;
height: 39rpx; height: 39rpx;
font-family: PingFang SC, PingFang SC; font-family: PingFang SC, PingFang SC;
font-weight: 400; font-weight: 600;
font-size: 28rpx; font-size: 28rpx;
color: #323232; color: #323232;
// margin-left: 16rpx; // margin-left: 16rpx;

View File

@ -305,8 +305,8 @@
<u-popup @touchmove.native.stop.prevent :closeOnClickOverlay="false" :closeable="false" :show="show" :round="10" mode="center" <u-popup @touchmove.native.stop.prevent :closeOnClickOverlay="false" :closeable="false" :show="show" :round="10" mode="center"
@close="close" @open="open" :custom-style="popupStylezf"> @close="close" @open="open" :custom-style="popupStylezf">
<span style="font-size: 40rpx;font-weight: 800;height: 120rpx;">用户参与须知</span> <span style="font-size: 40rpx;font-weight: 800;height: 120rpx;">用户参与须知</span>
<scroll-view ref="scrollView" :scroll-top="scrollTop" :show-scrollbar='true' <scroll-view ref="scrollView" :scroll-top="scrollTop"
@scrolltolower="handleScroll" scroll-y="true" style="height: 800rpx;margin-bottom: 24rpx;"> @scrolltolower="handleScroll" :scroll-y="true" style="height: 800rpx;margin-bottom: 24rpx;">
<view class="popup flex align-items flex-column"> <view class="popup flex align-items flex-column">
<rich-text style="text-align: justify;" :nodes="Negotiate"></rich-text> <rich-text style="text-align: justify;" :nodes="Negotiate"></rich-text>
</view> </view>
@ -408,8 +408,8 @@ export default {
qrUrl: '', qrUrl: '',
is_collect: 0, is_collect: 0,
popupStylezf: { popupStylezf: {
width: '642rpx', width: '620rpx',
padding: '24rpx 24rpx 42rpx 24rpx', padding: '50rpx 40rpx 40rpx 40rpx',
height: '984rpx', height: '984rpx',
margin: '0 auto', // margin: '0 auto', //
display: 'flex', display: 'flex',
@ -1135,7 +1135,7 @@ export default {
width: 430rpx; width: 430rpx;
// height: 77rpx; // height: 77rpx;
font-family: PingFang SC, PingFang SC; font-family: PingFang SC, PingFang SC;
font-weight: 400; font-weight: 600;
font-size: 28rpx; font-size: 28rpx;
color: #323232; color: #323232;
// margin-left: 16rpx; // margin-left: 16rpx;

View File

@ -2,7 +2,7 @@
<view class="detail_all"> <view class="detail_all">
<view class="nav"> <view class="nav">
<u-navbar :is-back="true" leftIconColor="#000000" :autoBack="true" :bgColor="background" <u-navbar :is-back="true" leftIconColor="#000000" :autoBack="true" :bgColor="background"
title="详情" :titleStyle="{color:'#000000',fontSize:'32rpx'}"></u-navbar> title="详情" :titleStyle="{color:'#000000',fontSize:'34rpx',fontWeight:'bold'}"></u-navbar>
</view> </view>
<view class="box flex justify-start flex-column align-items" :class="overlay ? 'no-scroll' : ''"> <view class="box flex justify-start flex-column align-items" :class="overlay ? 'no-scroll' : ''">
<view class="swiper"> <view class="swiper">
@ -110,7 +110,7 @@
</view> </view>
<view class="third-center"> <view class="third-center">
<view class="v_html"> <view class="v_html">
<rich-text :nodes="detail.content"></rich-text> <rich-text style="white-space: pre-line;" :nodes="detail.content"></rich-text>
</view> </view>
<image mode="widthFix" class="imgs" v-for="(item, index) in detail.images" :key="index" :src="item"> <image mode="widthFix" class="imgs" v-for="(item, index) in detail.images" :key="index" :src="item">
</image> </image>
@ -1236,10 +1236,8 @@
height: 100%; height: 100%;
.v_html { .v_html {
word-wrap: break-word; font-size: 28rpx;
word-break: break-all; line-height: 44rpx;
font-size: 26rpx;
line-height: 42rpx;
} }
.imgs { .imgs {

View File

@ -2,7 +2,7 @@
<view class="detail_all"> <view class="detail_all">
<view class="nav"> <view class="nav">
<u-navbar :is-back="true" leftIconColor="#000000" :autoBack="true" :bgColor="background" title="详情" <u-navbar :is-back="true" leftIconColor="#000000" :autoBack="true" :bgColor="background" title="详情"
:titleStyle="{color:'#000000',fontSize:'32rpx'}"></u-navbar> :titleStyle="{color:'#000000',fontSize:'34rpx',fontWeight:'bold'}"></u-navbar>
</view> </view>
<view class="box flex justify-start flex-column align-items" :class="overlay ? 'no-scroll' : ''"> <view class="box flex justify-start flex-column align-items" :class="overlay ? 'no-scroll' : ''">
<view class="swiper"> <view class="swiper">
@ -162,7 +162,7 @@
</view> </view>
<view class="third-center"> <view class="third-center">
<view class="v_html"> <view class="v_html">
<rich-text class="rich_class" :nodes="detail.content"></rich-text> <rich-text style="white-space: pre-line;" :nodes="detail.content"></rich-text>
</view> </view>
<image mode="widthFix" class="imgs" v-for="(item, index) in detail.images" :key="index" :src="item"> <image mode="widthFix" class="imgs" v-for="(item, index) in detail.images" :key="index" :src="item">
</image> </image>
@ -1176,8 +1176,8 @@
margin: 0 auto; margin: 0 auto;
.v_html { .v_html {
word-wrap: break-word; font-size: 28rpx;
word-break: break-all; line-height: 44rpx;
} }
.imgs { .imgs {

View File

@ -81,6 +81,7 @@
uni.$u.http.get('/api/school.newworker.activity.order/order_list', { uni.$u.http.get('/api/school.newworker.activity.order/order_list', {
params: { params: {
activity_id: that.id, activity_id: that.id,
status:'2,3,9',
page: 1, page: 1,
limit: 1000, limit: 1000,
}, },

View File

@ -7,10 +7,17 @@
@touchstart="touchStart" @touchstart="touchStart"
@touchmove="touchMove" @touchmove="touchMove"
@touchend="touchEnd" @touchend="touchEnd"
:style="{ width: cropperOpt.width, height: cropperOpt.height, backgroundColor: 'rgba(0, 0, 0, 0.8)' }" :style="{ width: cropperOpt.width, height: cropperOpt.height }"
canvas-id="cropper" canvas-id="cropper"
id="cropper" id="cropper"
></canvas> ></canvas>
<view class="cropper-circle-mask" v-show="circularCrop" :style="{
left: `${cropperOpt.cut.x}px`,
top: `${cropperOpt.cut.y}px`,
width: `${cropperOpt.cut.width}px`,
height: `${cropperOpt.cut.height}px`,
zIndex: 100
}"></view>
<canvas <canvas
class="cropper" class="cropper"
:disable-scroll="true" :disable-scroll="true"
@ -19,7 +26,8 @@
top: `-${cropperOpt.width * cropperOpt.pixelRatio}px`, top: `-${cropperOpt.width * cropperOpt.pixelRatio}px`,
left: `-${cropperOpt.height * cropperOpt.pixelRatio}px`, left: `-${cropperOpt.height * cropperOpt.pixelRatio}px`,
width: `${cropperOpt.width * cropperOpt.pixelRatio}px`, width: `${cropperOpt.width * cropperOpt.pixelRatio}px`,
height: `${cropperOpt.height * cropperOpt.pixelRatio}` height: `${cropperOpt.height * cropperOpt.pixelRatio}`,
}" }"
canvas-id="targetId" canvas-id="targetId"
id="targetId" id="targetId"
@ -48,42 +56,15 @@ export default {
default() { default() {
return { return {
lineWidth: 4, lineWidth: 4,
borderColor: 'rgb(245, 245, 245)', borderColor: 'rgb(245, 245, 245)'
mask: 'rgba(0, 0, 0, 0.35)'
}; };
} }
},
// 使
circularCrop: {
type: Boolean,
default: true
} }
// // rpx
// rectWidth: {
// type: [String, Number],
// default: 400
// },
// // rpx
// rectHeight: {
// type: [String, Number],
// default: 400
// },
// // rpx
// destWidth: {
// type: [String, Number],
// default: 400
// },
// // rpx
// destHeight: {
// type: [String, Number],
// default: 400
// },
// // "png""jpg"
// fileType: {
// type: String,
// default: 'jpg',
// },
// //
// // H5使
// quality: {
// type: [Number, String],
// default: 1
// }
}, },
data() { data() {
return { return {
@ -95,7 +76,7 @@ export default {
cropper: '', cropper: '',
cropperOpt: { cropperOpt: {
id: 'cropper', id: 'cropper',
targetId: 'targetCropper', targetId: 'targetId',
pixelRatio: 1, pixelRatio: 1,
width: 0, width: 0,
height: 0, height: 0,
@ -108,9 +89,7 @@ export default {
height: this.originWidth height: this.originWidth
}, },
boundStyle: { boundStyle: {
lineWidth: uni.upx2px(this.boundStyle.lineWidth), lineWidth: uni.upx2px(this.boundStyle.lineWidth)
mask: this.boundStyle.mask,
color: this.boundStyle.borderColor
} }
}, },
// //
@ -119,7 +98,7 @@ export default {
// px // px
rectWidth: 200, rectWidth: 200,
// 'png'"jpg" // 'png'"jpg"
fileType: 'jpg', fileType: 'png', // png
src: '' // src: '' //
}; };
}, },
@ -143,6 +122,17 @@ export default {
} }
this.rectWidth = Number(option.rectWidth); this.rectWidth = Number(option.rectWidth);
if (option.fileType) this.fileType = option.fileType; if (option.fileType) this.fileType = option.fileType;
// PNG
if (this.circularCrop && this.fileType === 'jpg') {
this.fileType = 'png';
}
//
if (this.circularCrop) {
this.cropperOpt.boundStyle.isCircle = true;
}
// //
this.cropper = new WeCropper(this.cropperOpt) this.cropper = new WeCropper(this.cropperOpt)
.on('ready', ctx => { .on('ready', ctx => {
@ -186,29 +176,138 @@ export default {
getCropperImage(isPre = false) { getCropperImage(isPre = false) {
if (!this.src) return this.$toast('请先选择图片再裁剪'); if (!this.src) return this.$toast('请先选择图片再裁剪');
// 使 directCircleCrop
if (this.circularCrop) {
// 使
const size = 300;
// 1. 使weCropper
const options = {
destWidth: size,
destHeight: size,
fileType: 'png'
};
this.cropper.getCropperImage(options, (rectPath, err) => {
if (err) {
console.error('矩形裁剪失败:', err);
return;
}
console.log('矩形裁剪成功,路径:', rectPath);
// 2.
const ctx = uni.createCanvasContext('targetId');
//
ctx.clearRect(0, 0, size, size);
//
ctx.setFillStyle('rgba(0,0,0,0)');
ctx.fillRect(0, 0, size, size);
//
ctx.save();
ctx.beginPath();
ctx.arc(size/2, size/2, size/2, 0, 2 * Math.PI);
ctx.clip();
//
ctx.drawImage(rectPath, 0, 0, size, size);
ctx.restore();
//
ctx.draw(false, () => {
setTimeout(() => {
uni.canvasToTempFilePath({
canvasId: 'targetId',
x: 0,
y: 0,
width: size,
height: size,
destWidth: size,
destHeight: size,
fileType: 'png',
backgroundColor: 'transparent',
success: (res) => {
console.log('圆形裁剪成功:', res.tempFilePath);
if (isPre) {
uni.previewImage({
urls: [res.tempFilePath]
});
} else {
uni.$emit('uAvatarCropper', res.tempFilePath);
uni.navigateBack();
}
},
fail: (err) => {
console.error('圆形裁剪失败:', err);
// 使
if (isPre) {
uni.previewImage({
urls: [rectPath]
});
} else {
uni.$emit('uAvatarCropper', rectPath);
uni.navigateBack();
}
}
});
}, 300);
});
});
return;
}
//
this.useOriginalCrop(isPre);
},
// 使
useOriginalCrop(isPre = false) {
// 使
const size = 300; //
let cropper_opt = { let cropper_opt = {
destHeight: Number(this.destWidth), // uni.canvasToTempFilePath destHeight: size,
destWidth: Number(this.destWidth), destWidth: size,
fileType: this.fileType fileType: this.fileType
}; };
console.log('使用原始裁剪方法,参数:', cropper_opt);
try {
this.cropper.getCropperImage(cropper_opt, (path, err) => { this.cropper.getCropperImage(cropper_opt, (path, err) => {
console.log('裁剪回调被调用', path, err);
if (err) { if (err) {
console.error('裁剪出错:', err);
uni.showModal({ uni.showModal({
title: '温馨提示', title: '温馨提示',
content: err.message content: err.message
}); });
} else { } else {
console.log('裁剪成功,路径:', path);
if (isPre) { if (isPre) {
console.log('预览图片');
uni.previewImage({ uni.previewImage({
current: '', // http current: '', // http
urls: [path] // http urls: [path] // http
}); });
} else { } else {
console.log('返回上一页');
uni.$emit('uAvatarCropper', path); uni.$emit('uAvatarCropper', path);
uni.navigateBack(); uni.navigateBack();
} }
} }
}); });
} catch (error) {
console.error('调用 getCropperImage 出错:', error);
uni.showModal({
title: '裁剪出错',
content: error.message || '未知错误'
});
}
}, },
uploadTap() { uploadTap() {
const self = this; const self = this;
@ -223,7 +322,7 @@ export default {
self.cropper.pushOrign(this.src); self.cropper.pushOrign(this.src);
} }
}); });
} },
} }
}; };
</script> </script>
@ -242,6 +341,15 @@ export default {
z-index: 11; z-index: 11;
} }
.cropper-circle-mask {
position: absolute;
border-radius: 50%;
box-shadow: 0 0 0 999px rgba(0, 0, 0, 0.35);
z-index: 12;
pointer-events: none; /* Allow touches to pass through to the canvas underneath */
box-sizing: border-box;
}
.cropper-buttons { .cropper-buttons {
background-color: #000000; background-color: #000000;
color: #eee; color: #eee;
@ -270,8 +378,12 @@ export default {
} }
.cropper-buttons .upload, .cropper-buttons .upload,
.cropper-buttons .getCropperImage { .cropper-buttons .getCropperImage,
width: 50%; .cropper-buttons .test,
.cropper-buttons .test2,
.cropper-buttons .test3,
.cropper-buttons .test4 {
width: 16.6%;
text-align: center; text-align: center;
} }
@ -280,6 +392,22 @@ export default {
padding-left: 50rpx; padding-left: 50rpx;
} }
.cropper-buttons .test {
color: #ffeb3b;
}
.cropper-buttons .test2 {
color: #4caf50;
}
.cropper-buttons .test3 {
color: #ff9800;
}
.cropper-buttons .test4 {
color: #e91e63;
}
.cropper-buttons .getCropperImage { .cropper-buttons .getCropperImage {
text-align: right; text-align: right;
padding-right: 50rpx; padding-right: 50rpx;

View File

@ -18,7 +18,7 @@
{{ dateWeeks(item.detail.start_time) + '-'+dateWeekends(item.detail.end_time)}}</span> {{ dateWeeks(item.detail.start_time) + '-'+dateWeekends(item.detail.end_time)}}</span>
</view> </view>
<span class="line"></span> <span class="line"></span>
<view style="margin:30rpx;" class="flex" @click="toInfo(item.activity_id)"> <view style="margin:30rpx;" class="flex" @click="toDetail(item.id, item.order_no, item.status)">
<image class="tut" :src="item.detail.images[0]"></image> <image class="tut" :src="item.detail.images[0]"></image>
<view style="margin-left: 20rpx;width: 80%;"> <view style="margin-left: 20rpx;width: 80%;">
<view> <view>

View File

@ -32,8 +32,8 @@
<view :class="['hot', 'flex', 'flex-column', status == 0 || status == -2 ? 'wsh_hot' : '']"> <view :class="['hot', 'flex', 'flex-column', status == 0 || status == -2 ? 'wsh_hot' : '']">
<view class="content flex align-items flex-column"> <view class="content flex align-items flex-column">
<view class="flex flex-column w-100 bbb" style="position: relative;" <view class="flex flex-column w-100 bbb" style="position: relative;"
v-for="(item, index) in hotList" :key="index" @click.stop="detail(item.id)"> v-for="(item, index) in hotList" :key="index" >
<view v-if="status != -2"> <view v-if="status != -2" @click.stop="detail(item.id)">
<image v-if="item.auth_status == 0" src="/static/my/daishenhe.png" <image v-if="item.auth_status == 0" src="/static/my/daishenhe.png"
style="width: 134rpx; height: 106rpx;position: absolute;right: 0;"></image> style="width: 134rpx; height: 106rpx;position: absolute;right: 0;"></image>
<image v-if="item.auth_status == 2" src="/static/my/wtg.png" <image v-if="item.auth_status == 2" src="/static/my/wtg.png"
@ -110,7 +110,7 @@
</view> </view>
</view> </view>
</view> </view>
<view v-if="status == -2"> <view v-if="status == -2" @click.stop="detail(item.activity_id)">
<view class="flex" style="margin-top: 30rpx"> <view class="flex" style="margin-top: 30rpx">
<view class="right flex flex-column" style="align-items: self-start;padding-left: 15px;"> <view class="right flex flex-column" style="align-items: self-start;padding-left: 15px;">
<view class="flex flex-column"> <view class="flex flex-column">
@ -676,7 +676,7 @@
.shenhe { .shenhe {
width: 94%; width: 94%;
position: fixed; position: fixed;
top: 85rpx; top: 75rpx;
//background: #f7f7f7; //background: #f7f7f7;
background: #f7f7f7; background: #f7f7f7;
z-index: 100; z-index: 100;

View File

@ -856,7 +856,7 @@
width: 440rpx; width: 440rpx;
height: 39rpx; height: 39rpx;
font-family: PingFang SC, PingFang SC; font-family: PingFang SC, PingFang SC;
font-weight: 400; font-weight: 600;
font-size: 28rpx; font-size: 28rpx;
color: #323232; color: #323232;
// margin-left: 16rpx; // margin-left: 16rpx;

View File

@ -101,135 +101,52 @@
v-if="detailAny.detail.feel == 0 && (detailAny.status == 9 || detailAny.status == 2 || detailAny.status == 3) && (detail.status==4|| detail.status==5)"> v-if="detailAny.detail.feel == 0 && (detailAny.status == 9 || detailAny.status == 2 || detailAny.status == 3) && (detail.status==4|| detail.status==5)">
<text> 申请售后 </text> <text> 申请售后 </text>
</view> </view>
<view @click="paidcancel(detailAny.id)" class="footer-right flex justify-center align-items" <view @click="openCancels" class="footer-right flex justify-center align-items"
v-if="detailAny.detail.feel == 0 && detailAny.status == 2 && (detail.status==1 || detail.status==2 || detail.status==3)"> v-if="detailAny.detail.feel == 0 && detailAny.status == 2 && (detail.status==1 || detail.status==2 || detail.status==3)">
<text> 取消订单 </text> <text>取消订单</text>
</view> </view>
<view @click="cancelOrder(detailAny.id)" class="footer-right flex justify-center align-items" <view @click="openCancels" class="footer-right flex justify-center align-items"
v-if="detailAny.detail.feel == 1 && detailAny.status == 2 && (detail.status==1 || detail.status==2 || detail.status==3)"> v-if="detailAny.detail.feel == 1 && detailAny.status == 2 && (detail.status==1 || detail.status==2 || detail.status==3)">
<text> 取消订单 </text> <text>取消订单</text>
</view> </view>
</view> </view>
<!-- 二次确认弹窗 -->
<u-popup :show="cancelsShow" mode="center" :round="10" :zIndex="99999" :custom-style="popupStyleOk"
<u-popup :show="buyShow" mode="center" :round="10" :zIndex="99999" :custom-style="popupStyle" :safeAreaInsetBottom="false" :closeable="false">
@close="buyClose" @open="buyOpen" :safeAreaInsetBottom="false" :closeable="true">
<view class="popupBox flex justify-start align-items flex-column"> <view class="popupBox flex justify-start align-items flex-column">
<view class="pop-header flex align-items flex-column flex-start"> <view class="pop-header flex align-items flex-column flex-start">
<view class="name white-space">{{ detail.title }}</view> <span class="name white-space">是否取消参与活动</span>
<view class="price"> <span class="price">
<text v-if="detail.feel == 0">{{ detail.price }}</text> 多次取消参与会限制账号权限请谨慎操作
<text v-if="detail.feel == 1">公益</text> </span>
</view> </view>
<!-- <image src="../../static/center/buy.png" mode="" style="width: 168rpx; height: 48rpx;"> <view
</image> --> style="display: flex;align-items: center;justify-content: space-between;width: 89%;gap: 30rpx;padding-top: 120rpx;">
</view> <view @click="closeCancels" class="btn_2">关闭</view>
<view class="popup flex-column"> <view @click="paidcancel(detailAny.id)"
<view class="first-image flex align-items" style="margin: 16rpx 0;"> v-if="detailAny.detail.feel == 0 && detailAny.status == 2 && (detail.status==1 || detail.status==2 || detail.status==3)"
<image src="../../static/center/Alarm.png" mode="" class="icon-size"></image> class="btn_1">确认取消</view>
<text>{{ formattedTime.formattedTime }} (共计{{ formattedTimeList.length }})</text> <view @click="cancelOrder(detailAny.id)"
</view> v-if="detailAny.detail.feel == 1 && detailAny.status == 2 && (detail.status==1 || detail.status==2 || detail.status==3)"
<view class="first-image flex align-items"> class="btn_1">确认取消</view>
<image src="../../static/center/address.png" mode="" class="icon-size"></image>
<text>{{ detail.address_detail }}</text>
</view>
<!-- <image :src="detail.headimage" mode="" style="width: 200rpx; height: 140rpx;"></image>
<view class="popur-right flex flex-column">
<text class="name white-space">{{detail.title}}</text>
<text class="address">地址:{{detail.address_detail}}</text>
<text class="date">开始时间:{{detail.start_time_text}}</text>
<text class="time">结束时间:{{detail.end_time_text}}</text>
<text class="line-row"></text>
<text class="price">
课程价格:
<text v-if="detail.feel == 0">{{detail.price}}</text>
<text v-if="detail.feel == 1">免费</text>
</text>
</view> -->
</view>
<view class="popup-footer flex " @click="buy()">
<text v-if="type == 1 && detail.feel == 0"> </text>
<text v-if="type == 1 && detail.feel == 1"> </text>
<!-- <image src="../../static/center/price.png" mode="" style="width: 642rpx;height: 80rpx;"></image> --> <!-- <image src="../../static/center/price.png" mode="" style="width: 642rpx;height: 80rpx;"></image> -->
<u-loading-icon :vertical="true" v-if="uloadingShow"></u-loading-icon> <!-- <u-loading-icon :vertical="true" v-if="uloadingShow"></u-loading-icon> -->
</view> </view>
</view> </view>
</u-popup> </u-popup>
<!-- 分享海报 -->
<u-overlay :show="overlay" class="pos">
<view class="btnList">
<text class="save" @click.stop="save()"> </text>
<!-- <text class="sharePoster" @click.stop="sharePoster()">
</text> -->
<button open-type="share" class="no-border-button" plain="true">
<text> </text>
</button>
</view>
<!-- <view class="Poster" style="z-index: 9999;height: 1230rpx;">
<text class="posterClose" @click.stop="overlay = false">
<image src="../../static/center/close.png" mode="" style="width: 64rpx;height: 64rpx;"></image>
</text>
<image :src="path" mode="widthFix" style="width: 690rpx;height: 1230rpx;"></image>
<l-painter isCanvasToTempFilePath ref="painter" @success="path = $event" hidden
css="width: 750rpx;height:1230rpx; padding-bottom: 40rpx; background-image: url('https://testy.hschool.com.cn//uploads/20241219/6f46474364fe7ae36295cb8d96854b52.png')">
<l-painter-image :src="userInfo.avatar"
css="margin-left: 40rpx; margin-top: 100rpx; width: 90rpx; height: 90rpx; border-radius: 50%;" />
<l-painter-view css="margin-top: 100rpx; padding-left: 20rpx; display: inline-block">
<l-painter-text :text="userInfo.realname || userInfo.nickname"
css="display: block; padding-bottom: 10rpx; color: #181818; font-size: 34rpx; fontWeight: bold" />
<l-painter-text text="邀请您一起上课" css="color: #7A7A7A; font-size: 24rpx" />
</l-painter-view>
<l-painter-view
css="margin-left: 35rpx; margin-top: 24rpx; padding: 32rpx; box-sizing: border-box; background: #fff; border-radius: 16rpx; width: 690rpx; box-shadow: 0 20rpx 58rpx rgba(0,0,0,.15)">
<l-painter-image :src="detail.headimage"
css="object-fit: cover; object-position: 50% 50%; width: 626rpx; height: 448rpx; border-radius: 12rpx;" />
<l-painter-view css=" width: 626rpx;display: flex;alignItems: center;">
<l-painter-view>
<l-painter-view
css="margin-top: 32rpx; color: #FF0000; font-weight: bold; font-size: 28rpx; line-height: 1em;">
<l-painter-text text="¥" css="vertical-align: bottom;font-size: 42rpx"
v-if="detail.feel == 0" />
<l-painter-text :text="detail.price" css="vertical-align: bottom; font-size: 58rpx"
v-if="detail.feel == 0" />
<l-painter-text text="免费" css="vertical-align: bottom;font-size: 42rpx"
v-if="detail.feel == 1" />
</l-painter-view>
<l-painter-view css="margin-top: 24rpx;">
<l-painter-text :text="formattedTitle" css="color: #343434;font-size: 36rpx;" />
</l-painter-view>
<l-painter-text
css="line-clamp: 2; color: #333333; line-height: 1.8em; font-size: 26rpx;display: block; width: 380rpx; padding-right:32rpx; box-sizing: border-box"
:text="'讲师:' + detail.teacher.name"></l-painter-text>
<l-painter-text
css="line-clamp: 2; color: #333333; line-height: 1.8em; font-size: 26rpx;display: block;margin-bottom:30rpx; width: 380rpx; padding-right:32rpx; box-sizing: border-box"
:text="detail.address_detail"></l-painter-text>
</l-painter-view>
<l-painter-view css="margin-top: 24rpx;">
<l-painter-qrcode css="width: 200rpx; height: 200rpx;" :text="qrUrl"></l-painter-qrcode>
</l-painter-view>
</l-painter-view>
</l-painter-view>
</l-painter>
</view> -->
</u-overlay>
</view> </view>
</view> </view>
</template> </template>
<script> <script>
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import qrcodeSwiper from '@/packageA/qrcodeSwiper.vue' import qrcodeSwiper from '@/packageA/qrcodeSwiper.vue'
import { import {
dateWeek dateWeek
} from '../../utils/dateFormat' } from '../../utils/dateFormat'
export default { export default {
components: { components: {
qrcodeSwiper qrcodeSwiper
}, },
@ -262,6 +179,7 @@ export default {
data() { data() {
return { return {
style: { style: {
// //
img: 'width: 100%' img: 'width: 100%'
@ -286,6 +204,15 @@ export default {
people: {}, people: {},
qrUrl: '', qrUrl: '',
is_collect: 0, is_collect: 0,
popupStyleOk: {
width: '640rpx',
height: '414rpx',
margin: '0 auto', //
display: 'flex',
justifyContent: 'flex-start',
alignItems: 'center',
borderRadius: '50rpx'
},
popupStyle: { popupStyle: {
width: '690rpx', width: '690rpx',
height: '716rpx', height: '716rpx',
@ -308,7 +235,8 @@ export default {
}, },
// qrList:[],// // qrList:[],//
// //
qrimages: [] qrimages: [],
cancelsShow: false,
}; };
}, },
@ -345,6 +273,12 @@ export default {
}, },
methods: { methods: {
openCancels() {
this.cancelsShow = true;
},
closeCancels() {
this.cancelsShow = false;
},
toInfo(id) { toInfo(id) {
uni.navigateTo({ uni.navigateTo({
url: "/packageA/center/detail?id=" + id url: "/packageA/center/detail?id=" + id
@ -355,6 +289,7 @@ export default {
uni.showLoading({ uni.showLoading({
title: '处理中...' title: '处理中...'
}); });
this.cancelsShow = false;
uni.$u.http.post('/api/school.newactivity.order/paidcancel', { uni.$u.http.post('/api/school.newactivity.order/paidcancel', {
order_no: this.order_no order_no: this.order_no
}).then(res => { }).then(res => {
@ -384,14 +319,19 @@ export default {
icon: 'none', icon: 'none',
duration: 2000 duration: 2000
}); });
uni.hideLoading(); //uni.hideLoading();
} }
}).catch(error => { }).catch(error => {
uni.hideLoading(); uni.showToast({
title: error.msg,
icon: 'none',
duration: 2000
});
}); });
}, },
// (0) // (0)
cancelOrder() { cancelOrder() {
this.cancelsShow = false;
uni.$u.http.post('/api/school.newactivity.order/freecancel', { uni.$u.http.post('/api/school.newactivity.order/freecancel', {
order_no: this.order_no order_no: this.order_no
}).then(res => { }).then(res => {
@ -418,7 +358,7 @@ export default {
duration: 2000 duration: 2000
}); });
} }
}).catch(error => { }); }).catch(error => {});
}, },
// //
// generateAllQRCodes() { // generateAllQRCodes() {
@ -474,8 +414,8 @@ export default {
title: '请登录', title: '请登录',
icon: 'none', icon: 'none',
duration: 2000, duration: 2000,
complete: function () { complete: function() {
setTimeout(function () { setTimeout(function() {
uni.switchTab({ uni.switchTab({
url: '/pages/my/index', url: '/pages/my/index',
}); });
@ -559,7 +499,7 @@ export default {
duration: 2000 duration: 2000
}) })
} }
}).catch(error => { }); }).catch(error => {});
}, },
// 0 1 2 3 // 0 1 2 3
@ -624,8 +564,8 @@ export default {
title: res.msg, title: res.msg,
icon: 'none', icon: 'none',
duration: 2000, duration: 2000,
complete: function () { complete: function() {
setTimeout(function () { setTimeout(function() {
uni.reLaunch({ uni.reLaunch({
url: "/packageA/my/makeList?status=" + -1 url: "/packageA/my/makeList?status=" + -1
}) })
@ -659,7 +599,7 @@ export default {
latitude: parseFloat(latitude), latitude: parseFloat(latitude),
longitude: parseFloat(longitude), longitude: parseFloat(longitude),
name: name, name: name,
success: function () { success: function() {
console.log('success'); console.log('success');
} }
}); });
@ -818,7 +758,7 @@ export default {
timeSelected(time) { timeSelected(time) {
return this.selectedTime === time; return this.selectedTime === time;
}, },
moveScroll() { }, moveScroll() {},
// //
getMoney() { getMoney() {
uni.$u.http.post('/api/school.newactivity.order/confirm', { uni.$u.http.post('/api/school.newactivity.order/confirm', {
@ -858,8 +798,8 @@ export default {
title: '创建成功', title: '创建成功',
icon: 'success', icon: 'success',
duration: 2000, duration: 2000,
complete: function () { complete: function() {
setTimeout(function () { setTimeout(function() {
uni.redirectTo({ uni.redirectTo({
url: "/packageA/my/orderList?status=" + 3 url: "/packageA/my/orderList?status=" + 3
}) })
@ -927,43 +867,43 @@ export default {
}); });
}, },
}, },
} }
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
.detail_all { .detail_all {
background-color: #f7f7f7; background-color: #f7f7f7;
} }
.w-100 { .w-100 {
width: 100%; width: 100%;
} }
.flex { .flex {
display: flex; display: flex;
} }
.flex-start { .flex-start {
align-items: flex-start; align-items: flex-start;
} }
.justify-center { .justify-center {
justify-content: center; justify-content: center;
} }
.align-items { .align-items {
align-items: center; align-items: center;
} }
.flex-column { .flex-column {
flex-flow: column; flex-flow: column;
} }
.justify-start { .justify-start {
justify-content: start; justify-content: start;
} }
.white-space { .white-space {
overflow: hidden; overflow: hidden;
/* 确保超出容器的文本被隐藏 */ /* 确保超出容器的文本被隐藏 */
white-space: nowrap; white-space: nowrap;
@ -971,34 +911,34 @@ export default {
text-overflow: ellipsis; text-overflow: ellipsis;
/* 使用省略号表示被截断的文本 */ /* 使用省略号表示被截断的文本 */
width: 100%; width: 100%;
} }
.con-center { .con-center {
// background: white; // background: white;
border-radius: 44rpx; border-radius: 44rpx;
position: relative; position: relative;
margin-top: 30rpx; margin-top: 30rpx;
} }
.space-between { .space-between {
justify-content: space-between; justify-content: space-between;
} }
.swiper { .swiper {
width: 100%; width: 100%;
height: 580rpx; height: 580rpx;
} }
.box { .box {
position: relative; position: relative;
margin: 0 30rpx; margin: 0 30rpx;
} }
.first-box { .first-box {
width: 690rpx; width: 690rpx;
background: #FFFFFF; background: #FFFFFF;
padding: 30rpx; padding: 30rpx;
@ -1044,9 +984,9 @@ export default {
border-radius: 8rpx; border-radius: 8rpx;
} }
} }
} }
.second-box { .second-box {
width: 690rpx; width: 690rpx;
height: 64rpx; height: 64rpx;
border-radius: 16rpx 16rpx 16rpx 16rpx; border-radius: 16rpx 16rpx 16rpx 16rpx;
@ -1071,9 +1011,9 @@ export default {
margin: 0 22rpx 0 4rpx; margin: 0 22rpx 0 4rpx;
} }
} }
} }
.third { .third {
width: 100%; width: 100%;
background: #ffffff; background: #ffffff;
margin-top: 20rpx; margin-top: 20rpx;
@ -1130,23 +1070,23 @@ export default {
} }
.line { .line {
width: 630rpx; width: 630rpx;
height: 1rpx; height: 1rpx;
background: #F0F0F0; background: #F0F0F0;
margin: 30rpx 0; margin: 30rpx 0;
} }
.icon-size { .icon-size {
width: 32rpx; width: 32rpx;
height: 32rpx; height: 32rpx;
margin-right: 12rpx; margin-right: 12rpx;
} }
.footer { .footer {
width: 100%; width: 100%;
height: 166rpx; height: 166rpx;
margin-top: 50rpx; margin-top: 50rpx;
@ -1179,21 +1119,24 @@ export default {
color: #9C9C9C; color: #9C9C9C;
} }
} }
} }
.popupBox {
.popupBox { width: 640rpx;
width: 690rpx; height: 414rpx;
height: 716rpx; background-image: url("https://naweigetetest2.hschool.com.cn/dyqc/confirm2.png");
background-size: 100%;
background-repeat: no-repeat;
border-radius: 44rpx;
.pop-header { .pop-header {
width: 100%; width: 100%;
background-image: url("/static/center/bg.png");
background-repeat: no-repeat; background-repeat: no-repeat;
background-position: left bottom; background-position: left bottom;
height: 265rpx; margin-top: 50rpx;
text { span {
font-family: PingFang SC, PingFang SC; font-family: PingFang SC, PingFang SC;
font-weight: 400; font-weight: 400;
font-size: 20rpx; font-size: 20rpx;
@ -1201,31 +1144,30 @@ export default {
} }
.name { .name {
width: 594rpx; width: 288rpx;
height: 66rpx; height: 36rpx;
font-family: Source Han Sans CN, Source Han Sans CN; font-family: PingFang SC Bold, PingFang SC Bold;
font-weight: bold; font-weight: 600;
font-size: 44rpx; font-size: 36rpx;
color: #222222; color: #202020;
margin-top: 80rpx; line-height: 36rpx;
text-align: center;
font-style: normal;
text-transform: none;
} }
.price { .price {
width: 594rpx; width: 520rpx;
height: 66rpx; height: 68rpx;
font-family: Source Han Sans CN, Source Han Sans CN; margin-top: 30rpx;
font-weight: bold;
font-size: 44rpx;
color: #FF4810;
margin-top: 16rpx;
text {
font-family: PingFang SC, PingFang SC; font-family: PingFang SC, PingFang SC;
font-weight: 800; font-weight: 400;
font-size: 36rpx; font-size: 24rpx;
color: #FF2323; color: #202020;
line-height: 32rpx; line-height: 34rpx;
} text-align: center;
font-style: normal;
text-transform: none;
} }
} }
@ -1238,22 +1180,29 @@ export default {
.popup-footer { .popup-footer {
position: absolute; position: absolute;
left: 48rpx; left: 75rpx;
bottom: 48rpx; bottom: 60rpx;
text { span {
width: 594rpx; width: 230rpx;
height: 100rpx; height: 90rpx;
background: #222222; background: #323232;
border-radius: 200rpx 200rpx 200rpx 200rpx; border-radius: 200rpx 200rpx 200rpx 200rpx;
font-family: Source Han Sans CN, Source Han Sans CN; font-family: PingFang SC Regular, PingFang SC Regular;
font-weight: bold; font-weight: 400;
font-size: 32rpx; font-size: 32rpx;
color: #BEEE03; color: #BBFC5B;
display: flex; display: flex;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
.span1 {
background: rgba(193, 193, 193, 0.22);
color: #202020;
margin-right: 30rpx;
}
} }
@ -1261,43 +1210,11 @@ export default {
width: 642rpx; width: 642rpx;
height: 1rpx; height: 1rpx;
background: #F0F0F0; background: #F0F0F0;
//box-shadow: 1rpx 1rpx 0rpx 0rpx rgba(102, 102, 102, 0.25); box-shadow: 1rpx 1rpx 0rpx 0rpx rgba(102, 102, 102, 0.25);
//border-radius: 0rpx 0rpx 0rpx 0rpx; border-radius: 0rpx 0rpx 0rpx 0rpx;
} }
.times {
width: 93%;
.selectTime {
width: 288rpx;
height: 50rpx;
background: #FFFFFF;
border-radius: 12rpx 12rpx 12rpx 12rpx;
border: 1rpx solid #D9D9D9;
color: #4B4B4B;
font-family: 'PingFang SC', 'PingFang SC';
font-weight: 500;
font-size: 24rpx;
padding-left: 15rpx;
cursor: pointer;
margin: 24rpx 32rpx 0 0;
white-space: nowrap;
/* 防止文本换行 */
text-overflow: ellipsis;
/* 超出部分显示省略号 */
overflow: hidden;
/* 隐藏超出部分 */
text-align: left;
/* 文字靠左对齐 */
line-height: 50rpx;
/* 垂直居中对齐 */
box-sizing: border-box;
/* 确保 padding 和 border 不影响宽度和高度 */
display: inline-block;
/* 确保容器内文字正确对齐 */
}
}
.selectTime.selected { .selectTime.selected {
width: 288rpx; width: 288rpx;
@ -1312,9 +1229,9 @@ export default {
margin: 24rpx 32rpx 0 0; margin: 24rpx 32rpx 0 0;
} }
} }
.share { .share {
position: fixed; position: fixed;
color: #FFFFFF; color: #FFFFFF;
right: 0; right: 0;
@ -1324,9 +1241,9 @@ export default {
border-top-left-radius: 50px; border-top-left-radius: 50px;
border-bottom-left-radius: 50px; border-bottom-left-radius: 50px;
box-shadow: 0 0 20upx rgba(0, 0, 0, .09); box-shadow: 0 0 20upx rgba(0, 0, 0, .09);
} }
.cancel { .cancel {
width: 100vw; width: 100vw;
padding: 30rpx; padding: 30rpx;
text-align: center; text-align: center;
@ -1334,49 +1251,49 @@ export default {
color: red; color: red;
font-weight: bold; font-weight: bold;
font-size: 30rpx; font-size: 30rpx;
} }
.md-content { .md-content {
display: flex; display: flex;
flex-direction: row; flex-direction: row;
justify-content: center; justify-content: center;
align-items: center; align-items: center;
padding: 50rpx 0; padding: 50rpx 0;
background-color: white; background-color: white;
} }
.md-content-item { .md-content-item {
margin: 0 70rpx; margin: 0 70rpx;
position: relative; position: relative;
} }
.md-content-item image { .md-content-item image {
width: 100rpx; width: 100rpx;
height: 100rpx; height: 100rpx;
} }
.md-content-item view { .md-content-item view {
margin-top: 15rpx; margin-top: 15rpx;
font-size: 28rpx; font-size: 28rpx;
} }
.sharebtn { .sharebtn {
position: absolute; position: absolute;
top: 0; top: 0;
left: 0; left: 0;
right: 0; right: 0;
bottom: 0; bottom: 0;
opacity: 0; opacity: 0;
} }
.cu-modal { .cu-modal {
position: fixed; position: fixed;
bottom: 166rpx; bottom: 166rpx;
left: 0; left: 0;
z-index: 999999; z-index: 999999;
} }
.gj { .gj {
.title { .title {
font-family: PingFang SC, PingFang SC; font-family: PingFang SC, PingFang SC;
font-weight: 800; font-weight: 800;
@ -1427,9 +1344,9 @@ export default {
} }
} }
} }
} }
::v-deep ::-webkit-scrollbar { ::v-deep ::-webkit-scrollbar {
/*滚动条整体样式*/ /*滚动条整体样式*/
width: 4px !important; width: 4px !important;
height: 1px !important; height: 1px !important;
@ -1437,40 +1354,40 @@ export default {
background: #ccc !important; background: #ccc !important;
-webkit-appearance: auto !important; -webkit-appearance: auto !important;
display: block; display: block;
} }
::v-deep ::-webkit-scrollbar-thumb { ::v-deep ::-webkit-scrollbar-thumb {
/*滚动条里面小方块*/ /*滚动条里面小方块*/
border-radius: 10px !important; border-radius: 10px !important;
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2) !important; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2) !important;
background: #7b7979 !important; background: #7b7979 !important;
} }
::v-deep ::-webkit-scrollbar-track { ::v-deep ::-webkit-scrollbar-track {
/*滚动条里面轨道*/ /*滚动条里面轨道*/
// box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2) !important; // box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2) !important;
// border-radius: 10px !important; // border-radius: 10px !important;
background: #FFFFFF !important; background: #FFFFFF !important;
} }
.Poster { .Poster {
position: relative; position: relative;
top: 21rpx; top: 21rpx;
left: 30rpx; left: 30rpx;
width: 690rpx; width: 690rpx;
} }
.posterClose { .posterClose {
position: absolute; position: absolute;
right: 8rpx; right: 8rpx;
top: 8rpx; top: 8rpx;
} }
.pos { .pos {
position: relative; position: relative;
} }
.btnList { .btnList {
width: 690rpx; width: 690rpx;
position: absolute; position: absolute;
bottom: 150rpx; bottom: 150rpx;
@ -1493,18 +1410,18 @@ export default {
} }
.save {} .save {}
} }
.no-scroll { .no-scroll {
overflow: hidden; overflow: hidden;
height: 100vh; height: 100vh;
} }
::v-deep ._root { ::v-deep ._root {
padding: 0 10rpx; padding: 0 10rpx;
} }
.no-border-button { .no-border-button {
background-color: transparent; background-color: transparent;
/* 去掉背景色 */ /* 去掉背景色 */
border: none; border: none;
@ -1536,5 +1453,31 @@ export default {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
} }
} }
.btn_1 {
width: 100%;
height: 90rpx;
background: #323232;
border-radius: 198rpx 198rpx 198rpx 198rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
font-weight: 400;
font-size: 32rpx;
color: #BBFC5B;
line-height: 90rpx;
text-align: center;
}
.btn_2 {
width: 100%;
height: 90rpx;
background: #E2E2E2;
border-radius: 198rpx 198rpx 198rpx 198rpx;
font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
font-weight: 400;
font-size: 32rpx;
color: #999999;
line-height: 90rpx;
text-align: center;
}
</style> </style>

View File

@ -9,7 +9,7 @@
<view class="con-center w-100 flex justify-center flex-column align-items flex-start"> <view class="con-center w-100 flex justify-center flex-column align-items flex-start">
<view class="first-box flex flex-start flex-column justify-start"> <view class="first-box flex flex-start flex-column justify-start">
<view class="flex align-items justify-center"> <view class="flex align-items justify-center" @click="openInfo()">
<image class="head_img" v-if="detail.images.length > 0" :src="detail.images[0]" mode="" ></image> <image class="head_img" v-if="detail.images.length > 0" :src="detail.images[0]" mode="" ></image>
<view style="margin-left: 20rpx;"> <view style="margin-left: 20rpx;">
<view class="flex align-items"> <view class="flex align-items">
@ -167,7 +167,8 @@
background: '#ffffff00', background: '#ffffff00',
titleStyle: { titleStyle: {
color: '#000000', color: '#000000',
fontSize: '32rpx' fontSize: '32rpx',
fontWeight: 'bold'
}, },
status:null, status:null,
toptitle: '', toptitle: '',
@ -196,6 +197,11 @@
}, },
methods: { methods: {
openInfo(){
uni.navigateTo({
url: `/packageA/center/detail?id=${this.detail.activity_id}`
})
},
// //
service(id) { service(id) {
uni.navigateTo({ uni.navigateTo({

View File

@ -50,7 +50,7 @@
<view class="right"> <view class="right">
<view> <view>
<text v-if="bankInfo.withdrawal == null" <text v-if="bankInfo.withdrawal == null"
style="color: #9C9C9C;font-size: 26rpx;">认证</text> style="color: #9C9C9C;font-size: 26rpx;">设置</text>
<text v-if="bankInfo.withdrawal != null" style="font-size: 26rpx;">已认证</text> <text v-if="bankInfo.withdrawal != null" style="font-size: 26rpx;">已认证</text>
</view> </view>
<view><u-icon name="arrow-right"></u-icon></view> <view><u-icon name="arrow-right"></u-icon></view>

View File

@ -1,15 +1,17 @@
<template> <template>
<view class="box flex justify-center "> <view class="box">
<view class="center"> <view style="height: 1px;background-color: #eeeeee;width: 100%;"></view>
<!-- <span class="title">{{detail.title}}</span> --> <view class=" flex justify-center ">
<view> <view class="center">
<span class="title">{{detail.title}}</span>
<view style="margin-top: 15rpx;">
<!-- <u-parse :content="detail.desc" :selectable="true"></u-parse> --> <!-- <u-parse :content="detail.desc" :selectable="true"></u-parse> -->
<rich-text :nodes="detail.desc" selectable user-select></rich-text> <rich-text :nodes="detail.desc" selectable user-select></rich-text>
<view style="margin:16rpx 0;">{{detail.createtime_text}}</view> <view style="margin:16rpx 0;">{{detail.createtime_text}}</view>
</view> </view>
</view> </view>
</view>
</view> </view>
</template> </template>
@ -49,7 +51,7 @@
<style lang="scss" scoped> <style lang="scss" scoped>
.box { .box {
background: #f5f5f5; background: #ffffff;
width: 750rpx; width: 750rpx;
height: 100vh; height: 100vh;
} }
@ -92,10 +94,9 @@
} }
.center { .center {
margin-top: 42rpx;
width: 640rpx; width: 640rpx;
border-radius: 20rpx 20rpx 20rpx 20rpx; border-radius: 20rpx 20rpx 20rpx 20rpx;
padding: 25rpx; padding:50rpx 30rpx 30rpx 30rpx;
font-family: PingFang SC, PingFang SC; font-family: PingFang SC, PingFang SC;
font-weight: 500; font-weight: 500;
font-size: 32rpx; font-size: 32rpx;

View File

@ -1,7 +1,7 @@
<template> <template>
<view class="page"> <view class="page">
<view class="nav"> <view class="nav">
<u-navbar :titleStyle="{color:'#000000',fontSize:'32rpx'}" :is-back="true" leftIconColor="#000000" :autoBack="true" :bgColor="'#ffffff'" :title="title" <u-navbar :titleStyle="{color:'#000000',fontSize:'34rpx',fontWeight:'bold'}" :is-back="true" leftIconColor="#000000" :autoBack="true" :bgColor="'#ffffff'" :title="title"
></u-navbar> ></u-navbar>
</view> </view>
<view style="padding:30rpx;margin-top: 180rpx;" v-if="istype"> <view style="padding:30rpx;margin-top: 180rpx;" v-if="istype">

View File

@ -28,7 +28,7 @@
settleInfo.settled_amount }}</text> settleInfo.settled_amount }}</text>
</view> </view>
<view style="background-color: #eeeeee;height: 1px;width: 100%;margin-top: 20rpx;"></view> <view style="background-color: #eeeeee;height: 1px;width: 100%;margin-top: 20rpx;"></view>
<view style="line-height:40rpx;"> <view style="line-height:40rpx;padding-bottom: 200rpx;">
<view style="font-size: 24rpx;color: #000000;font-weight: 600;margin-top: 20rpx;"> <view style="font-size: 24rpx;color: #000000;font-weight: 600;margin-top: 20rpx;">
<view>1提现金额</view> <view>1提现金额</view>
<view style="text-indent: 2em;color: #FF4810;">本平台的提现操作默认将您当前可提现金额的全部款项一次性提现暂不支持部分提现</view> <view style="text-indent: 2em;color: #FF4810;">本平台的提现操作默认将您当前可提现金额的全部款项一次性提现暂不支持部分提现</view>
@ -50,6 +50,9 @@
<view style="text-indent: 2em;">如在提现过程中遇到任何问题或超过预计到账时间仍未收到款项请及时联系平台客服</view> <view style="text-indent: 2em;">如在提现过程中遇到任何问题或超过预计到账时间仍未收到款项请及时联系平台客服</view>
</view> </view>
</view> </view>
</view>
<view style="position: fixed;bottom: 0;width: 100%;background-color: #ffffff;padding: 20px 0px;">
<view class="btn_1" @click="withdraw()">确认提现</view> <view class="btn_1" @click="withdraw()">确认提现</view>
</view> </view>
</view> </view>
@ -176,7 +179,7 @@ export default {
} }
.btn_1 { .btn_1 {
width: 100%; width: 94%;
height: 90rpx; height: 90rpx;
background: #323232; background: #323232;
border-radius: 198rpx 198rpx 198rpx 198rpx; border-radius: 198rpx 198rpx 198rpx 198rpx;
@ -186,6 +189,6 @@ export default {
color: #BBFC5B; color: #BBFC5B;
line-height: 90rpx; line-height: 90rpx;
text-align: center; text-align: center;
margin-top: 70rpx; margin: 0 auto;
} }
</style> </style>

View File

@ -16,7 +16,7 @@
slot="center" slot="center"
@click="one" @click="one"
> >
<span style="padding-right: 20rpx;">系统消息</span> <span style="padding-right: 20rpx;font-size: 34rpx;font-weight: bold;">系统消息</span>
<u-icon <u-icon
size="19" size="19"
name="/static/clearicon.png" name="/static/clearicon.png"

View File

@ -19,7 +19,7 @@
<view class="row flex align-items textarea_fb" style="margin-top: 25rpx;"> <view class="row flex align-items textarea_fb" style="margin-top: 25rpx;">
<u--textarea v-model="form.content" :maxlength="800" <u--textarea :confirmType="null" v-model="form.content" :maxlength="800"
placeholder="描述一下活动的亮点、活动内容、推荐的人群、叫大家一起运动吧~" :height="120" placeholder="描述一下活动的亮点、活动内容、推荐的人群、叫大家一起运动吧~" :height="120"
placeholder-class="bttop"></u--textarea> placeholder-class="bttop"></u--textarea>
</view> </view>

View File

@ -3,7 +3,7 @@
<view class="nav"> <view class="nav">
<u-navbar :is-back="true" leftIconColor="#000000" :autoBack="true" :bgColor="'transparent'" <u-navbar :is-back="true" leftIconColor="#000000" :autoBack="true" :bgColor="'transparent'"
></u-navbar> :titleStyle="{color:'#000000',fontSize:'34rpx',fontWeight:'bold'}"></u-navbar>
</view> </view>
<view class="center flex flex-column align-items"> <view class="center flex flex-column align-items">

View File

@ -358,14 +358,25 @@
while (len-- > 0) args[len] = arguments[len + 1]; while (len-- > 0) args[len] = arguments[len + 1];
if (obj === void 0) obj = {}; if (obj === void 0) obj = {};
console.log('wxPromise 调用:', fn.name || '未知函数', '参数:', JSON.stringify(obj));
return new Promise(function(resolve, reject) { return new Promise(function(resolve, reject) {
obj.success = function(res) { obj.success = function(res) {
console.log('wxPromise 成功:', fn.name || '未知函数', '结果:', res);
resolve(res); resolve(res);
}; };
obj.fail = function(err) { obj.fail = function(err) {
console.error('wxPromise 失败:', fn.name || '未知函数', '错误:', err);
reject(err); reject(err);
}; };
obj.complete = function() {
console.log('wxPromise 完成:', fn.name || '未知函数');
};
try {
fn.apply(void 0, [obj].concat(args)); fn.apply(void 0, [obj].concat(args));
} catch (error) {
console.error('wxPromise 执行异常:', fn.name || '未知函数', '错误:', error);
reject(error);
}
}) })
} }
} }
@ -373,8 +384,27 @@
function draw(ctx, reserve) { function draw(ctx, reserve) {
if (reserve === void 0) reserve = false; if (reserve === void 0) reserve = false;
return new Promise(function(resolve) { console.log('开始绘制 canvas');
ctx.draw(reserve, resolve); return new Promise(function(resolve, reject) {
try {
if (!ctx) {
console.error('绘制失败: ctx 为空');
reject(new Error('绘制失败: ctx 为空'));
return;
}
// 直接绘制,不使用延时,避免额外问题
ctx.draw(reserve, function(res) {
console.log('绘制完成', res);
// 给一点时间让绘制完成
setTimeout(function() {
resolve(res);
}, 200);
});
} catch (error) {
console.error('绘制出错:', error);
reject(error);
}
}) })
} }
@ -420,7 +450,7 @@
// `decode` is designed to be fully compatible with `atob` as described in the // `decode` is designed to be fully compatible with `atob` as described in the
// HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob // HTML Standard. http://whatwg.org/html/webappapis.html#dom-windowbase64-atob
// The optimized base64-decoding algorithm used is based on @atks excellent // The optimized base64-decoding algorithm used is based on @atk's excellent
// implementation. https://gist.github.com/atk/1020396 // implementation. https://gist.github.com/atk/1020396
var decode = function(input) { var decode = function(input) {
input = String(input) input = String(input)
@ -907,6 +937,81 @@
fn = customOptions; fn = customOptions;
} }
// Check if circular crop is requested
var isCircular = customOptions && customOptions.shape === 'circle';
if (isCircular) {
// 使用更简单的方法实现圆形裁剪
console.log('使用简化方法进行圆形裁剪');
// 先使用普通方式裁剪出矩形
var rectOptions = Object.assign({}, canvasOptions);
// 确保有正确的输出尺寸
var destWidth = customOptions.destWidth || width;
var destHeight = customOptions.destHeight || height;
// 先获取矩形裁剪的临时文件
return canvasToTempFilePath.apply(null, [rectOptions])
.then(function(res) {
console.log('矩形裁剪完成,开始圆形处理');
var rectPath = res.tempFilePath;
// 创建新的画布进行圆形裁剪
var circleCanvas = self.targetCtx;
// 清空画布
circleCanvas.clearRect(0, 0, destWidth, destHeight);
// 创建圆形路径
circleCanvas.save();
circleCanvas.beginPath();
var centerX = destWidth / 2;
var centerY = destHeight / 2;
var radius = Math.min(destWidth, destHeight) / 2;
circleCanvas.arc(centerX, centerY, radius, 0, 2 * Math.PI);
circleCanvas.clip();
// 加载裁剪后的图片
return getImageInfo({ src: rectPath })
.then(function(imgInfo) {
console.log('加载裁剪图片信息:', imgInfo);
// 绘制到圆形区域
circleCanvas.drawImage(
rectPath,
0,
0,
imgInfo.width,
imgInfo.height,
0,
0,
destWidth,
destHeight
);
circleCanvas.restore();
// 绘制并导出 - 不再绘制边框
return draw(circleCanvas)
.then(function() {
var circleOptions = {
canvasId: targetId,
x: 0,
y: 0,
width: destWidth,
height: destHeight,
destWidth: destWidth,
destHeight: destHeight,
fileType: customOptions.fileType || 'png'
};
return canvasToTempFilePath.apply(null, [circleOptions]);
});
});
});
}
var arg = canvasOptions.componentContext ? var arg = canvasOptions.componentContext ?
[canvasOptions, canvasOptions.componentContext] : [canvasOptions, canvasOptions.componentContext] :
[canvasOptions]; [canvasOptions];
@ -1120,13 +1225,43 @@
self.setBoundStyle = function(ref) { self.setBoundStyle = function(ref) {
if (ref === void 0) ref = {}; if (ref === void 0) ref = {};
var color = ref.color; var color = ref.color;
if (color === void 0) color = '#04b00f'; if (color === void 0) color = '#ffffff';
var mask = ref.mask; var mask = ref.mask;
if (mask === void 0) mask = 'rgba(0, 0, 0, 0.3)'; if (mask === void 0) mask = 'rgba(0, 0, 0, 0)';
var lineWidth = ref.lineWidth; var lineWidth = ref.lineWidth;
if (lineWidth === void 0) lineWidth = 1; if (lineWidth === void 0) lineWidth = 1;
var isCircle = ref.isCircle;
if (isCircle === void 0) isCircle = true; // 默认使用圆形边框
var half = lineWidth / 2; var half = lineWidth / 2;
// Check if we want a circular boundary instead of rectangular
if (isCircle) {
// Calculate center and radius
var centerX = x + width / 2;
var centerY = y + height / 2;
var radius = width / 2; // Assuming width = height for a circle
// Draw the mask (everything outside the circle)
self.ctx.beginPath();
self.ctx.setFillStyle(mask);
// Draw a rectangle covering the entire canvas
self.ctx.fillRect(0, 0, boundWidth, boundHeight);
// Create a circular hole in the mask
self.ctx.beginPath();
self.ctx.arc(centerX, centerY, radius, 0, 2 * Math.PI);
self.ctx.setFillStyle('transparent');
self.ctx.fill();
// Draw the border circle
self.ctx.beginPath();
self.ctx.arc(centerX, centerY, radius, 0, 2 * Math.PI);
self.ctx.setStrokeStyle(color);
self.ctx.setLineWidth(lineWidth);
self.ctx.stroke();
} else {
// Original rectangular boundary code
var boundOption = [{ var boundOption = [{
start: { start: {
x: x - half, x: x - half,
@ -1203,6 +1338,7 @@
self.ctx.lineTo(op.step2.x, op.step2.y); self.ctx.lineTo(op.step2.x, op.step2.y);
self.ctx.stroke(); self.ctx.stroke();
}); });
}
}; };
} }