hookehuyr

✨ feat(组件): 新增捐赠功能控件

1 +<template>
2 + <van-popup v-model:show="show" :close-on-click-overlay="false" round position="bottom" :style="{ height: popupHeight }">
3 + <div class="donate-wrapper">
4 + <div class="donate-header">
5 + <van-row>
6 + <van-col>
7 + <div class="donate-book">
8 + <van-image width="80" height="80" src="https://lanhu.oss-cn-beijing.aliyuncs.com/SketchPngc434046fdf1f9499d251b280af2568ddbe64839799d00a9aee226edbeb710aed" />
9 + </div>
10 + </van-col>
11 + <van-col>
12 + <div class="donate-detail">
13 + <p class="text">逃家小兔绘本</p>
14 + <p class="price">¥59</p>
15 + </div>
16 + </van-col>
17 + </van-row>
18 + </div>
19 + <div class="donate-name">
20 + <van-row>
21 + <van-col span="4" style="line-height: 2;">捐赠人<span style="color: red;">*</span></van-col>
22 + <van-col class="donate-input" span="18">
23 + <input v-model="donate_name" type="text" style="border: 0; padding: 0.25rem;" />
24 + </van-col>
25 + </van-row>
26 + </div>
27 + <div class="van-hairline--bottom donate-tips">
28 + <p style="color: #999999;">
29 + <van-icon name="warning-o" />&nbsp;&nbsp;您捐献的书籍将用于多民族语言发展项目
30 + </p>
31 + </div>
32 + <div class="donate-number">
33 + <van-row>
34 + <van-col span="12"> 数量 </van-col>
35 + <van-col span="12" style="text-align: right;">
36 + <van-stepper v-model="donate_number" min="1" max="100" integer input-width="40px" button-size="32px" />
37 + </van-col>
38 + </van-row>
39 + </div>
40 + <div class="donate-handle">
41 + <div class="donate-cancel">
42 + <my-button @on-click="cancelDonate" type="plain">取消</my-button>
43 + </div>
44 + <div class="donate-imd">
45 + <my-button @on-click="donateBook" type="primary">立即捐赠</my-button>
46 + </div>
47 + </div>
48 + </div>
49 + </van-popup>
50 +</template>
51 +
52 +<script setup>
53 +import MyButton from '@/components/MyButton/index.vue'
54 +import { ref, reactive, onMounted } from 'vue'
55 +import { useRoute, useRouter } from 'vue-router'
56 +import axios from '@/utils/axios';
57 +import $ from 'jquery'
58 +import { Toast } from 'vant';
59 +const $route = useRoute();
60 +const $router = useRouter();
61 +
62 +onMounted(() => {
63 +
64 +})
65 +</script>
66 +
67 +<script>
68 +import mixin from 'common/mixin';
69 +
70 +export default {
71 + props: ['showPopup'],
72 + mixins: [mixin.init],
73 + data() {
74 + return {
75 + popupHeight: '60%',
76 + show: false,
77 + donate_number: 1,
78 + donate_name: ''
79 + }
80 + },
81 + mounted() {
82 + },
83 + watch: {
84 + showPopup(value, pre) {
85 + if (value) {
86 + this.show = value;
87 + // DOM调整后,把弹出框高度设定到适合高度,配合不同分辨率效果
88 + this.$nextTick(() => {
89 + let height = $('.donate-wrapper').height();
90 + this.popupHeight = height + 10 + 'px';
91 + })
92 + }
93 + }
94 + },
95 + methods: {
96 + closeBtn() {
97 + this.$emit('on-close', false)
98 + this.show = false;
99 + },
100 + cancelDonate() {
101 + this.closeBtn();
102 + },
103 + donateBook() {
104 + console.warn(this.donate_name);
105 + console.warn(this.donate_number);
106 + this.closeBtn();
107 + },
108 + }
109 +}
110 +</script>
111 +
112 +<style lang="less" scoped>
113 +.donate-wrapper {
114 + .donate-header {
115 + padding: 1rem;
116 + .donate-book {
117 + border: 1px solid #ECECEC;
118 + border-radius: 5px;
119 + padding: 0.1rem;
120 + .donate-detail {
121 + font-size: 1.25rem;
122 + padding: 1rem;
123 + .text {
124 + color: #292929;
125 + font-weight: bold;
126 + }
127 + .price {
128 + color: #EE332E;
129 + }
130 + }
131 + }
132 + }
133 + .donate-name {
134 + padding: 1rem;
135 + .donate-input {
136 + border: 1px solid #B9B9B9;
137 + border-radius: 5px;
138 + padding: 0.2rem;
139 + margin-left: 1rem;
140 + }
141 + }
142 + .donate-tips {
143 + padding: 1rem;
144 + padding-top: 0;
145 + }
146 + .donate-number {
147 + padding: 1rem;
148 + }
149 + .donate-handle {
150 + overflow: auto;
151 + .donate-cancel {
152 + width: 49%;
153 + float: left;
154 + }
155 + .donate-imd {
156 + width: 50%;
157 + float: left;
158 + }
159 + }
160 +}
161 +.button {
162 + display: flex;
163 + flex-direction: column;
164 + justify-content: center;
165 + flex: 1;
166 + padding: 0 0.5rem;
167 +}
168 +</style>
...\ No newline at end of file ...\ No newline at end of file