|
@@ -35,23 +35,24 @@
|
|
|
<div class="method">
|
|
|
<p class="method-title">Email invitation</p>
|
|
|
<textarea
|
|
|
+ v-model="emails"
|
|
|
placeholder="Enter email addresses, multiple mailboxes are separated by“ ,”"
|
|
|
></textarea>
|
|
|
</div>
|
|
|
- <button class="ptc-button">Send invitation</button>
|
|
|
+ <button class="ptc-button" @click="invite">Send invitation</button>
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
|
|
|
<div class="p-bottom">
|
|
|
- <h3 class="ptc-title">My Reward $90</h3>
|
|
|
+ <h3 class="ptc-title">My Reward ${{ totalAmount }}</h3>
|
|
|
<div class="block records">
|
|
|
<div class="ptc-inner-md">
|
|
|
<ul>
|
|
|
- <li v-for="n of 5" :key="n" class="record">
|
|
|
- <span class="left">John</span>
|
|
|
- <span class="center">2021/09/02</span>
|
|
|
- <span class="right">$10</span>
|
|
|
+ <li v-for="(award, index) of awards" :key="index" class="record">
|
|
|
+ <span class="left">{{ award.title }}</span>
|
|
|
+ <span class="center">{{ award.created_at }}</span>
|
|
|
+ <span class="right">${{ award.gift_card_amount }}</span>
|
|
|
</li>
|
|
|
</ul>
|
|
|
</div>
|
|
@@ -77,6 +78,49 @@
|
|
|
</div>
|
|
|
</template>
|
|
|
|
|
|
+<script lang="ts">
|
|
|
+import { defineComponent } from 'vue'
|
|
|
+import { string } from 'yup'
|
|
|
+import { inviteFriends, getInviteRewards } from '@/service/user'
|
|
|
+import Toast from '@/components/toast'
|
|
|
+
|
|
|
+export default defineComponent({
|
|
|
+ name: 'InviteFriends',
|
|
|
+ async beforeRouteEnter(to, from, next) {
|
|
|
+ const { results } = await getInviteRewards()
|
|
|
+ next((vm: any) => (vm.awards = results))
|
|
|
+ },
|
|
|
+ data() {
|
|
|
+ return {
|
|
|
+ emails: '',
|
|
|
+ awards: [] as any[],
|
|
|
+ }
|
|
|
+ },
|
|
|
+ computed: {
|
|
|
+ totalAmount() {
|
|
|
+ // @ts-ignore
|
|
|
+ return this.awards.reduce((sum, award) => sum + award.gift_card_amount, 0)
|
|
|
+ },
|
|
|
+ },
|
|
|
+ methods: {
|
|
|
+ async invite() {
|
|
|
+ if (!this.emails) return Toast('Please enter email addresses')
|
|
|
+ try {
|
|
|
+ this.emails
|
|
|
+ .split(',')
|
|
|
+ .forEach(email =>
|
|
|
+ string().email('Please check email addresses').validateSync(email)
|
|
|
+ )
|
|
|
+ await inviteFriends(this.emails)
|
|
|
+ Toast('done')
|
|
|
+ } catch (err) {
|
|
|
+ Toast(err.message)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ },
|
|
|
+})
|
|
|
+</script>
|
|
|
+
|
|
|
<style lang="scss">
|
|
|
.p-invite {
|
|
|
.p-top {
|