Browse Source

feat(activity): 添加线下活动功能

EvilDragon 4 months ago
parent
commit
3d071a6ac1

+ 7 - 2
packages/app/src/components/bottom-app-bar.vue

@@ -6,6 +6,7 @@ const props = defineProps<{
   fixed?: boolean
   placeholder?: boolean
   border?: boolean
+  transparent?: boolean
 }>()
 
 const { proxy } = getCurrentInstance() as any
@@ -44,10 +45,14 @@ onMounted(async () => {
         border ? 'border-t border-t-solid border-[#ececec]' : '',
       ]"
     >
-      <div class="px-3.5 py-2.5 bg-white">
+      <div class="px-3.5 py-2.5" :class="[transparent ? '' : 'bg-white']">
         <div class=""><slot></slot></div>
       </div>
-      <div class="bg-white" :style="{ height: `${safeAreaInsets?.bottom}rpx` }"></div>
+      <div
+        class=""
+        :class="[transparent ? '' : 'bg-white']"
+        :style="{ height: `${safeAreaInsets?.bottom}rpx` }"
+      ></div>
     </div>
   </div>
 </template>

+ 1 - 1
packages/app/src/components/nav-bar-evo.vue

@@ -1,6 +1,6 @@
 <script setup lang="ts">
 defineProps<{
-  title: string
+  title?: string
 }>()
 const navBarProps = ref({
   fixed: true,

+ 8 - 8
packages/app/src/components/navbar-evo.vue

@@ -1,22 +1,22 @@
 <script lang="ts" setup>
+import { ConfigProviderThemeVars } from 'wot-design-uni'
 import { useRouter } from '../core/utils/router'
 
-defineProps({
-  transparent: {
-    type: Boolean,
-    default: false,
-  },
-})
+const props = defineProps<{ transparent?: boolean; title?: string; dark?: boolean }>()
 const router = useRouter()
+const themeVars = computed<ConfigProviderThemeVars>(() => ({
+  navbarColor: props.dark ? 'white' : 'black',
+}))
 </script>
 <template>
-  <wd-config-provider>
+  <wd-config-provider :themeVars="themeVars">
     <wd-navbar
       fixed
       left-arrow
       safe-area-inset-top
       :bordered="false"
-      :custom-class="`${transparent ? 'bg-transparent!' : ''}`"
+      :custom-class="`${transparent ? 'bg-transparent!' : ''} `"
+      v-bind="{ title }"
       @click-left="router.back()"
     ></wd-navbar>
   </wd-config-provider>

+ 12 - 0
packages/app/src/core/libs/requests.ts

@@ -10,6 +10,7 @@ import {
   MaterialDealerRes,
   Moment,
   Comment,
+  Activity,
 } from '../models/moment'
 import dayjs from 'dayjs'
 
@@ -137,6 +138,8 @@ export const getByDictType = (
       status: number
     }[]
   >('/app-api/system/dict-data/type', { type })
+export const validateReferrerCode = (data: { code: string }) =>
+  httpPost('/app-api/member/user-auth-info/referrer-validate-code', {}, data)
 export const createUserAuthInfo = (
   data: Partial<{
     id: number
@@ -344,6 +347,15 @@ export const getProduct = (id: string) =>
     createTime: number
     updateTime: number
   }>('/app-api/member/product/detail', { productId: id })
+export const getActivities = (query) =>
+  httpGet<{
+    list: Activity[]
+  }>('/app-api/member/activity/page', query)
+export const getActivity = (id: string) => httpGet<Activity>('/app-api/member/activity/get', { id })
+export const activitySignup = (data: { id: number }) =>
+  httpPost('/app-api/member/activity/signup', data)
+export const getActivitySignups = (query: { activityId: string }) =>
+  httpGet('/app-api/member/activity/signup/page', query)
 export const refreshToken = (refreshToken: string) =>
   httpPost<any>('/app-api/member/auth/refresh-token', {}, { refreshToken })
 export const httpGetMock = <T>(data: T) =>

+ 28 - 0
packages/app/src/core/models/moment.ts

@@ -227,6 +227,34 @@ export interface Category {
   level: number
   children?: Category[]
 }
+export interface Activity {
+  id: number
+  name: string
+  activityType: string
+  applyStartTime: string
+  studyStartTime: string
+  applyEndTime: string
+  applyStatus: string
+  applyNumber: string
+  studyYear: string
+  activityStartTime: string
+  activityEndTime: string
+  activityAllowType: string
+  activityAllowCount: number
+  activityAddr: string
+  needPointsType: string
+  needPointsCount: number
+  badgeId: number
+  memberLevel: any[]
+  bannerUrl: string
+  thumbnailUrl: string
+  backgroundUrl: string
+  activityDesc: string
+  showStatus: number
+  headRecommend: number
+  viewCount: number
+  createTime: string
+}
 export enum DictType {
   /**
    *  擅长空间类型

+ 7 - 0
packages/app/src/pages.json

@@ -328,6 +328,13 @@
       }
     },
     {
+      "path": "pages/home/activity/detail/index",
+      "type": "page",
+      "style": {
+        "navigationStyle": "custom"
+      }
+    },
+    {
       "path": "pages/home/mall/confirm-order/index",
       "type": "page",
       "style": {

+ 223 - 0
packages/app/src/pages/home/activity/detail/index.vue

@@ -0,0 +1,223 @@
+<route lang="json">
+{
+  "style": {
+    "navigationStyle": "custom"
+  }
+}
+</route>
+<script setup lang="ts">
+import NavbarEvo from '@/components/navbar-evo.vue'
+import { activitySignup, getActivity, getActivitySignups } from '../../../../core/libs/requests'
+import { bell, map, rightFill } from '@designer-hub/assets/src/assets/svgs'
+import TiltedButton from '@/components/tilted-button.vue'
+import dayjs from 'dayjs'
+import BottomAppBar from '@/components/bottom-app-bar.vue'
+import { useRouter } from '../../../../core/utils/router'
+import PageHelper from '@/components/page-helper.vue'
+
+const router = useRouter()
+const id = ref()
+const { data, run: setData } = useRequest(() => getActivity(id.value))
+const show = ref(false)
+const successShow = ref(false)
+const listShow = ref(false)
+
+const handleConfirm = async () => {
+  const { data, code, msg } = await activitySignup({ id: id.value })
+  console.log(msg)
+  if (code === 0) {
+    // todo: 报名成功弹框
+    show.value = false
+    successShow.value = true
+  }
+}
+onLoad(async (query: { id: string }) => {
+  id.value = query.id
+  await setData()
+  console.log(data.value)
+})
+</script>
+<template>
+  <div class="flex-grow bg-[#36200f] px-3.5">
+    <NavbarEvo transparent dark></NavbarEvo>
+    <div class="aspect-[1.26/1] relative">
+      <wd-img width="100%" height="100%" src=""></wd-img>
+      <div
+        class="absolute bottom-3 bg-white/20 rounded-[20px] backdrop-blur-[6px] px-3.5 py-1 flex gap-2.5"
+        @click="listShow = true"
+      >
+        <wd-img width="20" height="20" :src="bell"></wd-img>
+        <div class="text-[#c1c1c1] text-base font-normal font-['PingFang SC'] leading-normal">
+          白金会员王凯峰已报名
+        </div>
+        <div class="w-6 bg-black aspect-square rounded-full flex items-center justify-center">
+          <wd-img width="18" height="18" :src="rightFill"></wd-img>
+        </div>
+      </div>
+    </div>
+    <div class="flex">
+      <wd-img width="18" height="18" :src="map"></wd-img>
+      <div class="text-[#c1c1c1] text-base font-normal font-['PingFang SC'] leading-normal">
+        第一站
+      </div>
+    </div>
+    <div class="w-[347px] text-white text-[26px] font-normal font-['PingFang SC'] leading-[44px]">
+      <!-- 日本研学·东京艺术大学设计游学 -->
+      {{ data?.name }}
+      <div class="inline-block py-1.5 px-4 bg-white rounded-[20px] backdrop-blur-[15px]">
+        <div
+          class="w-[42px] h-[21px] text-[#a60707] text-sm font-normal font-['PingFang SC'] leading-relaxed"
+        >
+          报名中
+        </div>
+      </div>
+    </div>
+    <div class="px-4 py-6 bg-[#29170b] rounded-2xl my-8">
+      <div class="flex items-center">
+        <wd-img width="16" height="16"></wd-img>
+        <div
+          class="w-[70px] text-[#c1c1c1] text-base font-normal font-['PingFang SC'] leading-normal"
+        >
+          报名时间
+        </div>
+        <div class="w-4"></div>
+        <div
+          class="flex items-center text-white text-base font-normal font-['PingFang SC'] leading-[34px]"
+        >
+          {{ dayjs(data.applyStartTime).format('YYYY.MM.DD') }}
+          <wd-icon name="play" size="22px"></wd-icon>
+          {{ dayjs(data.applyEndTime).format('YYYY.MM.DD') }}
+        </div>
+      </div>
+      <div class="flex items-center">
+        <wd-img width="16" height="16"></wd-img>
+        <div
+          class="w-[70px] text-[#c1c1c1] text-base font-normal font-['PingFang SC'] leading-normal"
+        >
+          游学时间
+        </div>
+        <div class="w-4"></div>
+        <div
+          class="flex items-center text-white text-base font-normal font-['PingFang SC'] leading-[34px]"
+        >
+          <!-- 2024.12.15 2025.01.15 -->
+          {{ dayjs(data.activityStartTime).format('YYYY.MM.DD') }}
+          <wd-icon name="play" size="22px"></wd-icon>
+          {{ dayjs(data.activityEndTime).format('YYYY.MM.DD') }}
+        </div>
+      </div>
+      <div class="flex items-center">
+        <wd-img width="16" height="16"></wd-img>
+        <div
+          class="w-[70px] text-[#c1c1c1] text-base font-normal font-['PingFang SC'] leading-normal"
+        >
+          游学名额
+        </div>
+        <div class="w-4"></div>
+        <div class="text-white text-base font-normal font-['PingFang SC'] leading-[34px]">
+          40人/剩余10人
+        </div>
+      </div>
+      <div class="flex items-center">
+        <wd-img width="16" height="16"></wd-img>
+        <div
+          class="w-[70px] text-[#c1c1c1] text-base font-normal font-['PingFang SC'] leading-normal"
+        >
+          等级限制
+        </div>
+        <div class="w-4"></div>
+        <div class="text-white text-base font-normal font-['PingFang SC'] leading-[34px]">
+          黄金以上等级
+        </div>
+      </div>
+    </div>
+    <wd-tabs class="bg-transparent!" custom-class="bg-transparent!">
+      <wd-tab title="活动介绍"></wd-tab>
+      <wd-tab title="行程安排"></wd-tab>
+    </wd-tabs>
+    <div class="mt-5">
+      <div
+        class="text-justify text-[#c1c1c1] text-base font-normal font-['PingFang SC'] leading-relaxed"
+      >
+        东京艺术大学(英文:Tokyo University of the
+        Arts;日文平假名:とうきょうげいじゅつだいがく),简称东京艺大、艺大(とうきょうげいだい、げいだい),是一所校本部位于东京都台东区上野公园内的艺术类日本国立大学。其是超级国际化大学计划、亚洲校园 成员。其前身是于1887年分别创立的东京美术学校和东京音乐学校,1949年两校合并成为新制东京艺术大学。东京艺术大学的主要目的为培养美术和音乐领域的艺术家,其中音乐学部已培养了许多著名作曲家、演奏家、指挥家,美术学部也诞生了许多著名画家、艺术家、建筑家。
+      </div>
+    </div>
+    <BottomAppBar fixed placeholder transparent>
+      <div
+        class="h-[63px] bg-white/90 rounded-2xl backdrop-blur-[20px] flex items-center gap-1 px-4 box-border"
+      >
+        <div class="text-[#ef4343] text-2xl font-normal font-['D-DIN Exp'] leading-normal">
+          {{ data.needPointsCount }}
+        </div>
+        <div class="text-black/40 text-base font-normal font-['PingFang SC'] leading-[34px]">
+          积分
+        </div>
+        <div class="flex-1"></div>
+        <div @click="show = true">
+          <TiltedButton size="large">立即报名</TiltedButton>
+        </div>
+      </div>
+    </BottomAppBar>
+    <wd-action-sheet v-model="show">
+      <view class="px-3.5 py-10">
+        <div class="flex gap-5 mb-13.5">
+          <div class="w-[110px] h-[94px] bg-[#f6f6f6] rounded-2xl"></div>
+          <div class="flex flex-col justify-between flex-1">
+            <div class="text-black text-base font-normal font-['PingFang SC'] leading-normal">
+              阿芙佳朵
+            </div>
+            <div class="flex items-center gap-1">
+              <div class="text-[#ef4343] text-[22px] font-normal font-['D-DIN Exp'] leading-normal">
+                1000
+              </div>
+              <div class="text-black/40 text-sm font-normal font-['PingFang SC'] leading-[34px]">
+                积分
+              </div>
+              <div class="text-black/40 text-xs font-normal font-['PingFang SC'] leading-[34px]">
+                剩余:9003
+              </div>
+              <div class="flex-1"></div>
+              <!-- <wd-input-number /> -->
+            </div>
+          </div>
+        </div>
+        <wd-button block :round="false" @click="handleConfirm">确认报名</wd-button>
+      </view>
+    </wd-action-sheet>
+    <wd-overlay :show="listShow" @click="listShow = false">
+      <view class="flex h-full items-center justify-center">
+        <div class="flex flex-col gap-5 bg-white">
+          <PageHelper :request="getActivitySignups" :query="{ activityId: id }">
+            <template #default="{ source }">
+              <template v-for="(it, i) in source.list" :key="i">
+                <div class="text-black/40 text-sm font-normal font-['PingFang SC'] leading-normal">
+                  {{ dayjs(it.createTime).format('YYYY-MM-DD') }} 白金会员-王璐已报名
+                </div>
+              </template>
+            </template>
+          </PageHelper>
+        </div>
+      </view>
+    </wd-overlay>
+    <wd-overlay :show="successShow" @click="successShow = false">
+      <view class="flex h-full items-center justify-center">
+        <div class="flex flex-col gap-5 bg-white">
+          <div class="flex gap-1.5">
+            <wd-icon name="error-circle" size="22px"></wd-icon>
+            <div
+              class="w-[151px] h-[21px] text-justify text-black/40 text-base font-normal font-['PingFang SC'] leading-[21px]"
+            >
+              请准时参加活动!
+            </div>
+          </div>
+          <div
+            class="w-[237px] h-[60px] text-justify text-black/60 text-base font-normal font-['PingFang SC'] leading-normal"
+          >
+            如有问题可咨询官方客服或您的专属经纪人!
+          </div>
+        </div>
+      </view>
+    </wd-overlay>
+  </div>
+</template>

+ 92 - 75
packages/app/src/pages/home/offline-activity/list/index.vue

@@ -2,12 +2,15 @@
 { "style": { "navigationBarTitleText": "线下活动" } }
 </route>
 <script setup lang="ts">
-import { DictType } from '../../../../core/models/moment'
-import { getByDictType, getContents, getAllCategories } from '../../../../core/libs/requests'
+import { getContents, getAllCategories, getActivities } from '../../../../core/libs/requests'
 import Card from '@/components/card.vue'
+import PageHelper from '@/components/page-helper.vue'
+import TiltedButton from '@/components/tilted-button.vue'
+import { useRouter } from '../../../../core/utils/router'
 
 const tab = ref<number>(0)
 const contentCategory = ref()
+const router = useRouter()
 const { data: categories, run: setCategories } = useRequest(() => getAllCategories(), {
   initialData: [],
 })
@@ -48,81 +51,95 @@ onMounted(async () => {
         </block>
       </wd-tabs>
     </div>
-    <template v-for="(it, index) in data.list" :key="index">
-      <!-- <offline-activity-item class="" :options="it"></offline-activity-item> -->
-      <Card>
-        <div class="flex flex-col gap-5">
-          <div class="flex gap-4 mb-2">
-            <img
-              class="w-[110px] h-[88px] rounded-[10px]"
-              src="https://via.placeholder.com/110x88"
-            />
-            <div class="flex flex-col justify-between">
-              <div
-                class="w-[168px] text-black text-base font-normal font-['PingFang SC'] leading-relaxed"
-              >
-                {{ it.title }}
-              </div>
-              <div class="flex">
-                <div
-                  class="w-[70px] text-black/40 text-sm font-normal font-['PingFang SC'] leading-[34px]"
-                >
-                  活动时间:
+    <PageHelper :request="getActivities" :query="{}">
+      <template #default="{ source }">
+        <div class="flex flex-col gap-6">
+          <template v-for="(it, index) in source.list" :key="index">
+            <!-- <offline-activity-item class="" :options="it"></offline-activity-item> -->
+            <div @click="router.push(`/pages/home/activity/detail/index?id=${it.id}`)">
+              <Card>
+                <div class="flex flex-col gap-5">
+                  <div class="flex gap-4 mb-2">
+                    <img
+                      class="w-[110px] h-[88px] rounded-[10px]"
+                      src="https://via.placeholder.com/110x88"
+                    />
+                    <div class="flex flex-col justify-between">
+                      <div
+                        class="w-[168px] text-black text-base font-normal font-['PingFang SC'] leading-relaxed"
+                      >
+                        {{ it.name }}
+                      </div>
+                      <div class="flex">
+                        <div
+                          class="w-[70px] text-black/40 text-sm font-normal font-['PingFang SC'] leading-[34px]"
+                        >
+                          活动时间:
+                        </div>
+                        <div
+                          class="text-black/40 text-sm font-normal font-['PingFang SC'] leading-[34px]"
+                        >
+                          07.15 08.10
+                        </div>
+                      </div>
+                      <div class="flex items-end">
+                        <div
+                          class="text-black/40 text-sm font-normal font-['PingFang SC'] leading-[34px]"
+                        >
+                          兑换积分:
+                        </div>
+                        <div
+                          class="text-[#ef4343] text-xl font-normal font-['D-DIN Exp'] leading-[34px]"
+                        >
+                          0
+                        </div>
+                      </div>
+                    </div>
+                  </div>
+                  <view class="flex items-center justify-between mb-1.5">
+                    <view
+                      class="flex items-center text-black/40 text-sm font-normal font-['PingFang SC'] leading-[34px]"
+                    >
+                      距结束还剩
+                      <view
+                        class="w-4 h-4 bg-black/90 rounded flex-col justify-center items-center gap-2.5 inline-flex mx-1.5"
+                      >
+                        <view
+                          class="text-white text-[10px] font-normal font-['PingFang SC'] leading-[10.18px]"
+                        >
+                          05
+                        </view>
+                      </view>
+                      天
+                      <div
+                        class="w-4 h-4 bg-black/90 rounded flex-col justify-center items-center gap-2.5 inline-flex mx-1.5"
+                      >
+                        <div
+                          class="text-white text-[10px] font-normal font-['PingFang SC'] leading-[10.18px]"
+                        >
+                          05
+                        </div>
+                      </div>
+                      时
+                      <div
+                        class="w-4 h-4 bg-black/90 rounded flex-col justify-center items-center gap-2.5 inline-flex mx-1.5"
+                      >
+                        <div
+                          class="text-white text-[10px] font-normal font-['PingFang SC'] leading-[10.18px]"
+                        >
+                          05
+                        </div>
+                      </div>
+                      分
+                    </view>
+                    <tilted-button>立即报名</tilted-button>
+                  </view>
                 </div>
-                <div class="text-black/40 text-sm font-normal font-['PingFang SC'] leading-[34px]">
-                  07.15 08.10
-                </div>
-              </div>
-              <div class="flex items-end">
-                <div class="text-black/40 text-sm font-normal font-['PingFang SC'] leading-[34px]">
-                  兑换积分:
-                </div>
-                <div class="text-[#ef4343] text-xl font-normal font-['D-DIN Exp'] leading-[34px]">
-                  0
-                </div>
-              </div>
+              </Card>
             </div>
-          </div>
-          <view class="flex items-center justify-between mb-1.5">
-            <view
-              class="flex items-center text-black/40 text-sm font-normal font-['PingFang SC'] leading-[34px]"
-            >
-              距结束还剩
-              <view
-                class="w-4 h-4 bg-black/90 rounded flex-col justify-center items-center gap-2.5 inline-flex mx-1.5"
-              >
-                <view
-                  class="text-white text-[10px] font-normal font-['PingFang SC'] leading-[10.18px]"
-                >
-                  05
-                </view>
-              </view>
-              天
-              <div
-                class="w-4 h-4 bg-black/90 rounded flex-col justify-center items-center gap-2.5 inline-flex mx-1.5"
-              >
-                <div
-                  class="text-white text-[10px] font-normal font-['PingFang SC'] leading-[10.18px]"
-                >
-                  05
-                </div>
-              </div>
-              时
-              <div
-                class="w-4 h-4 bg-black/90 rounded flex-col justify-center items-center gap-2.5 inline-flex mx-1.5"
-              >
-                <div
-                  class="text-white text-[10px] font-normal font-['PingFang SC'] leading-[10.18px]"
-                >
-                  05
-                </div>
-              </div>
-              分
-            </view>
-            <tilted-button>立即报名</tilted-button>
-          </view>
+          </template>
         </div>
-      </Card>
-    </template>
+      </template>
+    </PageHelper>
   </div>
 </template>

+ 16 - 5
packages/app/src/pages/mine/authentication/index.vue

@@ -9,9 +9,13 @@
 <script lang="ts" setup>
 import Card from '@/components/card.vue'
 import DataForm from '@/components/data-form.vue'
-import NavBarEvo from '@/components/nav-bar-evo.vue'
+import NavBarEvo from '@/components/navbar-evo.vue'
 import SectionHeading from '@/components/section-heading.vue'
-import { createUserAuthInfo, getByDictType } from '../../../core/libs/requests'
+import {
+  createUserAuthInfo,
+  getByDictType,
+  validateReferrerCode,
+} from '../../../core/libs/requests'
 import { DictType } from '../../../core/models/moment'
 import { useUserStore } from '../../../store'
 import pageHeaderBg from '@designer-hub/assets/src/assets/svgs/pageHeaderBg'
@@ -19,13 +23,14 @@ import pageHeaderFilter from '@designer-hub/assets/src/assets/svgs/pageHeaderFil
 import { storeToRefs } from 'pinia'
 import { useMessage, useToast } from 'wot-design-uni'
 import { useRouter } from '../../../core/utils/router'
+import { requestToast } from '../../../core/utils/common'
 
 const { alert } = useMessage()
 const router = useRouter()
 const userStore = useUserStore()
 const { userInfo } = storeToRefs(userStore)
 const { error } = useToast()
-const formData = ref({})
+const formData = ref<any>({})
 const formInited = ref(false)
 const schema = ref({
   channelSource: {
@@ -81,7 +86,13 @@ const schema = ref({
 })
 const handleSubmit = async () => {
   console.log(formData.value)
-
+  const { data, code: status } = await requestToast(() =>
+    validateReferrerCode({ code: formData.value.referrer }),
+  )
+  if (data === false || status !== 0) {
+    uni.showToast({ title: '推荐人编号不正确', icon: 'none' })
+    return
+  }
   const { code, msg } = await createUserAuthInfo({
     gender: userInfo.value.sex,
     attachment: 'https://via.placeholder.com/319x204',
@@ -127,7 +138,7 @@ defineExpose({})
         <wd-img width="100%" height="100%" :src="pageHeaderFilter"></wd-img>
       </div>
     </div>
-    <NavBarEvo title="设计师认证"></NavBarEvo>
+    <NavBarEvo transparent dark title="设计师认证"></NavBarEvo>
     <div class="flex-grow flex flex-col p-3.5 gap-3.5 relative">
       <Card>
         <SectionHeading size="base" title="基本信息" custom-class="mb-4"></SectionHeading>

+ 1 - 0
packages/app/src/types/uni-pages.d.ts

@@ -37,6 +37,7 @@ interface NavigateToOptions {
        "/pages/mine/setting/index" |
        "/pages/publish/moment/index" |
        "/pages/publish/tags/index" |
+       "/pages/home/activity/detail/index" |
        "/pages/home/mall/confirm-order/index" |
        "/pages/home/mall/detail/index" |
        "/pages/home/mall/shopping-cart/index" |

+ 3 - 0
packages/assets/src/assets/svgs/bell.svg

@@ -0,0 +1,3 @@
+<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M10 3.75002C13.6821 3.75002 16.6667 6.7346 16.6667 10.4167V15H16.875C17.0408 15 17.1997 15.0659 17.3169 15.1831C17.4342 15.3003 17.5 15.4593 17.5 15.625C17.5 15.7908 17.4342 15.9498 17.3169 16.067C17.1997 16.1842 17.0408 16.25 16.875 16.25L13.0908 16.2504C12.8416 16.8659 12.4143 17.393 11.8636 17.7642C11.313 18.1353 10.664 18.3335 10 18.3335C9.33595 18.3335 8.68702 18.1353 8.13636 17.7642C7.5857 17.393 7.15839 16.8659 6.90917 16.2504L3.125 16.25C2.95924 16.25 2.80027 16.1842 2.68306 16.067C2.56585 15.9498 2.5 15.7908 2.5 15.625C2.5 15.4593 2.56585 15.3003 2.68306 15.1831C2.80027 15.0659 2.95924 15 3.125 15H3.33333V10.4167C3.33333 6.7346 6.31792 3.75002 10 3.75002ZM11.6667 16.2504H8.33333C8.52725 16.5093 8.77887 16.7194 9.06819 16.8639C9.35751 17.0085 9.67656 17.0837 10 17.0834C10.3234 17.0837 10.6425 17.0085 10.9318 16.8639C11.2211 16.7194 11.4727 16.5093 11.6667 16.2504ZM10 5.00002C7.05125 5.00002 4.65292 7.35627 4.585 10.2888L4.58333 10.4167V15H15.4167V10.4167C15.4167 7.42502 12.9917 5.00002 10 5.00002ZM10.6625 7.0896C10.6931 7.01343 10.7384 6.94404 10.7958 6.88537C10.8532 6.82671 10.9216 6.77992 10.9971 6.74769C11.0726 6.71546 11.1537 6.69842 11.2357 6.69753C11.3178 6.69664 11.3993 6.71193 11.4754 6.74252C12.2087 7.03719 12.837 7.54458 13.2795 8.19937C13.722 8.85416 13.9584 9.6264 13.9583 10.4167C13.9583 10.5824 13.8925 10.7414 13.7753 10.8586C13.6581 10.9758 13.4991 11.0417 13.3333 11.0417C13.1676 11.0417 13.0086 10.9758 12.8914 10.8586C12.7742 10.7414 12.7083 10.5824 12.7083 10.4167C12.7084 9.87589 12.5466 9.34745 12.2438 8.89938C11.941 8.45132 11.511 8.10413 11.0092 7.90252C10.8554 7.84067 10.7325 7.72029 10.6675 7.56784C10.6025 7.4154 10.6007 7.24338 10.6625 7.0896ZM11.3021 1.66669C11.7338 1.66669 12.0833 1.94669 12.0833 2.29169C12.0833 2.63669 11.7333 2.91669 11.3021 2.91669H8.69792C8.26625 2.91669 7.91667 2.63669 7.91667 2.29169C7.91667 1.94669 8.26667 1.66669 8.69792 1.66669H11.3021Z" fill="white"/>
+</svg>

+ 2 - 0
packages/assets/src/assets/svgs/bell.ts

@@ -0,0 +1,2 @@
+import bell from "./bell.svg";
+export default bell;

+ 4 - 0
packages/assets/src/assets/svgs/index.ts

@@ -11,6 +11,8 @@ import invertedTrapezoid from "./invertedTrapezoid";
 import trapezium from "./trapezium";
 import strip from "./strip";
 import leaderboardText from "./leaderboardText";
+import bell from "./bell";
+import rightFill from "./rightFill";
 
 export {
   addBlack,
@@ -26,4 +28,6 @@ export {
   trapezium,
   strip,
   leaderboardText,
+  bell,
+  rightFill,
 };

+ 2 - 0
packages/assets/src/assets/svgs/rightFill.ts

@@ -0,0 +1,2 @@
+import rightFill from "./right_fill.svg";
+export default rightFill;

+ 4 - 0
packages/assets/src/assets/svgs/right_fill.svg

@@ -0,0 +1,4 @@
+<svg width="14" height="14" viewBox="0 0 14 14" fill="none" xmlns="http://www.w3.org/2000/svg">
+<path d="M9.04166 6.125V7.875H2.77053C2.36803 7.875 2.04166 7.54862 2.04166 7.14612V6.85388C2.04166 6.75816 2.06051 6.66338 2.09714 6.57495C2.13377 6.48652 2.18746 6.40616 2.25514 6.33848C2.32282 6.2708 2.40317 6.21711 2.4916 6.18048C2.58003 6.14385 2.67481 6.125 2.77053 6.125H9.04166Z" fill="white"/>
+<path d="M6.65291 3.31101L11.5485 6.32976C11.6538 6.3946 11.7409 6.48516 11.8015 6.59292C11.8622 6.70069 11.8944 6.82211 11.8952 6.94576C11.896 7.06942 11.8653 7.19124 11.806 7.29977C11.7468 7.4083 11.6609 7.49996 11.5564 7.56613L6.66078 10.6663C6.55053 10.7362 6.42353 10.7752 6.29306 10.7792C6.16258 10.7832 6.03342 10.7521 5.91906 10.6892C5.8047 10.6262 5.70935 10.5337 5.64296 10.4214C5.57657 10.309 5.54159 10.1808 5.54166 10.0503V3.93138C5.54153 3.80161 5.57605 3.67415 5.64166 3.56218C5.70727 3.45021 5.80158 3.35778 5.91486 3.29445C6.02814 3.23113 6.15627 3.19919 6.28601 3.20195C6.41576 3.2047 6.54242 3.24205 6.65291 3.31013V3.31101Z" fill="white"/>
+</svg>