hookehuyr

✨ feat: 联调活动编辑,结束,删除API

/*
* @Date: 2022-10-20 13:15:00
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2022-10-26 10:09:46
* @LastEditTime: 2022-10-26 11:36:29
* @FilePath: /swx/src/api/Activity/index.js
* @Description: 活动信息
*/
......@@ -11,6 +11,8 @@ const Api = {
ACTIVITY_JOIN_LIST: '/srv/?a=activity_join_list',
ACTIVITY_ADD_LIST: '/srv/?a=activity_add_list',
ACTIVITY_COPY: '/srv/?a=activity_copy',
ACTIVITY_END: '/srv/?a=activity_end',
ACTIVITY_DEL: '/srv/?a=activity_del',
}
/**
......@@ -29,4 +31,16 @@ export const addListAPI = (params) => fn(fetch.get(Api.ACTIVITY_ADD_LIST, params
* @description: 复制活动
* @returns
*/
export const copyListAPI = (params) => fn(fetch.get(Api.ACTIVITY_COPY, params));
export const copyActivityAPI = (params) => fn(fetch.get(Api.ACTIVITY_COPY, params));
/**
* @description: 结束活动
* @returns
*/
export const endActivityAPI = (params) => fn(fetch.get(Api.ACTIVITY_END, params));
/**
* @description: 删除活动
* @returns
*/
export const delActivityAPI = (params) => fn(fetch.get(Api.ACTIVITY_DEL, params));
......
<!--
* @Date: 2022-09-20 15:39:37
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2022-10-26 10:23:46
* @LastEditTime: 2022-10-26 11:39:21
* @FilePath: /swx/src/components/activity-card.vue
* @Description: 活动卡片组件
-->
......@@ -28,7 +28,11 @@
</view>
</van-col>
</van-row>
<view v-if="status === 'edit' || status === 'copy'" style="position: absolute; right: 0; bottom: 1rem; background-color: #BBBBBB; color: white; padding: 0.25rem; padding-left: 1rem; padding-right: 0.5rem; border-top-left-radius: 1rem; border-bottom-left-radius: 1rem; font-size: 0.85rem;">编辑</view>
<view v-if="status === 'creator'">
<view @tap="editActivity(data)" class="edit-button">编辑</view>
<view @tap="finishActivity(data)" v-if="formatStatus(data) === '报名未开始' || formatStatus(data) === '报名中' || formatStatus(data) === '报名结束'" class="finish-button">结束</view>
<view @tap="delActivity(data)" v-if="formatStatus(data) === '未发布' || formatStatus(data) === '已结束'" class="close-button">删除</view>
</view>
</view>
<view class="card-sub">
<van-row v-if="data.address">
......@@ -52,7 +56,7 @@
</view>
</van-col>
</van-row>
<view v-if="status === 'copy' && formatStatus(data) !== '已结束'" @tap="copyActivity(data.id)" style="position: absolute; right: 0; bottom: 1rem; background-color: #199A74; color: white; padding: 0.25rem; padding-left: 1rem; padding-right: 0.5rem; border-top-left-radius: 1rem; border-bottom-left-radius: 1rem;">复制</view>
<view v-if="status === 'creator' && formatStatus(data) !== '已结束'" @tap="copyActivity(data.id)" class="copy-button">复制</view>
</view>
</view>
<van-toast id="van-toast" />
......@@ -64,9 +68,10 @@ import { ref, defineProps, computed } from 'vue'
import icon_address from '@/images/icon/address@2x.png'
import Taro from '@tarojs/taro'
import * as dayjs from 'dayjs'
import { copyListAPI } from '@/api/Activity/index'
import { copyActivityAPI } from '@/api/Activity/index'
import Toast from '@/components/vant-weapp/toast/toast';
import Dialog from '@vant/weapp/dist/dialog/dialog';
import { endActivityAPI, delActivityAPI } from '@/api/Activity/index';
const props = defineProps({
data: Object,
......@@ -103,7 +108,7 @@ const goTo = (id, status) => {
})
}
const emit = defineEmits(['on-copy']);
const emit = defineEmits(['on-handle']);
const copyActivity = async (id) => {
Dialog.confirm({
title: '温馨提示',
......@@ -112,14 +117,83 @@ const copyActivity = async (id) => {
})
.then(async () => {
// 复制活动
const { code, data } = await copyListAPI({ i: id });
const { code, data } = await copyActivityAPI({ i: id });
if (code) {
Toast({
duration: 1000,
type: 'success',
message: '复制成功',
onClose: () => {
emit('on-copy', id);
emit('on-handle', id);
},
});
}
})
.catch(() => {
// on cancel
});
}
// 编辑活动
const editActivity = ({ id }) => {
Dialog.confirm({
title: '温馨提示',
message: '是否确认编辑活动?',
confirmButtonColor: '#199A74'
})
.then(async () => {
Taro.navigateTo({
url: '../createActivity/index?id=' + id + '&type=edit'
})
})
.catch(() => {
// on cancel
});
}
// 结束活动
const finishActivity = ({ id }) => {
Dialog.confirm({
title: '温馨提示',
message: '是否确认结束活动?',
confirmButtonColor: '#199A74'
})
.then(async () => {
// 结束活动
const { code, data } = await endActivityAPI({ i: id });
if (code) {
Toast({
duration: 1000,
type: 'success',
message: '结束成功',
onClose: () => {
emit('on-handle', id);
},
});
}
})
.catch(() => {
// on cancel
});
}
// 删除活动
const delActivity = ({ id }) => {
Dialog.confirm({
title: '温馨提示',
message: '是否确认删除活动?',
confirmButtonColor: '#199A74'
})
.then(async () => {
// 复制活动
const { code, data } = await delActivityAPI({ i: id });
if (code) {
Toast({
duration: 1000,
type: 'success',
message: '删除成功',
onClose: () => {
emit('on-handle', id);
},
});
}
......@@ -144,11 +218,62 @@ const copyActivity = async (id) => {
.card-main-text {
padding: 0 0.5rem;
}
.edit-button {
position: absolute;
right: 0;
bottom: 1rem;
background-color: #BBBBBB;
color: white;
padding: 0.25rem;
padding-left: 1rem;
padding-right: 0.5rem;
border-top-left-radius: 1rem;
border-bottom-left-radius: 1rem;
font-size: 0.85rem;
}
.finish-button {
position: absolute;
right: 0;
bottom: 4rem;
background-color: #DABE73;
color: white;
padding: 0.25rem;
padding-left: 1rem;
padding-right: 0.5rem;
border-top-left-radius: 1rem;
border-bottom-left-radius: 1rem;
font-size: 0.85rem;
}
.close-button {
position: absolute;
right: 0;
bottom: 4rem;
background-color: #E32525;
color: white;
padding: 0.25rem;
padding-left: 1rem;
padding-right: 0.5rem;
border-top-left-radius: 1rem;
border-bottom-left-radius: 1rem;
font-size: 0.85rem;
}
}
.card-sub {
padding: 0.85rem;
font-size: 0.85rem;
position: relative;
.copy-button {
position: absolute;
right: 0;
bottom: 1rem;
background-color: #199A74;
color: white;
padding: 0.25rem;
padding-left: 1rem;
padding-right: 0.5rem;
border-top-left-radius: 1rem;
border-bottom-left-radius: 1rem;
}
}
}
......
......@@ -30,9 +30,21 @@
.activity-title {
background-color: #FFFFFF;
position: relative;
.box {
padding: 1rem 1rem 0.5rem 1rem;
}
.partner-box {
position: absolute;
right: -0.5rem;
top: 1rem;
background-color: #6CA4F6;
color: #FFF;
border-top-left-radius: 1rem;
border-bottom-left-radius: 1rem;
padding: 0.25rem 0.5rem 0.25rem 0.8rem;
font-size: 0.9rem;
}
}
.bg-gradient {
......
<!--
* @Date: 2022-09-19 14:11:06
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2022-10-26 10:29:22
* @LastEditTime: 2022-10-26 11:39:02
* @FilePath: /swx/src/pages/myCreateActivity/index.vue
* @Description: 文件描述
-->
......@@ -29,6 +29,7 @@
<view class="box">
<text class="bg-gradient" style="font-size: 1.15rem;">活动统计</text>
</view>
<view class="partner-box">用户陪伴</view>
</view>
<view class="header-info">
<view class="activity">
......@@ -68,7 +69,7 @@
</view>
<scroll-view :scroll-y="true" :style="scrollStyle" @scrolltolower="onScrollToLower">
<view style="">
<activity-card @on-copy="onCopy" v-for="(item, index) in activity_list" :key="index" :data="item" status="copy" style="margin-bottom: 1rem;"></activity-card>
<activity-card @on-handle="onHandle" v-for="(item, index) in activity_list" :key="index" :data="item" status="creator" style="margin-bottom: 1rem;"></activity-card>
</view>
</scroll-view>
<view style="height: 3rem;"></view>
......@@ -272,6 +273,8 @@ export default {
this.show_host_popup = false;
this.host_id = value.key;
this.host_name = value.text;
// 缓存主办方ID
// wx.setStorageSync('chang_host_id', value.key);
// 查询数据
this.activity_list = [];
this.flag = true;
......@@ -290,7 +293,7 @@ export default {
this.page = 0;
this.getList();
},
onCopy () { // 活动复制时间回调
onHandle () { // 活动操作后回调
// 查询数据
this.activity_list = [];
this.flag = true;
......