hookehuyr

✨ feat(捐花组件): API和业务逻辑调整

...@@ -2,26 +2,29 @@ ...@@ -2,26 +2,29 @@
2 * @Author: hookehuyr hookehuyr@gmail.com 2 * @Author: hookehuyr hookehuyr@gmail.com
3 * @Date: 2022-05-31 18:32:38 3 * @Date: 2022-05-31 18:32:38
4 * @LastEditors: hookehuyr hookehuyr@gmail.com 4 * @LastEditors: hookehuyr hookehuyr@gmail.com
5 - * @LastEditTime: 2022-05-31 19:01:49 5 + * @LastEditTime: 2022-06-01 19:17:16
6 * @FilePath: /tswj/src/components/DonateBar/index.vue 6 * @FilePath: /tswj/src/components/DonateBar/index.vue
7 * @Description: 爱心助力底部固定栏 7 * @Description: 爱心助力底部固定栏
8 --> 8 -->
9 <template> 9 <template>
10 <div class="fix-btn"> 10 <div class="fix-btn">
11 - <div class="text"><slot /></div> 11 + <div class="text" @click="toDonate"><slot /></div>
12 </div> 12 </div>
13 + <donate-flower :user-type="donateType" :show-popup="showDonate" :item="donateInfo" @on-close="closeDonate" />
13 </template> 14 </template>
14 15
15 <script setup> 16 <script setup>
16 -import { ref } from 'vue' 17 +import { ref, onMounted } from 'vue'
17 -import { useRoute, useRouter } from 'vue-router' 18 +import { useRoute } from 'vue-router'
18 19
19 import { Cookies, $, _, axios, storeToRefs, mainStore, Toast, useTitle } from '@/utils/generatePackage.js' 20 import { Cookies, $, _, axios, storeToRefs, mainStore, Toast, useTitle } from '@/utils/generatePackage.js'
20 //import { } from '@/utils/generateModules.js' 21 //import { } from '@/utils/generateModules.js'
21 //import { } from '@/utils/generateIcons.js' 22 //import { } from '@/utils/generateIcons.js'
22 //import { } from '@/composables' 23 //import { } from '@/composables'
24 +import { DonateFlower } from '@/utils/generateModules'
25 +import { prepareDonateAPI } from '@/api/C/donate.js'
26 +
23 const $route = useRoute(); 27 const $route = useRoute();
24 -const $router = useRouter();
25 useTitle($route.meta.title); 28 useTitle($route.meta.title);
26 29
27 const props = defineProps({ 30 const props = defineProps({
...@@ -36,7 +39,29 @@ const props = defineProps({ ...@@ -36,7 +39,29 @@ const props = defineProps({
36 39
37 // 捐钱-游客 type: V 40 // 捐钱-游客 type: V
38 // 捐钱-幼儿园 type: K 41 // 捐钱-幼儿园 type: K
39 -console.warn(props.donateType); 42 +// 捐钱-指定儿童 type: C
43 +const donateInfo = ref({})
44 +let params = {};
45 +if (props.donateType === 'C') { // 助力TA
46 + params = { perf_id: $route.query.perf_id }
47 +} else if (props.donateType === 'K') {
48 + params = { kg_id: $route.query.kg_id }
49 +}
50 +onMounted(async () => {
51 + const { data } = await prepareDonateAPI(params);
52 + donateInfo.value = data;
53 +})
54 +
55 +// 弹出捐赠弹框模块
56 +const showDonate = ref(false);
57 +
58 +const toDonate = () => {
59 + showDonate.value = true;
60 +}
61 +
62 +const closeDonate = (v) => {
63 + showDonate.value = v;
64 +}
40 65
41 </script> 66 </script>
42 67
......
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
24 </van-col> 24 </van-col>
25 </van-row> 25 </van-row>
26 </div> 26 </div>
27 - <div v-if="item.kg_name" class="donate-name"> 27 + <div v-if="item.kg_name && (userType === 'C' || userType === 'K')" class="donate-name">
28 <van-row> 28 <van-row>
29 <van-col span="4" style="line-height: 2;">幼儿园</van-col> 29 <van-col span="4" style="line-height: 2;">幼儿园</van-col>
30 <van-col span="18"> 30 <van-col span="18">
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
32 </van-col> 32 </van-col>
33 </van-row> 33 </van-row>
34 </div> 34 </div>
35 - <div v-if="item.perf_name" class="donate-name"> 35 + <div v-if="item.perf_name && userType === 'C'" class="donate-name">
36 <van-row> 36 <van-row>
37 <van-col span="4" style="line-height: 2;">助力人</van-col> 37 <van-col span="4" style="line-height: 2;">助力人</van-col>
38 <van-col span="18"> 38 <van-col span="18">
...@@ -91,7 +91,8 @@ import { addDonateAPI } from '@/api/C/donate.js' ...@@ -91,7 +91,8 @@ import { addDonateAPI } from '@/api/C/donate.js'
91 const $router = useRouter(); 91 const $router = useRouter();
92 const props = defineProps({ 92 const props = defineProps({
93 item: Object, 93 item: Object,
94 - showPopup: Boolean 94 + showPopup: Boolean,
95 + userType: String
95 }) 96 })
96 const emit = defineEmits(['on-close']); 97 const emit = defineEmits(['on-close']);
97 98
...@@ -102,7 +103,21 @@ const donateFlower = async () => { ...@@ -102,7 +103,21 @@ const donateFlower = async () => {
102 return false; 103 return false;
103 } 104 }
104 // 捐钱接口 105 // 捐钱接口
105 - const { data } = await addDonateAPI({ qty: donate_number.value, donate_name: props.item.donate_name, kg_id: props.item.kg_id, perf_id: props.item.perf_id }); 106 + // 根据类型过滤提交数据
107 + // C 儿童: 提交 perf_id,kg_id
108 + // K 幼儿园: 提交 kg_id
109 + // V 访客: 不提交 perf_id,kg_id
110 + let params = {
111 + qty: donate_number.value,
112 + donate_name: props.item.donate_name,
113 + };
114 + if (props.donateType === 'C') { // 助力TA
115 + params.perf_id = props.item.perf_id;
116 + params.kg_id = props.item.kg_id;
117 + } else if (props.donateType === 'K') {
118 + params.kg_id = props.item.kg_id;
119 + }
120 + const { data } = await addDonateAPI(params);
106 if (data.id) { 121 if (data.id) {
107 closeBtn(); 122 closeBtn();
108 // 交易成功跳转回调页面 123 // 交易成功跳转回调页面
......
...@@ -70,7 +70,7 @@ ...@@ -70,7 +70,7 @@
70 <template #bookDetailSub> 70 <template #bookDetailSub>
71 <div 71 <div
72 style="color: #999999; padding: 0px 1rem 0.5rem;" 72 style="color: #999999; padding: 0px 1rem 0.5rem;"
73 - @click="goToDetail(item.id, item.book_id, item.type)" 73 + @click="goToDetail(item.id, item.book_id, item.type, item.perf_id)"
74 > 74 >
75 {{ item.kg_name }} | {{ item.localism_type }} 75 {{ item.kg_name }} | {{ item.localism_type }}
76 </div> 76 </div>
...@@ -111,7 +111,7 @@ ...@@ -111,7 +111,7 @@
111 </div> 111 </div>
112 </notice-overlay> 112 </notice-overlay>
113 113
114 - <donate-flower :show-popup="showDonate" :item="donateInfo" @on-close="closeDonate" /> 114 + <donate-flower :user-type="donateType" :show-popup="showDonate" :item="donateInfo" @on-close="closeDonate" />
115 115
116 <van-overlay :show="show" z-index="9999"> 116 <van-overlay :show="show" z-index="9999">
117 <div class="wrapper" @click.stop> 117 <div class="wrapper" @click.stop>
...@@ -121,7 +121,7 @@ ...@@ -121,7 +121,7 @@
121 </template> 121 </template>
122 122
123 <script setup> 123 <script setup>
124 -import { ref, onActivated, nextTick, onMounted } from 'vue' 124 +import { ref, onActivated, nextTick, onMounted, computed } from 'vue'
125 import { useRoute, useRouter, onBeforeRouteLeave } from 'vue-router' 125 import { useRoute, useRouter, onBeforeRouteLeave } from 'vue-router'
126 import { Cookies, _, storeToRefs, mainStore, Toast, hasEllipsis } from '@/utils/generatePackage' 126 import { Cookies, _, storeToRefs, mainStore, Toast, hasEllipsis } from '@/utils/generatePackage'
127 import { MyButton, VideoCard, NoticeOverlay, DonateFlower, ShortcutFixed } from '@/utils/generateModules' 127 import { MyButton, VideoCard, NoticeOverlay, DonateFlower, ShortcutFixed } from '@/utils/generateModules'
...@@ -142,6 +142,11 @@ const { toggleLanguage, onLoad, columns, prod_list, finished, loading, bookInfo, ...@@ -142,6 +142,11 @@ const { toggleLanguage, onLoad, columns, prod_list, finished, loading, bookInfo,
142 const { userInfo } = useDefaultPerf($route.query.id); 142 const { userInfo } = useDefaultPerf($route.query.id);
143 143
144 const donateInfo = ref({}) 144 const donateInfo = ref({})
145 +const userType = Cookies.get('userType')
146 +// 判断是访客进入还是幼儿园进入
147 +const donateType = computed(() => {
148 + return userType === 'client' ? 'K' : 'V';
149 +})
145 onMounted(async () => { 150 onMounted(async () => {
146 const { data } = await prepareDonateAPI({ kg_id: $route.query.kg_id }); 151 const { data } = await prepareDonateAPI({ kg_id: $route.query.kg_id });
147 donateInfo.value = data; 152 donateInfo.value = data;
...@@ -286,13 +291,14 @@ onBeforeRouteLeave(() => { ...@@ -286,13 +291,14 @@ onBeforeRouteLeave(() => {
286 }) 291 })
287 292
288 /****************** 视频组件相关操作 *******************/ 293 /****************** 视频组件相关操作 *******************/
289 -const goToDetail = (prod_id, book_id, type) => { // 跳转作品详情页 294 +const goToDetail = (prod_id, book_id, type, perf_id) => { // 跳转作品详情页
290 $router.push({ 295 $router.push({
291 path: '/client/videoDetail', 296 path: '/client/videoDetail',
292 query: { 297 query: {
293 prod_id, 298 prod_id,
294 book_id, 299 book_id,
295 - type // 特殊标识,判断入口 为keepAlive使用 300 + type, // 特殊标识,判断入口 为keepAlive使用
301 + perf_id
296 } 302 }
297 }); 303 });
298 } 304 }
......
...@@ -57,23 +57,26 @@ ...@@ -57,23 +57,26 @@
57 <span>&nbsp;3000</span> 57 <span>&nbsp;3000</span>
58 </div> 58 </div>
59 <div class="button"> 59 <div class="button">
60 - <my-button type="primary">为TA助力</my-button> 60 + <my-button type="primary" @on-click="toDonate">为TA助力</my-button>
61 </div> 61 </div>
62 </div> 62 </div>
63 </div> 63 </div>
64 <van-empty v-if="emptyStatus" class="custom-image" :image="no_image" description="暂无作品信息" /> 64 <van-empty v-if="emptyStatus" class="custom-image" :image="no_image" description="暂无作品信息" />
65 +
66 + <donate-flower user-type="C" :show-popup="showDonate" :item="donateInfo" @on-close="closeDonate" />
65 </template> 67 </template>
66 68
67 <script setup> 69 <script setup>
68 import { ref, onActivated, onMounted } from 'vue' 70 import { ref, onActivated, onMounted } from 'vue'
69 import { useRoute, onBeforeRouteLeave } from 'vue-router' 71 import { useRoute, onBeforeRouteLeave } from 'vue-router'
70 import { storeToRefs } from 'pinia' 72 import { storeToRefs } from 'pinia'
71 -import { MyButton, VideoCard } from '@/utils/generateModules' 73 +import { MyButton, VideoCard, DonateFlower } from '@/utils/generateModules'
72 import { icon_avatar, no_image, icon_flower } from '@/utils/generateIcons.js' 74 import { icon_avatar, no_image, icon_flower } from '@/utils/generateIcons.js'
73 import { _, Toast } from '@/utils/generatePackage.js' 75 import { _, Toast } from '@/utils/generatePackage.js'
74 import { addPages, store } from '@/hooks/useKeepAlive' 76 import { addPages, store } from '@/hooks/useKeepAlive'
75 import { perfInfoAPI, addFollowAPI } from '@/api/C/perf.js' 77 import { perfInfoAPI, addFollowAPI } from '@/api/C/perf.js'
76 import { useScrollTop } from '@/composables'; 78 import { useScrollTop } from '@/composables';
79 +import { prepareDonateAPI } from '@/api/C/donate.js'
77 80
78 const { resetScrollTop } = useScrollTop(); // 页面滚动恢复 81 const { resetScrollTop } = useScrollTop(); // 页面滚动恢复
79 resetScrollTop('scrollTopPerson'); 82 resetScrollTop('scrollTopPerson');
...@@ -84,6 +87,7 @@ const userInfo = ref({}); ...@@ -84,6 +87,7 @@ const userInfo = ref({});
84 // 因为不能让空图标提前出来的写法 87 // 因为不能让空图标提前出来的写法
85 const emptyStatus = ref(false); 88 const emptyStatus = ref(false);
86 89
90 +const donateInfo = ref({})
87 onMounted(async () => { 91 onMounted(async () => {
88 // 获取表演者信息 92 // 获取表演者信息
89 const { data } = await perfInfoAPI({ perf_id: $route.query.perf_id }); 93 const { data } = await perfInfoAPI({ perf_id: $route.query.perf_id });
...@@ -95,8 +99,21 @@ onMounted(async () => { ...@@ -95,8 +99,21 @@ onMounted(async () => {
95 }) 99 })
96 userInfo.value = data; 100 userInfo.value = data;
97 } 101 }
102 + const donateData = await prepareDonateAPI({ perf_id: $route.query.perf_id });
103 + donateInfo.value = donateData.data;
98 }); 104 });
99 105
106 +// 弹出捐赠弹框模块
107 +const showDonate = ref(false);
108 +
109 +const toDonate = () => {
110 + showDonate.value = true;
111 +}
112 +
113 +const closeDonate = (v) => {
114 + showDonate.value = v;
115 +}
116 +
100 // 关注个人用户 117 // 关注个人用户
101 const followUser = async () => { 118 const followUser = async () => {
102 const { msg } = await addFollowAPI({ perf_id: $route.query.perf_id }); 119 const { msg } = await addFollowAPI({ perf_id: $route.query.perf_id });
......