chore(管理员赠送礼物页): 补充翻译,替换头部组件

This commit is contained in:
hzj 2025-12-12 17:50:17 +08:00
parent d9b56abd71
commit 61e6290d54
4 changed files with 120 additions and 34 deletions

View File

@ -401,5 +401,17 @@
"this_period_recharge": "إعادة الشحن لهذه الفترة:",
"recharge_agency_list": "قائمة وكيل إعادة الشحن:",
"invite_recharge_agent": "دعوة المستخدم ليصبح وكيل إعادة الشحن"
"invite_recharge_agent": "دعوة المستخدم ليصبح وكيل إعادة الشحن",
"item_distribution": "توزيع العناصر",
"validity": "الصلاحية",
"day": "يوم",
"enter_user_id_placeholder": "أدخل معرف المستخدم",
"send": "إرسال",
"gift_delivery_successful": "تم تسليم الهدية بنجاح",
"frames": "الإطارات",
"vehicles": "المركبات",
"chat_box": "صندوق الدردشة",
"theme": "الموضوع",
"vip": "VIP"
}

View File

@ -401,5 +401,17 @@
"this_period_recharge": "This period's recharge:",
"recharge_agency_list": "Recharge Agency List:",
"invite_recharge_agent": "Invite User To Become Recharge Agency"
"invite_recharge_agent": "Invite User To Become Recharge Agency",
"item_distribution": "Item Distribution",
"validity": "Validity",
"day": "day",
"enter_user_id_placeholder": "Enter user ID",
"send": "Send",
"gift_delivery_successful": "Gift delivery successful",
"frames": "Frames",
"vehicles": "Vehicles",
"chat_box": "Chat Box",
"theme": "Theme",
"vip": "VIP"
}

View File

@ -401,5 +401,17 @@
"this_period_recharge": "本期充值:",
"recharge_agency_list": "充值代理列表:",
"invite_recharge_agent": "邀请用户成为充值代理"
"invite_recharge_agent": "邀请用户成为充值代理",
"item_distribution": "道具分发",
"validity": "有效期",
"day": "天",
"enter_user_id_placeholder": "请输入用户ID",
"send": "发送",
"gift_delivery_successful": "礼物发送成功",
"frames": "头像框",
"vehicles": "坐骑",
"chat_box": "聊天框",
"theme": "主题",
"vip": "VIP"
}

View File

