hookehuyr

✨ feat(组件): 新增捐花组件,和相关页面操作

...@@ -40,10 +40,10 @@ ...@@ -40,10 +40,10 @@
40 </div> 40 </div>
41 <div class="donate-handle"> 41 <div class="donate-handle">
42 <div class="donate-cancel"> 42 <div class="donate-cancel">
43 - <my-button @on-click="cancelDonate" type="plain">取消</my-button> 43 + <my-button type="plain" @on-click="cancelDonate">取消</my-button>
44 </div> 44 </div>
45 <div class="donate-imd"> 45 <div class="donate-imd">
46 - <my-button @on-click="donateBook" type="primary">立即捐赠</my-button> 46 + <my-button type="primary" @on-click="donateBook">立即捐赠</my-button>
47 </div> 47 </div>
48 </div> 48 </div>
49 </div> 49 </div>
...@@ -174,25 +174,31 @@ export default { ...@@ -174,25 +174,31 @@ export default {
174 .donate-wrapper { 174 .donate-wrapper {
175 .donate-header { 175 .donate-header {
176 padding: 1rem; 176 padding: 1rem;
177 +
177 .donate-book { 178 .donate-book {
178 border: 1px solid #ECECEC; 179 border: 1px solid #ECECEC;
179 border-radius: 5px; 180 border-radius: 5px;
180 padding: 0.1rem; 181 padding: 0.1rem;
181 } 182 }
183 +
182 .donate-detail { 184 .donate-detail {
183 font-size: 1.25rem; 185 font-size: 1.25rem;
184 padding: 1rem; 186 padding: 1rem;
187 +
185 .text { 188 .text {
186 color: #292929; 189 color: #292929;
187 font-weight: bold; 190 font-weight: bold;
188 } 191 }
192 +
189 .price { 193 .price {
190 color: #EE332E; 194 color: #EE332E;
191 } 195 }
192 } 196 }
193 } 197 }
198 +
194 .donate-name { 199 .donate-name {
195 padding: 1rem; 200 padding: 1rem;
201 +
196 .donate-input { 202 .donate-input {
197 border: 1px solid #B9B9B9; 203 border: 1px solid #B9B9B9;
198 border-radius: 5px; 204 border-radius: 5px;
...@@ -200,25 +206,31 @@ export default { ...@@ -200,25 +206,31 @@ export default {
200 margin-left: 1rem; 206 margin-left: 1rem;
201 } 207 }
202 } 208 }
209 +
203 .donate-tips { 210 .donate-tips {
204 padding: 1rem; 211 padding: 1rem;
205 padding-top: 0; 212 padding-top: 0;
206 } 213 }
214 +
207 .donate-number { 215 .donate-number {
208 padding: 1rem; 216 padding: 1rem;
209 } 217 }
218 +
210 .donate-handle { 219 .donate-handle {
211 overflow: auto; 220 overflow: auto;
221 +
212 .donate-cancel { 222 .donate-cancel {
213 width: 49%; 223 width: 49%;
214 float: left; 224 float: left;
215 } 225 }
226 +
216 .donate-imd { 227 .donate-imd {
217 width: 50%; 228 width: 50%;
218 float: left; 229 float: left;
219 } 230 }
220 } 231 }
221 } 232 }
233 +
222 .button { 234 .button {
223 display: flex; 235 display: flex;
224 flex-direction: column; 236 flex-direction: column;
......
1 +<template>
2 + <van-popup v-model:show="show" :close-on-click-overlay="false" round position="bottom" :style="{ height: popupHeight, zIndex: 3000 }">
3 + <div class="donate-wrapper">
4 + <div class="donate-title">
5 + 您所有捐助的爱心
6 + <van-icon :name="icon_flower" />
7 + 都将用于多民族语言发展
8 + </div>
9 + <div class="shortcut-choose-wrapper">
10 + <van-row gutter="10">
11 + <van-col span="8">
12 + <div :class="['base-item', checked_one_flower ? 'checked-item' : 'uncheck-item']" @click="checkFlower(1)">
13 + 1朵花花
14 + </div>
15 + </van-col>
16 + <van-col span="8">
17 + <div :class="['base-item', checked_two_flower ? 'checked-item' : 'uncheck-item']" @click="checkFlower(2)">
18 + 2朵花花
19 + </div>
20 + </van-col>
21 + <van-col span="8">
22 + <div :class="['base-item', checked_three_flower ? 'checked-item' : 'uncheck-item']" @click="checkFlower(3)">
23 + 3朵花花
24 + </div>
25 + </van-col>
26 + </van-row>
27 + </div>
28 + <!-- <div style="background: #FFFFFF; border-radius: 3px; border: 1px solid #713610; padding: 0.5rem 1rem; margin: 0.5rem 1rem; text-align: center;">更多花花</div> -->
29 + <div class="donate-number">
30 + <van-row>
31 + <van-col span="12">&nbsp;花花数量 </van-col>
32 + <van-col span="12" style="text-align: right;">
33 + <van-stepper v-model="donate_number" min="1" max="100" integer input-width="40px" button-size="32px" @change="onChangeDonate" />
34 + </van-col>
35 + </van-row>
36 + </div>
37 + <div class="donate-name">
38 + <van-row>
39 + <van-col span="4" style="line-height: 2;">幼儿园</van-col>
40 + <van-col span="18">
41 + <div class="donate-text">杨浦民办科技幼稚园杨浦民办科技幼稚园</div>
42 + </van-col>
43 + </van-row>
44 + </div>
45 + <div class="donate-name">
46 + <van-row>
47 + <van-col span="4" style="line-height: 2;">助力人</van-col>
48 + <van-col span="18">
49 + <div class="donate-text">瑟日古娜</div>
50 + </van-col>
51 + </van-row>
52 + </div>
53 + <div class="donate-name">
54 + <van-row>
55 + <van-col span="4" style="line-height: 2;">捐赠人<span style="color: red;">*</span></van-col>
56 + <van-col class="donate-input" span="18">
57 + <input v-model="item.perf_name" type="text" style="border: 0; padding: 0.25rem;" />
58 + </van-col>
59 + </van-row>
60 + </div>
61 + <van-row style="margin: 1rem 0;">
62 + <van-col span="12" offset="8">
63 + <div style="display: flex;align-items: center; box-sizing: content-box;">
64 + <div style="display: flex; flex-direction: column; justify-content: center;">
65 + <van-checkbox v-model="agreed" checked-color="#ee0a24">同意&nbsp;</van-checkbox>
66 + </div>
67 + <div style="display: flex; flex-direction: column; justify-content: center;">
68 + <span style="text-decoration: underline; color: #713610;" @click="handleDonationAgreement">捐赠协议</span>
69 + </div>
70 + </div>
71 + </van-col>
72 + </van-row>
73 +
74 + <div class="donate-handle">
75 + <div class="donate-cancel">
76 + <my-button type="plain" @on-click="cancelDonate">取消</my-button>
77 + </div>
78 + <div class="donate-imd">
79 + <my-button type="primary" @on-click="donateBook">确定</my-button>
80 + </div>
81 + </div>
82 + </div>
83 + </van-popup>
84 + <van-popup v-model:show="showDonationAgreement" position="bottom" :style="{ height: '100%', zIndex: 4000 }">
85 + Lorem ipsum dolor sit amet, consectetur adipisicing elit. Doloremque earum voluptates architecto! Itaque magnam modi ducimus minima. Ullam quam, excepturi modi cupiditate quidem optio consequuntur minus porro, saepe, neque incidunt!
86 + <div class="bottom-btn" @click="closeDonationAgreement">
87 + <div class="text">关闭</div>
88 + </div>
89 + </van-popup>
90 +</template>
91 +
92 +<script setup>
93 +import Cookies from 'js-cookie'
94 +import { icon_flower } from '@/utils/generateIcons'
95 +
96 +import MyButton from '@/components/MyButton/index.vue'
97 +import { ref, reactive, onMounted, watch, nextTick } from 'vue'
98 +import { useRoute, useRouter } from 'vue-router'
99 +import axios from '@/utils/axios';
100 +import $ from 'jquery'
101 +import { Toast, Dialog } from 'vant';
102 +const $route = useRoute();
103 +const $router = useRouter();
104 +
105 +const props = defineProps({
106 + item: Object,
107 + showPopup: Boolean
108 +})
109 +
110 +const emit = defineEmits(['on-close']);
111 +
112 +let donate_number = ref(1);
113 +// 捐赠数量回调
114 +const onChangeDonate = (v) => {
115 + if (v > 3) { // 大于3朵取消选中
116 + checked_one_flower.value = false;
117 + checked_two_flower.value = false;
118 + checked_three_flower.value = false;
119 + } else {
120 + checkFlower(v)
121 + }
122 +}
123 +const donateBook = () => {
124 + // 爱心捐书接口
125 + axios.post('/srv/?a=add_donate', {
126 + book_id: props.item.book_id,
127 + qty: donate_number.value,
128 + donate_name: props.item.perf_name,
129 + })
130 + .then(res => {
131 + if (res.data.code === 1) {
132 + console.warn(res.data.data);
133 + closeBtn();
134 +
135 + // 交易成功跳转回调页面
136 + // TEMP: 临时传参 donate_id
137 + $router.push({
138 + path: '/client/wechatpayCallback',
139 + query: {
140 + donate_id: res.data.data.id
141 + }
142 + })
143 + } else {
144 + console.warn(res);
145 + if (!res.data.show) return false;
146 + Toast({
147 + icon: 'close',
148 + message: res.data.msg
149 + });
150 + }
151 + })
152 + .catch(err => {
153 + console.error(err);
154 + })
155 +}
156 +
157 +const show = ref(false);
158 +let popupHeight = ref('100%');
159 +
160 +watch(() => props.showPopup, (v) => {
161 + // 如果没有默认儿童需要用户确认一次
162 + if (v && !props.item.perf_id) {
163 + Dialog.confirm({
164 + title: '温馨提示',
165 + message: '默认儿童为空, 是否继续捐书!',
166 + confirmButtonColor: '#713610'
167 + })
168 + .then(() => {
169 + show.value = v;
170 + // DOM调整后,把弹出框高度设定到适合高度,配合不同分辨率效果
171 + nextTick(() => {
172 + let height = $('.donate-wrapper').height();
173 + popupHeight.value = height + 10 + 'px';
174 + })
175 + })
176 + .catch(() => {
177 + // 取消按钮回调
178 + closeBtn();
179 + });
180 + return false;
181 + }
182 + show.value = v;
183 + // DOM调整后,把弹出框高度设定到适合高度,配合不同分辨率效果
184 + nextTick(() => {
185 + let height = $('.donate-wrapper').height();
186 + popupHeight.value = height + 10 + 'px';
187 + })
188 +})
189 +
190 +const closeBtn = () => {
191 + emit('on-close', false)
192 + show.value = false;
193 +}
194 +
195 +const cancelDonate = () => {
196 + closeBtn();
197 +}
198 +
199 +// TODO: 微信支付
200 +
201 +onMounted(() => {
202 +
203 +})
204 +// 选择捐赠数量
205 +const checked_one_flower = ref(true);
206 +const checked_two_flower = ref(false);
207 +const checked_three_flower = ref(false);
208 +const checkFlower = (number) => {
209 + switch (number) {
210 + case 1:
211 + checked_one_flower.value = true;
212 + checked_two_flower.value = false;
213 + checked_three_flower.value = false;
214 + donate_number.value = 1;
215 + break;
216 + case 2:
217 + checked_one_flower.value = false;
218 + checked_two_flower.value = true;
219 + checked_three_flower.value = false;
220 + donate_number.value = 2;
221 + break;
222 + case 3:
223 + checked_one_flower.value = false;
224 + checked_two_flower.value = false;
225 + checked_three_flower.value = true;
226 + donate_number.value = 3;
227 + break;
228 + }
229 +}
230 +// 捐赠协议
231 +const agreed = ref(false);
232 +// 显示捐赠协议弹框
233 +const showDonationAgreement = ref(false);
234 +const handleDonationAgreement = () => {
235 + showDonationAgreement.value = true
236 +}
237 +const closeDonationAgreement = () => {
238 + showDonationAgreement.value = false
239 +}
240 +</script>
241 +
242 +<style lang="less" scoped>
243 +.donate-wrapper {
244 + .donate-title {
245 + padding: 1rem 1rem 0 1rem;
246 + color: #999999;
247 + text-align: center;
248 + }
249 + .shortcut-choose-wrapper {
250 + padding: 1rem;
251 +
252 + .base-item {
253 + text-align: center;
254 + color: #713610;
255 + padding: 0.5rem 0;
256 + }
257 +
258 + .checked-item {
259 + background: #F9EA57;
260 + border-radius: 3px;
261 + border: 1px solid #F9EA57;
262 + }
263 +
264 + .uncheck-item {
265 + background: #FFFFFF;
266 + border-radius: 3px;
267 + border: 1px solid #713610;
268 + }
269 + }
270 +
271 + .donate-name {
272 + padding: 1rem;
273 +
274 + .donate-text {
275 + background: #F4F4F4;
276 + border-radius: 3px;
277 + padding: 0.5rem;
278 + margin-left: 5%;
279 + width: 95%;
280 + }
281 + .donate-input {
282 + border: 1px solid #B9B9B9;
283 + border-radius: 5px;
284 + padding: 0.2rem;
285 + margin-left: 1rem;
286 + }
287 + }
288 +
289 + .donate-number {
290 + padding: 1rem;
291 + }
292 +
293 + .donate-handle {
294 + overflow: auto;
295 +
296 + .donate-cancel {
297 + width: 49%;
298 + float: left;
299 + }
300 +
301 + .donate-imd {
302 + width: 50%;
303 + float: left;
304 + }
305 + }
306 +}
307 +
308 +.button {
309 + display: flex;
310 + flex-direction: column;
311 + justify-content: center;
312 + flex: 1;
313 + padding: 0 0.5rem;
314 +}
315 +
316 +.bottom-btn {
317 + position: absolute;
318 + bottom: 0;
319 + left: 0;
320 + right: 0;
321 + background-color: white;
322 + box-shadow: 0px -2px 4px 0px rgba(0, 0, 0, 0.07);
323 + .text {
324 + text-align: center;
325 + padding: 0.7rem;
326 + margin: 0.8rem;
327 + font-size: 1rem;
328 + font-weight: bold;
329 + border-radius: 24px;
330 + // border: 1px solid F7F7F7;
331 + color: #713610;
332 + background-color: @base-color;
333 + box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.06);
334 + }
335 +}
336 +</style>
1 +/*
2 + * @Author: hookehuyr hookehuyr@gmail.com
3 + * @Date: 2022-05-31 12:06:19
4 + * @LastEditors: hookehuyr hookehuyr@gmail.com
5 + * @LastEditTime: 2022-06-01 00:50:37
6 + * @FilePath: /tswj/src/main.js
7 + * @Description:
8 + */
1 import { createApp } from 'vue'; 9 import { createApp } from 'vue';
2 -import { Button, Image as VanImage, Col, Row, Icon, Form, Field, CellGroup, ConfigProvider, Toast, Uploader, Empty, Tab, Tabs, Overlay, NumberKeyboard, Lazyload, List, PullRefresh, Popup, Picker, Sticky, Stepper, Tag, Swipe, SwipeItem, Dialog, ActionSheet, Loading } from 'vant'; 10 +import { Button, Image as VanImage, Col, Row, Icon, Form, Field, CellGroup, ConfigProvider, Toast, Uploader, Empty, Tab, Tabs, Overlay, NumberKeyboard, Lazyload, List, PullRefresh, Popup, Picker, Sticky, Stepper, Tag, Swipe, SwipeItem, Dialog, ActionSheet, Loading, Checkbox } from 'vant';
3 import router from './router'; 11 import router from './router';
4 import App from './App.vue'; 12 import App from './App.vue';
5 // import axios from './utils/axios'; 13 // import axios from './utils/axios';
...@@ -12,7 +20,7 @@ const app = createApp(App); ...@@ -12,7 +20,7 @@ const app = createApp(App);
12 20
13 app.config.globalProperties.$http = axios; // 关键语句 21 app.config.globalProperties.$http = axios; // 关键语句
14 22
15 -app.use(pinia).use(router).use(Button).use(VanImage).use(Col).use(Row).use(Icon).use(Form).use(Field).use(CellGroup).use(Toast).use(Uploader).use(Empty).use(Tab).use(Tabs).use(Overlay).use(NumberKeyboard).use(Lazyload).use(List).use(PullRefresh).use(Popup).use(Picker).use(Sticky).use(Stepper).use(Tag).use(Swipe).use(SwipeItem).use(Dialog).use(ActionSheet).use(Loading); 23 +app.use(pinia).use(router).use(Button).use(VanImage).use(Col).use(Row).use(Icon).use(Form).use(Field).use(CellGroup).use(Toast).use(Uploader).use(Empty).use(Tab).use(Tabs).use(Overlay).use(NumberKeyboard).use(Lazyload).use(List).use(PullRefresh).use(Popup).use(Picker).use(Sticky).use(Stepper).use(Tag).use(Swipe).use(SwipeItem).use(Dialog).use(ActionSheet).use(Loading).use(Checkbox);
16 24
17 app.use(ConfigProvider); 25 app.use(ConfigProvider);
18 26
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
2 * @Author: hookehuyr hookehuyr@gmail.com 2 * @Author: hookehuyr hookehuyr@gmail.com
3 * @Date: 2022-05-17 11:17:58 3 * @Date: 2022-05-17 11:17:58
4 * @LastEditors: hookehuyr hookehuyr@gmail.com 4 * @LastEditors: hookehuyr hookehuyr@gmail.com
5 - * @LastEditTime: 2022-05-31 18:34:18 5 + * @LastEditTime: 2022-05-31 22:11:29
6 * @FilePath: /tswj/src/utils/generateModules.js 6 * @FilePath: /tswj/src/utils/generateModules.js
7 * @Description: 7 * @Description:
8 */ 8 */
...@@ -14,6 +14,7 @@ import ShortcutFixed from '@/components/ShortcutFixed/index.vue' ...@@ -14,6 +14,7 @@ import ShortcutFixed from '@/components/ShortcutFixed/index.vue'
14 import BookCard from '@/components/BookCard/index.vue' 14 import BookCard from '@/components/BookCard/index.vue'
15 import VideoDetail from '@/components/VideoDetail/index.vue' 15 import VideoDetail from '@/components/VideoDetail/index.vue'
16 import DonateBar from '@/components/DonateBar/index.vue' 16 import DonateBar from '@/components/DonateBar/index.vue'
17 +import DonateFlower from '@/components/DonateFlower/index.vue'
17 18
18 export { 19 export {
19 MyButton, 20 MyButton,
...@@ -24,4 +25,5 @@ export { ...@@ -24,4 +25,5 @@ export {
24 BookCard, 25 BookCard,
25 VideoDetail, 26 VideoDetail,
26 DonateBar, 27 DonateBar,
28 + DonateFlower,
27 } 29 }
......
...@@ -111,7 +111,7 @@ ...@@ -111,7 +111,7 @@
111 </div> 111 </div>
112 </notice-overlay> 112 </notice-overlay>
113 113
114 - <donate-book :show-popup="showDonate" :item="userInfo" @on-close="closeDonate" /> 114 + <donate-flower :show-popup="showDonate" :item="userInfo" @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>
...@@ -124,7 +124,7 @@ ...@@ -124,7 +124,7 @@
124 import { ref, onActivated, nextTick } from 'vue' 124 import { ref, onActivated, nextTick } 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, DonateBook, ShortcutFixed } from '@/utils/generateModules' 127 +import { MyButton, VideoCard, NoticeOverlay, DonateFlower, ShortcutFixed } from '@/utils/generateModules'
128 import { icon_video, icon_up, icon_down, icon_subscribed, icon_unsubscribe, no_image } from '@/utils/generateIcons' 128 import { icon_video, icon_up, icon_down, icon_subscribed, icon_unsubscribe, no_image } from '@/utils/generateIcons'
129 import { JSJ_FORM_C } from '@/constant' 129 import { JSJ_FORM_C } from '@/constant'
130 import { useVideoList, useDefaultPerf, useShortcutBar, useScrollTop } from '@/composables'; 130 import { useVideoList, useDefaultPerf, useShortcutBar, useScrollTop } from '@/composables';
......
...@@ -6,10 +6,13 @@ ...@@ -6,10 +6,13 @@
6 <p>捐赠总金额</p> 6 <p>捐赠总金额</p>
7 <p>{{ donateInfo.total ? donateInfo.total : 0 }}&nbsp;元</p> 7 <p>{{ donateInfo.total ? donateInfo.total : 0 }}&nbsp;元</p>
8 </van-col> 8 </van-col>
9 - <van-col span="1"><div class="line"></div></van-col> 9 + <van-col span="1">
10 + <div class="line" />
11 + </van-col>
10 <van-col class="book" span="11"> 12 <van-col class="book" span="11">
11 - <p>点亮书籍</p> 13 + <p>捐赠次数</p>
12 - <p>{{ donateInfo.num ? donateInfo.num : 0 }}&nbsp;个</p> 14 + <!-- TODO: 捐赠次数数据联调-->
15 + <p>{{ donateInfo.num ? donateInfo.num : 0 }}&nbsp;次</p>
13 </van-col> 16 </van-col>
14 </van-row> 17 </van-row>
15 </div> 18 </div>
...@@ -18,8 +21,8 @@ ...@@ -18,8 +21,8 @@
18 <template v-for="(item, key) in dataList" :key="key"> 21 <template v-for="(item, key) in dataList" :key="key">
19 <div class="book-row"> 22 <div class="book-row">
20 <van-row> 23 <van-row>
21 - <van-col span="8" class="book-col" v-for="(v, index) in item" :key="index"> 24 + <van-col v-for="(v, index) in item" :key="index" span="8" class="book-col">
22 - <div @click="showCert(v)" v-if="v.is_donate" class="ENABLE"> 25 + <div v-if="v.is_donate" class="ENABLE" @click="showCert(v)">
23 <van-image width="90%" height="7rem" :src="v.cover" /> 26 <van-image width="90%" height="7rem" :src="v.cover" />
24 </div> 27 </div>
25 <div v-else class="DISABLE"> 28 <div v-else class="DISABLE">
...@@ -35,19 +38,15 @@ ...@@ -35,19 +38,15 @@
35 </div> 38 </div>
36 </template> 39 </template>
37 </div> 40 </div>
38 - <van-empty v-if="!dataList.length" 41 + <van-empty v-if="!dataList.length" class="custom-image" :image="no_image" description="暂无捐赠信息" />
39 - class="custom-image"
40 - :image="no_image"
41 - description="暂无捐赠信息"
42 - />
43 </div> 42 </div>
44 - 43 + <!-- TODO: 需要改造显示方式 -->
45 <van-overlay :show="show" @click="onHide"> 44 <van-overlay :show="show" @click="onHide">
46 <div style="width: auto; height: 100%; margin: 2rem 2rem 0 2rem; overflow: hidden;"> 45 <div style="width: auto; height: 100%; margin: 2rem 2rem 0 2rem; overflow: hidden;">
47 - <van-swipe class="my-swipe" ref="swipe"> 46 + <van-swipe ref="swipe" class="my-swipe">
48 <van-swipe-item v-for="(d, k) in certItems" :key="k"> 47 <van-swipe-item v-for="(d, k) in certItems" :key="k">
49 - <donate-cert :item="d"></donate-cert> 48 + <donate-cert :item="d" />
50 - <div style="height: 2rem;"></div> 49 + <div style="height: 2rem;" />
51 </van-swipe-item> 50 </van-swipe-item>
52 <template #indicator="{ active, total }"> 51 <template #indicator="{ active, total }">
53 <div class="custom-indicator">{{ active + 1 }}/{{ total }}</div> 52 <div class="custom-indicator">{{ active + 1 }}/{{ total }}</div>
...@@ -55,7 +54,6 @@ ...@@ -55,7 +54,6 @@
55 </van-swipe> 54 </van-swipe>
56 </div> 55 </div>
57 </van-overlay> 56 </van-overlay>
58 -
59 </template> 57 </template>
60 58
61 <script setup> 59 <script setup>
...@@ -77,7 +75,7 @@ const $router = useRouter(); ...@@ -77,7 +75,7 @@ const $router = useRouter();
77 const donateInfo = ref(''); 75 const donateInfo = ref('');
78 const dataList = ref([]); 76 const dataList = ref([]);
79 axios.post('/srv/?a=my_donate') 77 axios.post('/srv/?a=my_donate')
80 -.then(res => { 78 + .then(res => {
81 if (res.data.code === 1) { 79 if (res.data.code === 1) {
82 donateInfo.value = res.data.data; 80 donateInfo.value = res.data.data;
83 dataList.value = _.chunk(res.data.data.book, 3); 81 dataList.value = _.chunk(res.data.data.book, 3);
...@@ -89,10 +87,10 @@ axios.post('/srv/?a=my_donate') ...@@ -89,10 +87,10 @@ axios.post('/srv/?a=my_donate')
89 message: res.data.msg 87 message: res.data.msg
90 }); 88 });
91 } 89 }
92 -}) 90 + })
93 -.catch(err => { 91 + .catch(err => {
94 console.error(err); 92 console.error(err);
95 -}); 93 + });
96 94
97 // 显示捐赠证书 95 // 显示捐赠证书
98 const show = ref(false); 96 const show = ref(false);
...@@ -147,42 +145,53 @@ watch(show, (v) => { ...@@ -147,42 +145,53 @@ watch(show, (v) => {
147 padding: 1rem; 145 padding: 1rem;
148 text-align: center; 146 text-align: center;
149 color: #713610; 147 color: #713610;
148 +
150 .sum { 149 .sum {
151 line-height: 1.5; 150 line-height: 1.5;
151 +
152 p:last-child { 152 p:last-child {
153 font-weight: bold; 153 font-weight: bold;
154 font-size: 1.25rem; 154 font-size: 1.25rem;
155 } 155 }
156 } 156 }
157 +
157 .line { 158 .line {
158 border-right: 1px solid #733912; 159 border-right: 1px solid #733912;
159 height: 100%; 160 height: 100%;
160 opacity: 0.15; 161 opacity: 0.15;
161 } 162 }
163 +
162 .book { 164 .book {
163 line-height: 1.5; 165 line-height: 1.5;
166 +
164 p:last-child { 167 p:last-child {
165 font-weight: bold; 168 font-weight: bold;
166 font-size: 1.25rem; 169 font-size: 1.25rem;
167 } 170 }
168 } 171 }
169 } 172 }
173 +
170 .donate-book-wrapper { 174 .donate-book-wrapper {
171 padding: 0 1rem; 175 padding: 0 1rem;
176 +
172 .book-row { 177 .book-row {
173 margin: 1rem 0; 178 margin: 1rem 0;
174 text-align: center; 179 text-align: center;
180 +
175 .book-col { 181 .book-col {
176 padding: 0 0.5rem; 182 padding: 0 0.5rem;
183 +
177 .ENABLE { 184 .ENABLE {
178 background: #FFFFFF; 185 background: #FFFFFF;
179 box-shadow: 3px 3px 5px 0px rgba(0, 0, 0, 0.15); 186 box-shadow: 3px 3px 5px 0px rgba(0, 0, 0, 0.15);
180 border-radius: 5px; 187 border-radius: 5px;
181 border: 1px solid #FFE000; 188 border: 1px solid #FFE000;
182 } 189 }
190 +
183 .DISABLE { 191 .DISABLE {
184 border-radius: 6px; 192 border-radius: 6px;
185 position: relative; 193 position: relative;
194 +
186 .mask { 195 .mask {
187 position: absolute; 196 position: absolute;
188 width: 100%; 197 width: 100%;
...@@ -190,12 +199,14 @@ watch(show, (v) => { ...@@ -190,12 +199,14 @@ watch(show, (v) => {
190 background: rgba(0, 0, 0, 0.4); 199 background: rgba(0, 0, 0, 0.4);
191 border-radius: 6px; 200 border-radius: 6px;
192 top: 0; 201 top: 0;
202 +
193 img { 203 img {
194 margin-top: 20%; 204 margin-top: 20%;
195 width: 50%; 205 width: 50%;
196 } 206 }
197 } 207 }
198 } 208 }
209 +
199 .text { 210 .text {
200 font-size: 1rem; 211 font-size: 1rem;
201 margin-top: 0.5rem; 212 margin-top: 0.5rem;
......