hookehuyr

🦄 refactor(捐花组件): 代码优化

...@@ -2,12 +2,13 @@ ...@@ -2,12 +2,13 @@
2 * @Author: hookehuyr hookehuyr@gmail.com 2 * @Author: hookehuyr hookehuyr@gmail.com
3 * @Date: 2022-05-31 22:09:58 3 * @Date: 2022-05-31 22:09:58
4 * @LastEditors: hookehuyr hookehuyr@gmail.com 4 * @LastEditors: hookehuyr hookehuyr@gmail.com
5 - * @LastEditTime: 2022-06-07 16:41:09 5 + * @LastEditTime: 2022-06-09 00:43:28
6 * @FilePath: /tswj/src/components/DonateFlower/index.vue 6 * @FilePath: /tswj/src/components/DonateFlower/index.vue
7 * @Description: 捐花组件 7 * @Description: 捐花组件
8 --> 8 -->
9 <template> 9 <template>
10 - <van-popup v-model:show="show" :close-on-click-overlay="false" round position="bottom" :style="{ height: popupHeight, zIndex: 3000 }"> 10 + <van-popup v-model:show="show" :close-on-click-overlay="false" round position="bottom"
11 + :style="{ height: popupHeight, zIndex: 3000 }">
11 <div class="donate-wrapper"> 12 <div class="donate-wrapper">
12 <div class="donate-title"> 13 <div class="donate-title">
13 您所有捐助的爱心 14 您所有捐助的爱心
...@@ -16,8 +17,9 @@ ...@@ -16,8 +17,9 @@
16 </div> 17 </div>
17 <div class="shortcut-choose-wrapper"> 18 <div class="shortcut-choose-wrapper">
18 <van-row gutter="10"> 19 <van-row gutter="10">
19 - <van-col v-for="(v, index) in checkList" :key="index" span="8"> 20 + <van-col v-for="(v, index) in defaultOptions" :key="index" span="8">
20 - <div :class="['base-item', donate_number === +index ? 'checked-item' : 'uncheck-item']" @click="donate_number = +index"> 21 + <div :class="['base-item', donate_number === +index ? 'checked-item' : 'uncheck-item']"
22 + @click="donate_number = +index">
21 {{ v }} 23 {{ v }}
22 </div> 24 </div>
23 </van-col> 25 </van-col>
...@@ -32,7 +34,7 @@ ...@@ -32,7 +34,7 @@
32 </van-col> 34 </van-col>
33 </van-row> 35 </van-row>
34 </div> 36 </div>
35 - <div v-if="userType === 'C' || userType === 'K'" class="donate-name"> 37 + <div v-if="userType === USER_TYPE.CHILDREN || userType === USER_TYPE.KINDERGARTEN" class="donate-name">
36 <van-row> 38 <van-row>
37 <van-col span="4" style="line-height: 2;">幼儿园</van-col> 39 <van-col span="4" style="line-height: 2;">幼儿园</van-col>
38 <van-col span="18"> 40 <van-col span="18">
...@@ -40,7 +42,7 @@ ...@@ -40,7 +42,7 @@
40 </van-col> 42 </van-col>
41 </van-row> 43 </van-row>
42 </div> 44 </div>
43 - <div v-if="userType === 'C'" class="donate-name"> 45 + <div v-if="userType === USER_TYPE.CHILDREN" class="donate-name">
44 <van-row> 46 <van-row>
45 <van-col span="4" style="line-height: 2;">助力人</van-col> 47 <van-col span="4" style="line-height: 2;">助力人</van-col>
46 <van-col span="18"> 48 <van-col span="18">
...@@ -63,7 +65,7 @@ ...@@ -63,7 +65,7 @@
63 <van-checkbox v-model="agreed" checked-color="#ee0a24">同意&nbsp;</van-checkbox> 65 <van-checkbox v-model="agreed" checked-color="#ee0a24">同意&nbsp;</van-checkbox>
64 </div> 66 </div>
65 <div class="text"> 67 <div class="text">
66 - <span @click="handleDA">捐赠协议</span> 68 + <span @click="showDA=true">捐赠协议</span>
67 </div> 69 </div>
68 </div> 70 </div>
69 </van-col> 71 </van-col>
...@@ -81,8 +83,8 @@ ...@@ -81,8 +83,8 @@
81 </van-popup> 83 </van-popup>
82 <div class="popup-wrapper"> 84 <div class="popup-wrapper">
83 <van-popup v-model:show="showDA" position="bottom" :style="{ height: '100%', zIndex: 4000 }"> 85 <van-popup v-model:show="showDA" position="bottom" :style="{ height: '100%', zIndex: 4000 }">
84 - <div class="agreementHtml" v-html="agreementHtml"></div> 86 + <div class="agreementHtml" v-html="agreementHtml" />
85 - <div class="bottom-btn" @click="closeDA"> 87 + <div class="bottom-btn" @click="showDA=false">
86 <div class="text">关闭</div> 88 <div class="text">关闭</div>
87 </div> 89 </div>
88 </van-popup> 90 </van-popup>
...@@ -97,6 +99,7 @@ import { useRouter } from 'vue-router' ...@@ -97,6 +99,7 @@ import { useRouter } from 'vue-router'
97 import { $, Toast } from '@/utils/generatePackage' 99 import { $, Toast } from '@/utils/generatePackage'
98 import { addDonateAPI } from '@/api/C/donate.js' 100 import { addDonateAPI } from '@/api/C/donate.js'
99 import agreementHtml from './agreement' 101 import agreementHtml from './agreement'
102 +import { USER_TYPE } from '@/constant'
100 103
101 const $router = useRouter(); 104 const $router = useRouter();
102 const props = defineProps({ 105 const props = defineProps({
...@@ -107,26 +110,35 @@ const props = defineProps({ ...@@ -107,26 +110,35 @@ const props = defineProps({
107 const emit = defineEmits(['on-close']); 110 const emit = defineEmits(['on-close']);
108 111
109 let donate_number = ref(1); 112 let donate_number = ref(1);
110 -const donateFlower = async () => { 113 +const donateFlower = () => {
111 if (!agreed.value) { 114 if (!agreed.value) {
112 Toast.fail('请选勾选同意按钮!'); 115 Toast.fail('请选勾选同意按钮!');
113 return false; 116 return false;
114 } 117 }
115 // 捐钱接口 118 // 捐钱接口
116 // 根据类型过滤提交数据 119 // 根据类型过滤提交数据
117 - // C 儿童: 提交 perf_id,kg_id 120 + // 儿童: 提交 perf_id,kg_id
118 - // K 幼儿园: 提交 kg_id 121 + // 幼儿园: 提交 kg_id
119 - // V 访客: 不提交 perf_id,kg_id 122 + // 访客
120 let params = { 123 let params = {
121 - qty: donate_number.value, 124 + qty: donate_number.value,
122 donate_name: props.item.donate_name, 125 donate_name: props.item.donate_name,
123 }; 126 };
124 - if (props.userType === 'C') { // 助力TA 127 + switch (props.userType) {
125 - params.perf_id = props.item.perf_id; 128 + case USER_TYPE.CHILDREN:
126 - params.kg_id = props.item.kg_id; 129 + params.perf_id = props.item.perf_id;
127 - } else if (props.userType === 'K') { 130 + params.kg_id = props.item.kg_id;
128 - params.kg_id = props.item.kg_id; 131 + break;
132 + case USER_TYPE.KINDERGARTEN:
133 + params.kg_id = props.item.kg_id;
134 + break;
135 + case USER_TYPE.VISIT:
136 + break;
129 } 137 }
138 + addDonate(params);
139 +}
140 +
141 +const addDonate = async (params) => {
130 const { data } = await addDonateAPI(params); 142 const { data } = await addDonateAPI(params);
131 if (data.id) { 143 if (data.id) {
132 closeBtn(); 144 closeBtn();
...@@ -190,7 +202,7 @@ onMounted(() => { ...@@ -190,7 +202,7 @@ onMounted(() => {
190 202
191 }) 203 })
192 // 选择捐赠数量 204 // 选择捐赠数量
193 -const checkList = ref({ 205 +const defaultOptions = ref({
194 1: '1朵金花', 206 1: '1朵金花',
195 2: '2朵金花', 207 2: '2朵金花',
196 3: '3朵金花', 208 3: '3朵金花',
...@@ -199,21 +211,16 @@ const checkList = ref({ ...@@ -199,21 +211,16 @@ const checkList = ref({
199 const agreed = ref(false); 211 const agreed = ref(false);
200 // 显示捐赠协议弹框 212 // 显示捐赠协议弹框
201 const showDA = ref(false); 213 const showDA = ref(false);
202 -const handleDA = () => {
203 - showDA.value = true
204 -}
205 -const closeDA = () => {
206 - showDA.value = false
207 -}
208 </script> 214 </script>
209 215
210 <style lang="less" scoped> 216 <style lang="less" scoped>
211 .donate-wrapper { 217 .donate-wrapper {
212 .donate-title { 218 .donate-title {
213 - padding: 1rem 1rem 0 1rem; 219 + padding: 1rem 1rem 0 1rem;
214 - color: #999999; 220 + color: #999999;
215 text-align: center; 221 text-align: center;
216 } 222 }
223 +
217 .shortcut-choose-wrapper { 224 .shortcut-choose-wrapper {
218 padding: 1rem; 225 padding: 1rem;
219 226
...@@ -241,12 +248,13 @@ const closeDA = () => { ...@@ -241,12 +248,13 @@ const closeDA = () => {
241 padding: 1rem; 248 padding: 1rem;
242 249
243 .donate-text { 250 .donate-text {
244 - background: #F4F4F4; 251 + background: #F4F4F4;
245 border-radius: 3px; 252 border-radius: 3px;
246 - padding: 0.5rem; 253 + padding: 0.5rem;
247 - margin-left: 5%; 254 + margin-left: 5%;
248 width: 95%; 255 width: 95%;
249 } 256 }
257 +
250 .donate-input { 258 .donate-input {
251 border: 1px solid #B9B9B9; 259 border: 1px solid #B9B9B9;
252 border-radius: 5px; 260 border-radius: 5px;
...@@ -254,17 +262,29 @@ const closeDA = () => { ...@@ -254,17 +262,29 @@ const closeDA = () => {
254 margin-left: 1rem; 262 margin-left: 1rem;
255 } 263 }
256 } 264 }
265 +
257 .agree-wrapper { 266 .agree-wrapper {
258 margin: 1rem 0; 267 margin: 1rem 0;
268 +
259 .agree-content { 269 .agree-content {
260 - display: flex;align-items: center; box-sizing: content-box; 270 + display: flex;
271 + align-items: center;
272 + box-sizing: content-box;
273 +
261 .btn { 274 .btn {
262 - display: flex; flex-direction: column; justify-content: center; 275 + display: flex;
276 + flex-direction: column;
277 + justify-content: center;
263 } 278 }
279 +
264 .text { 280 .text {
265 - display: flex; flex-direction: column; justify-content: center; 281 + display: flex;
282 + flex-direction: column;
283 + justify-content: center;
284 +
266 span { 285 span {
267 - text-decoration: underline; color: #11D2B1; 286 + text-decoration: underline;
287 + color: #11D2B1;
268 } 288 }
269 } 289 }
270 } 290 }
...@@ -304,6 +324,7 @@ const closeDA = () => { ...@@ -304,6 +324,7 @@ const closeDA = () => {
304 right: 0; 324 right: 0;
305 background-color: white; 325 background-color: white;
306 box-shadow: 0px -2px 4px 0px rgba(0, 0, 0, 0.07); 326 box-shadow: 0px -2px 4px 0px rgba(0, 0, 0, 0.07);
327 +
307 .text { 328 .text {
308 text-align: center; 329 text-align: center;
309 padding: 0.7rem; 330 padding: 0.7rem;
......