qingnianyexiao2.0/packageA/my/management.vue
2025-04-01 09:03:51 +08:00

726 lines
16 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 class="box flex justify-center align-items flex-column">
<view class="con-center flex flex-column justify-center align-items" style="margin-top: 24rpx;">
<view class="flex align-items" style="width: 100%;justify-content: flex-start;">
<view class="search flex align-items" style="width: 508rpx;">
<span class="dashed flex align-items justify-center">
<image src="../../static/center/search.png" mode=""></image>
</span>
<span class="line-search"></span>
<input type="text" placeholder="搜索您的预约课程" v-model="keywords" @input="onInput" class="input"
placeholder-class="plasty" />
</view>
<span class="searchBtn" @click.stop="addClass()">创建课程</span>
</view>
<view class="header flex align-items w-100" style="justify-content: space-between;">
<span class="s-header flex justify-center align-items" v-for="(item,index) in headers" :key="index"
:class="{ selected: headerSelected(item.status) }"
@click="selectheader(item.status)">{{item.text}}</span>
</view>
<span class="line"></span>
<!-- <view class="sort flex" style="width: 100%;padding: 20rpx 0;">
<JQ-orderBy @switchSort="switchSort" :size="size"></JQ-orderBy>
</view> -->
<view class="centerBox flex justify-start align-items flex-column">
<view class="flex w-100 center flex-column" style="align-items: center;" v-for="(item,index) in list"
:key="index" @click="toDetail(item.id,item.shop_id)">
<view class="flex" style="width: 690rpx;">
<image :src="item.headimage" mode=""
style="width: 280rpx; height: 200rpx;border-radius: 12rpx;"></image>
<view class="flex flex-column rightBox">
<span class="name">{{item.title}}</span>
<!-- <span class="line-row"></span> -->
<span class="minge">{{'开始时间 ' + item.start_time_text}}</span>
<span class="minge">{{'结束时间 ' + item.end_time_text}}</span>
<span class="price" v-if="item.feel == 0">课程价格 <span
style="color: #FF2323;">{{'¥' + item.price}}</span> </span>
<span class="price" style="color: #FF2323;" v-else>免费</span>
<view class="flex align-items" style="justify-content: space-between;margin-top: 12rpx;">
<span class="pass" v-if="item.auth_status == 1">审核通过</span>
<span class="full" v-if="item.auth_status == 0">审核中</span>
<span class="full" v-if="item.auth_status == 2">审核未通过</span>
</view>
<view class="flex align-items" style="justify-content: flex-end;margin-top: 12rpx;">
<span class="Cancel" @click.stop="Confirm(item.id,2)" v-if="item.status == 1">下架</span>
<span class="Cancel" @click.stop="Confirm(item.id,1)" v-if="item.status == 2">上架</span>
<span class="hui" v-if="item.auth_status != 1">上架</span>
<span class="lan" @click.stop="toList(item.id)">订单管理</span>
</view>
<!-- <span class="full" v-if="item.status == 1">已上架</span>
<span class="full" v-if="item.status == 2">已下架</span>
<span class="full" v-if="item.status == 3">平台下架</span> -->
</view>
</view>
<!-- <span class="error" v-if="item.auth_status == 2">审核失败:{{item.reason}}</span> -->
<span class="box-line"></span>
</view>
</view>
</view>
<u-loadmore :status="loadStatus" />
</view>
</template>
<script>
export default {
data() {
return {
popupStyle: {
width: '690rpx',
margin: '0 auto', // 水平居中
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
padding: '0',
borderRadius: '20rpx'
},
sortList: [{
text: '按照价格排序',
value: ['acs', 'desc'],
}, {
text: '按照编号排序',
value: ['acs', 'desc'],
}],
QRShow: false,
size: 13,
sortStyle: ['#ff557f', '#3f3f3f'],
headers: [{
status: '-1',
text: '全部'
},
{
status: '1',
text: '上架'
},
{
status: '2',
text: '下架'
}
// {
// status: '3',
// text: '平台下架'
// }
],
popupStyle: {
width: '690rpx',
margin: '0 auto', // 水平居中
display: 'flex',
justifyContent: 'center',
alignItems: 'center',
padding: '0',
borderRadius: '20rpx'
},
selected: '-1',
auth_status: '-1',
page: 1,
limit: 10,
loadStatus: 'loading',
keywords: '',
list: [],
show: false,
qrcode: {},
order_no: '',
QR: {},
last_page: 0,
shop_id: ''
};
},
onLoad() {
this.shop_id = uni.getStorageSync('shop_id')
},
onShow() {
this.page = 1
this.list = []
this.getList(this.selected);
},
onReachBottom() {
if (this.page < this.last_page) {
this.page++;
this.getList(this.selected);
}
},
methods: {
openUrl(url) {
uni.navigateTo({
url: url
})
},
switchSort(index, value) {
console.log(index, value);
},
// 详情
toDetail(id,shop_id) {
uni.navigateTo({
url: "/packageA/my/addManagement?id=" + id + '&shop_id=' + shop_id
})
},
// 课程管理
toList(id) {
uni.navigateTo({
url: "/packageA/my/mentList?id=" + id
})
},
Confirm(id, status) {
uni.$u.http.post('/api/school.worker.classes/update_status', {
id: id,
status: status
}).then(res => {
if (res.code == 1) {
this.page = 1
this.list = []
this.getList(this.selected)
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
}).catch(error => {
console.error('请求失败', error);
});
},
// 创建课程
addClass() {
uni.$u.http.get('/api/school/shop/auth_info', ).then(res => {
if (res.code == 1) {
if (res.data.check_full){
uni.navigateTo({
url: "/packageA/my/addManagement?shop_id=" + this.shop_id
})
} else{
uni.showToast({
title: '必要展示信息未完善,请先在机构完善展示信息',
icon: 'none',
duration: 2000
});
}
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
}
}).catch(error => {
console.error('请求失败', error);
});
},
// 搜索
onInput(e) {
console.log(e)
const that = this
this.keywords = e.detail.value
that.page = 1
that.list = []
this.selected = '-1'
this.getList(this.selected)
},
// 获取课程列表
getList(status) {
// if (this.loadStatus === 'nomore') return;
uni.$u.http.get('/api/school/classes/classes_list', {
params: {
keywords: this.keywords,
page: this.page,
limit: this.limit,
status: status,
order: 'normal',
shop_id: this.shop_id,
auth_status: this.auth_status
}
}).then(res => {
if (res.code == 1) {
this.last_page = res.data.list.last_page
this.list = [...this.list, ...res.data.list.data];
if (this.list.length >= res.data.list.total) {
this.loadStatus = 'nomore';
} else {
this.loadStatus = 'loading';
}
} else {
uni.showToast({
title: res.msg,
icon: 'none',
duration: 2000
});
this.loadStatus = 'loading';
}
}).catch(error => {
console.error('请求失败', error);
this.loadStatus = 'loading';
});
},
selectheader(status) {
const that = this
that.selected = status;
console.log(status, '')
that.page = 1
that.list = []
that.getList(status)
},
headerSelected(status) {
return this.selected === status;
},
// 跳转详情
// toDetail(id, orderId) {
// uni.navigateTo({
// url: "/pages/center/detail?id=" + id + "&orderId=" + orderId
// })
// }
}
}
</script>
<style lang="scss" scoped>
.box {
background: linear-gradient(to bottom, #F1F2F8 0%, #FFFFFF 5%, #FFFFFF 100%);
.con-center {
width: 690rpx;
// margin-top: 25rpx;
.centerBack {
position: fixed;
width: 100%;
height: 100%;
top: 25rpx;
left: 0;
z-index: -1;
}
.header {
height: 50rpx;
margin-top: 37rpx;
.s-header {
// width: 104rpx;
padding: 10rpx 20rpx;
height: 50rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 400;
font-size: 28rpx;
color: #9E9E9E;
line-height: 26rpx;
}
.s-header.selected {
// width: 104rpx;
padding: 10rpx 20rpx;
height: 50rpx;
background: #008CFF;
border-radius: 12rpx 12rpx 12rpx 12rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 28rpx;
color: #FFFFFF;
line-height: 26rpx;
}
}
.searchBtn {
width: 164rpx;
height: 64rpx;
background: #008CFF;
border-radius: 8rpx 8rpx 8rpx 8rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 32rpx;
color: #FFFFFF;
display: flex;
justify-content: center;
align-items: center;
margin-left: 18rpx;
}
}
}
.w-100 {
width: 100%;
}
.flex {
display: flex;
}
.flex-start {
align-items: flex-start;
}
.justify-center {
justify-content: center;
}
.align-items {
align-items: center;
}
.flex-column {
flex-flow: column;
}
.justify-start {
justify-content: start;
}
.line {
margin-top: 18rpx;
width: 690rpx;
height: 1rpx;
background: #008CFF;
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
.centerBox {
width: 690rpx;
.error {
width: 100%;
word-break: break-all;
}
.box-line {
width: 400rpx;
height: 1rpx;
background: #D9D9D9;
border-radius: 0rpx 0rpx 0rpx 0rpx;
margin-top: 24rpx;
}
.center {
margin: 32rpx 0 32rpx 0;
}
.rightBox {
margin-left: 24rpx;
width: 378rpx;
.line-row {
width: 382rpx;
height: 1rpx;
background: #D9D9D9;
box-shadow: 1rpx 1rpx 0rpx 0rpx rgba(102, 102, 102, 0.25);
margin: 14rpx 0 6rpx 0;
}
.price {
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #FF2323;
}
.hui {
width: 138rpx;
height: 48rpx;
background: #D9D9D9;
border-radius: 12rpx 12rpx 12rpx 12rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #FFFFFF;
letter-spacing: 4px;
display: flex;
align-items: center;
justify-content: center;
align-self: flex-end;
margin-right: 16rpx;
}
.lan {
width: 138rpx;
height: 50rpx;
background: #008CFF;
border-radius: 12rpx 12rpx 12rpx 12rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #FFFFFF;
letter-spacing: 8rpx;
display: flex;
align-items: center;
justify-content: center;
align-self: flex-end;
}
.name {
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 36rpx;
color: #343434;
margin-bottom: 24rpx;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 1;
/* 设置行数 */
overflow: hidden;
text-overflow: ellipsis;
word-break: break-all;
/* 防止单词被截断 */
}
.minge {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #7A7A7A;
margin-bottom: 14rpx;
}
.pass {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 26rpx;
color: #008CFF;
}
.full {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #FF2323;
}
.money {
font-weight: 800;
font-size: 24rpx;
color: #FF2323;
span {
font-weight: 500;
font-size: 24rpx;
color: #7A7A7A;
}
}
.Cancel {
width: 138rpx;
height: 48rpx;
border-radius: 12rpx 12rpx 12rpx 12rpx;
border: 2rpx solid #008CFF;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #008CFF;
line-height: 32rpx;
letter-spacing: 4px;
display: flex;
align-items: center;
justify-content: center;
align-self: flex-end;
margin-right: 16rpx;
}
.xia {
width: 138rpx;
height: 48rpx;
border-radius: 12rpx 12rpx 12rpx 12rpx;
border: 2rpx solid #008CFF;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #008CFF;
line-height: 32rpx;
letter-spacing: 4px;
display: flex;
align-items: center;
justify-content: center;
align-self: flex-end;
}
.make {
width: 138rpx;
height: 48rpx;
background: #008CFF;
border-radius: 12rpx 12rpx 12rpx 12rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 24rpx;
color: #FFFFFF;
line-height: 32rpx;
letter-spacing: 4px;
display: flex;
align-items: center;
justify-content: center;
align-self: flex-end;
margin-left: 16rpx;
}
.QR {
width: 138rpx;
height: 48rpx;
background: #4974FF;
box-shadow: 2rpx 2rpx 0rpx 0rpx rgba(0, 0, 0, 0.4);
border-radius: 8rpx 8rpx 8rpx 8rpx;
font-weight: 400;
font-size: 26rpx;
color: #EAEAEA;
display: flex;
align-items: center;
justify-content: center;
align-self: flex-end;
margin-top: 50rpx;
}
}
}
.charge {
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 28rpx;
color: #FF2323;
line-height: 32rpx;
}
.search {
width: 690rpx;
height: 64rpx;
background: #FFFFFF;
box-shadow: 2rpx 2rpx 0rpx 0rpx rgba(0, 0, 0, 0.4);
border-radius: 8rpx 8rpx 8rpx 8rpx;
border: 2rpx solid #008CFF;
.dashed {
image {
width: 52rpx;
height: 52rpx;
}
}
.line-search {
width: 2rpx;
height: 42rpx;
background: #008CFF;
border-radius: 0rpx 0rpx 0rpx 0rpx;
}
.input {
// border: 4rpx solid #EAEAEA;
padding-left: 12rpx;
height: 100%;
width: 100%;
}
/deep/ .input-placeholder {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 32rpx;
color: #C0C0C0;
line-height: 32rpx;
text-align: left;
font-style: normal;
text-transform: none;
}
}
.popup {
.header {
margin-left: 24rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 42rpx;
color: #008CFF;
margin-top: 34rpx;
width: 690rpx;
}
.line-row {
width: 690rpx;
height: 1rpx;
background: #D9D9D9;
margin: 11rpx 0 31rpx 0;
}
.pop-center {
.left {}
.right {
margin-left: 30rpx;
.title {
width: 340rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 34rpx;
color: #343434;
}
}
}
.line-short {
width: 400rpx;
height: 1rpx;
background: #D9D9D9;
}
.popList {
justify-content: space-between;
width: 600rpx;
margin-top: 32rpx;
.hei {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 26rpx;
color: #343434;
}
}
.pop-btn {
width: 690rpx;
margin-top: 62rpx;
justify-content: space-around;
.Cancel {
width: 306rpx;
height: 80rpx;
border-radius: 401rpx 401rpx 401rpx 401rpx;
border: 2rpx solid #008CFF;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 34rpx;
color: #008CFF;
}
.Confirm {
width: 306rpx;
height: 80rpx;
background: #008CFF;
border-radius: 401rpx 401rpx 401rpx 401rpx;
font-family: PingFang SC, PingFang SC;
font-weight: 800;
font-size: 34rpx;
color: #FFFFFF;
}
}
}
.hui {
font-family: PingFang SC, PingFang SC;
font-weight: 500;
font-size: 24rpx;
color: #7A7A7A;
}
.white-space {
overflow: hidden;
/* 确保超出容器的文本被隐藏 */
white-space: nowrap;
/* 确保文本在一行内显示 */
text-overflow: ellipsis;
/* 使用省略号表示被截断的文本 */
}
</style>