@ -1,13 +1,21 @@
<template>
<div class="fullPage">
<div class="bg">
<MobileHeader title="Item Distribution" />
<!-- 顶部导航 -->
<GeneralHeader
:showLanguageList="true"
:title="t('item_distribution')"
:backImg="imgUrl"
color="black"
style="box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); z-index: 999"
/>
<!-- 标签 -->
<div
style="
display: flex;
justify-content: space-around;
border-bottom: 1px solid #cccccc;
background-color: transparent;
position: relative;
"
@ -15,13 +23,13 @@
<div
v-for="(item, index) in tabList"
:key="index"
style="font-size: 18px; padding: 10px 0; flex: 1; text-align: center"
style="font-size: 1.3em; padding: 10px 0; flex: 1; text-align: center"
class="tab-item"
:class="activeIndex == index ? 'tabName-active' : 'tabName'"
ref="tabItems"
@click="setActiveTab(index)"
>
{{ item.name }}
{{ t(item.name) }}
</div>
<!-- 下划线元素 -->
<div
@ -51,7 +59,7 @@
align-items: center;
"
>
<img :src="product.cover" alt="虚拟商品" style="width: 60%; margin: 10px 0" />
<img :src="product.cover" alt="" style="width: 60%; margin: 10px 0" />
<button
style="
background-color: #bb92ff;
@ -62,7 +70,7 @@
padding: 5px 10px;
"
>
Send
{{ t('send') }}
</button>
</div>
</div>
@ -84,42 +92,55 @@
@click.stop
>
<img :src="selectedGoods.cover" alt="" style="width: 60%; margin: 5px 0" />
<div style="font-weight: 600; font-size: 16px; margin: 10px 0">
<span style="color: #00000080; margin-right: 10px">Validity:</span>
<span style="font-weight: 700; color: #000">{{ validityPeriod }}day</span>
<div style="font-weight: 600; margin: 10px 0">
<span style="color: #00000080; margin-right: 10px">{{ t('validity') }}:</span>
<span style="font-weight: 700; color: #000">{{ validityPeriod }}{{ t('day') }}</span>
</div>
<div>
<div
style="
width: 90%;
display: flex;
justify-content: center;
align-items: center;
gap: 4px;
"
>
<input
type="text"
placeholder="Enter user ID"
:placeholder="t('enter_user_id_placeholder')"
style="
height: 36px;
width: 171px;
flex: 1;
min-width: 0;
align-self: stretch;
border-radius: 8px;
border: 0;
outline: none;
background-color: #f1f1f1b2;
padding: 8px;
margin-right: 4px;
font-size: 14px;
font-size: 1em;
font-weight: 590;
"
v-model="targetUserId"
/>
<button
style="
height: 36px;
width: 72px;
width: auto;
min-width: 0;
align-self: stretch;
border-radius: 8px;
border: 0;
padding: 8px;
color: white;
font-size: 14px;
font-size: 1em;
font-weight: 590;
"
:style="{ backgroundColor: confirmClick ? '#bb92ff' : '#00000080' }"
@click="sendGoods"
>
Confirm
{{ t('confirm') }}
</button>
</div>
</div>
@ -131,34 +152,39 @@
<script setup>
import { onMounted, ref, computed } from 'vue'
import { showWarning, showSuccess } from '@/utils/toast.js'
import { useI18n } from 'vue-i18n'
import { getAdminCenterList, giveProps, hasSendGiftsPermission } from '@/api/itemDistribution'
import { searchUser } from '@/api/userInfo'
import MobileHeader from '@/components/MobileHeader.vue'
import GeneralHeader from '@/components/GeneralHeader.vue'
import maskLayer from '@/components/MaskLayer.vue'
const { t, locale } = useI18n()
const imgUrl = new URL('/src/assets/icon/arrowBackBlack.png', import.meta.url).href
const tabList = ref([
{
id: 1,
name: 'Frames',
name: 'frames',
},
{
id: 2,
name: 'Vehicles',
name: 'vehicles',
},
// {
// id: 3,
// name: 'Chat Box',
// name: 'chat_box',
// },
// {
// id: 4,
// name: 'Theme',
// name: 'theme',
// },
])
const activeIndex = ref(0)
const currentTab = ref('Frames') //
const currentTab = ref('frames') //
const tabItems = ref([]) // DOM
const confirmClick = ref(true)
@ -218,7 +244,7 @@ const sendGoods = async () => {
const res = await giveProps(data)
if (res.errorCode == 0 && res.status) {
closedPopup()
showSuccess('Gift delivery successful')
showSuccess(t('gift_delivery_successful'))
} else {
confirmClick.value = true
}
@ -238,11 +264,11 @@ const sendGoods = async () => {
//
const getPropsType = () => {
const typeMap = {
Frames: 'AVATAR_FRAME',
Vehicles: 'RIDE',
'Chat Box': 'CHAT_BUBBLE',
Theme: 'THEME',
VIP: 'NOBLE_VIP',
frames: 'AVATAR_FRAME',
vehicles: 'RIDE',
chat_box: 'CHAT_BUBBLE',
theme: 'THEME',
vip: 'NOBLE_VIP',
}
return typeMap[currentTab.value]
}
@ -300,7 +326,7 @@ onMounted(() => {
if (getHasSendVIPPermission('NOBLE_VIP')) {
tabList.value.push({
id: 3,
name: 'VIP',
name: 'vip',
})
}
@ -339,4 +365,28 @@ onMounted(() => {
color: black;
font-weight: 500;
}
@media screen and (max-width: 360px) {
* {
font-size: 10px;
}
}
@media screen and (min-width: 360px) {
* {
font-size: 12px;
}
}
@media screen and (min-width: 768px) {
* {
font-size: 24px;
}
}
@media screen and (min-width: 1024px) {
* {
font-size: 32px;
}
}
</style>