Compare commits

..

10 Commits

Author SHA1 Message Date
hiyu
1ac1e6fcfc fix: update money on order 2024-07-01 16:21:57 +07:00
hiyu
9be95aa741 style: font-size 2024-06-27 19:30:38 +07:00
hiyu
0aaaebf3f7 style: member code + vip 2024-06-27 19:18:58 +07:00
hiyu
1457971005 thêm mã thành viên 2024-06-25 15:02:25 +07:00
hiyu
7373b5b20b fix: notification 2024-06-22 16:08:31 +07:00
hiyu
b04f4bda4c style: recharge record title 2024-06-22 16:08:22 +07:00
hiyu
c8267945ee style: notification 2024-06-22 15:24:08 +07:00
hiyu
d9db671811 fix: thông báo 2024-06-22 15:14:04 +07:00
hiyu
66e1c67a76 fix: rút tiền 2024-06-21 14:06:07 +07:00
gin
0965f93131 update FE 2024-06-19 23:28:07 +07:00
10 changed files with 337 additions and 73 deletions

View File

@ -40,6 +40,10 @@ export default {
// order
ORDER_HISTORY: "order/history",
ORDER: "/order",
ORDER_DATE_PROFIT: "/order/date-profit"
ORDER_DATE_PROFIT: "/order/date-profit",
// notification
NOTIFICATION_LIST: "/notification/history",
NOTIFICATION_UNREAD: "/notification/un-read",
NOTIFICATION_READ: "/notification/read",
};

View File

@ -828,7 +828,7 @@ body .van-toast .van-toast__icon {
width: 18.933vw;
height: 6vw;
margin-left: 0;
margin-bottom: -1.6vw;
/* margin-bottom: -1.6vw; */
}
/* .page {

View File

@ -34,7 +34,7 @@ const submit = () => {
</div>
<div class="van-nav-bar__title van-ellipsis">NẠP ĐIỂM</div>
<router-link to="/RechargeRecord" class="van-nav-bar__right">
<span class="nav-right">Lịch sử quy đổi điểm</span>
<span class="nav-right" style="font-size: 3.5vw;">Lịch sử quy đổi điểm</span>
</router-link>
</div>
</div>

View File

@ -33,7 +33,7 @@ const name = listAddress.filter((add) => add.id === Number(idUrl))[0].name
v-for="girl in currentAdd.data"
>
<van-image :src="girl.img_url[0]" />
<span class="rig-name">A01</span>
<span class="rig-name">{{girl.vn_vn}}</span>
</van-grid-item>
</van-grid>
</div>

View File

@ -15004,3 +15004,136 @@ export const detailGirls = [
]
}
]
export const girlRank = [
{
"id": 98,
"name": "EM NGỌC",
"img": "https://api.canalis.vip//xuanfei/20231028/62a5b51f5dc5e33149cfe8799a5bd864.jpg",
"price": "350",
"city_name": " Phú Nhuận",
"lat": "10.7987960000",
"lng": "106.6797670000",
"address": "Phan Đình Phùng, Phú Nhuận,Hồ Chí Minh, Vietnam",
"phone": "0823231219",
"birthday": "1993",
"comment_total": 45
},
{
"id": 81,
"name": "❤️ THÚY DIỄM ❤️",
"img": "https://api.canalis.vip//xuanfei/20230410/f5d2f44d538482e643ffca6604f06710.jpg",
"price": "200",
"city_name": " Phú Nhuận",
"lat": "10.7981110000",
"lng": "106.6795540000",
"address": "Phan Đình Phùng, Phú Nhuận,Hồ Chí Minh, Vietnam",
"phone": "0373605946",
"birthday": "1987",
"comment_total": 5
},
{
"id": 75,
"name": "ANH THƯ",
"img": "https://api.canalis.vip//xuanfei/20230412/cbabc0a7b2fa078bf83fc48d33b4e23d.jpg",
"price": "300",
"city_name": " Thủ Đức",
"lat": "10.8296950000",
"lng": "106.7304602000",
"address": "Đường 18, Thủ Đức,Hồ Chí Minh, Vietnam",
"phone": "0348615694",
"birthday": "1995",
"comment_total": 13
},
{
"id": 79,
"name": "✅ TUỆ VY ✅",
"img": "https://api.canalis.vip//xuanfei/20230410/d5e69b2231040918df3bff5857146bbd.jpg",
"price": "500",
"city_name": " Quận 2",
"lat": "10.7972745000",
"lng": "106.7305140000",
"address": "Đường số 19, Quận 2,Hồ Chí Minh, Vietnam",
"phone": "0983394021",
"birthday": "1992",
"comment_total": 7
},
{
"id": 73,
"name": "MIU MIU",
"img": "https://api.canalis.vip//xuanfei/20231029/986f38fc1bc0fb02be9fe05cd219e6da.jpg",
"price": "500",
"city_name": " Quận 8",
"lat": "10.7485650000",
"lng": "106.6871310000",
"address": "Dương Bá Trạc, Quận 8,Hồ Chí Minh, Vietnam",
"phone": "0353223236",
"birthday": "2001",
"comment_total": 2
},
{
"id": 85,
"name": "TÚ ANH",
"img": "https://api.canalis.vip//xuanfei/20230412/5c03364c2aaa74da2f1d777df996c2fa.jpg",
"price": "600",
"city_name": " Gò Vấp",
"lat": "10.8387051000",
"lng": "106.6497740000",
"address": "Quang Trung, Gò Vấp,Hồ Chí Minh, Vietnam",
"phone": "0352944838",
"birthday": "1992",
"comment_total": 152
},
{
"id": 68,
"name": "HẠNH DUNG",
"img": "https://api.canalis.vip//xuanfei/20230410/b134e2e4a1e27a8d4c5b43193342d140.jpg",
"price": "400",
"city_name": " Tân Phú",
"lat": "10.8002010000",
"lng": "106.6298440000",
"address": "Tân Sơn Nhì, Tân Phú,Hồ Chí Minh, Vietnam",
"phone": "0812667998",
"birthday": "1993",
"comment_total": 7
},
{
"id": 90,
"name": "TUỆ NHI",
"img": "https://api.canalis.vip//xuanfei/20230410/1f4f449e4460882e8aa45f371992d833.jpg",
"price": "600",
"city_name": " Phú Nhuận",
"lat": "10.7985638000",
"lng": "106.6877631000",
"address": "Phan Xích Long, Phú Nhuận,Hồ Chí Minh, Vietnam",
"phone": "0789588350",
"birthday": "1996",
"comment_total": 92
},
{
"id": 77,
"name": "Khánh Linh ❤️",
"img": "https://api.canalis.vip//xuanfei/20230410/cba299e4226feea00c46634bbd8eb7cd.jpg",
"price": "700",
"city_name": " Thủ Đức",
"lat": "10.8299050000",
"lng": "106.7305972000",
"address": "Đường 18, Thủ Đức,Hồ Chí Minh, Vietnam",
"phone": "0389126676",
"birthday": "2002",
"comment_total": 3
},
{
"id": 92,
"name": "LAN LY",
"img": "https://api.canalis.vip//xuanfei/20231028/a2c82caf252c5d10b41d2915114f6358.jpg",
"price": "350",
"city_name": " Gò Vấp",
"lat": "10.8476427000",
"lng": "106.6682653000",
"address": "Lê Đức Thọ, Gò Vấp,Hồ Chí Minh, Vietnam",
"phone": "0984620914",
"birthday": "1991",
"comment_total": 29
}
]

View File

@ -3,6 +3,7 @@ import { ref } from "vue";
import axios from "@/axios";
import API from "@/api";
import { handleRequest } from "@/helpers/request";
import { girlRank} from "@/components/home/index.js";
const games = ref([]);
const getGameList = () => {
@ -21,27 +22,27 @@ getGameList();
<div class="convention-hall page">
<div class="nav-bar van-nav-bar van-hairline--bottom">
<div class="van-nav-bar__content">
<div class="van-nav-bar__title van-ellipsis">XẾP HẠNG</div>
<div class="van-nav-bar__title van-ellipsis">XẾP HẠNG IDOL</div>
</div>
</div>
<div class="convention-item">
<div class="left">
<div class="van-sidebar">
<a class="van-sidebar-item van-sidebar-item--select"
><div class="van-sidebar-item__text">Tất cả</div></a
>
</div>
</div>
<!-- <div class="left">-->
<!-- <div class="van-sidebar">-->
<!-- <a class="van-sidebar-item van-sidebar-item&#45;&#45;select"-->
<!-- ><div class="van-sidebar-item__text">Tất cả</div></a-->
<!-- >-->
<!-- </div>-->
<!-- </div>-->
<div class="right">
<div class="list-wrapper van-pull-refresh">
<div class="van-pull-refresh__track" style="transition-duration: 0ms">
<div class="van-pull-refresh__head"></div>
<div class="van-grid van-hairline--top">
<router-link
v-for="(g, idx) in games"
v-for="(g, idx) in girlRank"
:key="idx"
:to="{ name: 'Lottery', query: { id: g.id } }"
class="van-grid-item"
:to="`/HomeDetail/${g.id}`"
style="flex-basis: 50%"
>
<div
@ -50,52 +51,46 @@ getGameList();
<div class="game_item_img van-image">
<img
class="van-image__img"
src="@/assets/images/common/bgGirl.png"
:src="g.img"
/>
</div>
<span>TOP {{ idx+1 }}</span>
<span> {{ g.name }}</span
><span></span>
</div>
</router-link>
<!-- <div class="van-grid-item" style="flex-basis: 50%">
<div
class="van-grid-item__content van-grid-item__content--center van-hairline"
>
<div class="game_item_img van-image">
<img
class="van-image__img"
src="@/assets/images/common/bgGirl.png"
/>
</div>
<span>BỎ PHIẾU 2</span><span></span>
</div>
</div>
<div class="van-grid-item" style="flex-basis: 50%">
<div
class="van-grid-item__content van-grid-item__content--center van-hairline"
>
<div class="game_item_img van-image">
<img
class="van-image__img"
src="@/assets/images/common/bgGirl.png"
/>
</div>
<span>BỎ PHIẾU 3</span><span></span>
</div>
</div>
<div class="van-grid-item" style="flex-basis: 50%">
<div
class="van-grid-item__content van-grid-item__content--center van-hairline"
>
<div class="game_item_img van-image">
<img
class="van-image__img"
src="@/assets/images/common/bgGirl.png"
/>
</div>
<span>ĐẶC BIỆT</span><span></span>
</div>
</div> -->
<!-- <div class="van-grid-item" style="flex-basis: 50%">-->
<!-- <div-->
<!-- class="van-grid-item__content van-grid-item__content&#45;&#45;center van-hairline"-->
<!-- >-->
<!-- <div class="game_item_img van-image">-->
<!-- <img-->
<!-- class="van-image__img"-->
<!-- src="@/assets/images/common/bgGirl.png"-->
<!-- />-->
<!-- </div>-->
<!-- <span>BỎ PHIẾU 3</span><span></span>-->
<!-- </div>-->
<!-- </div>-->
<!-- <div class="van-grid-item" style="flex-basis: 50%">-->
<!-- <div-->
<!-- class="van-grid-item__content van-grid-item__content&#45;&#45;center van-hairline"-->
<!-- >-->
<!-- <div class="game_item_img van-image">-->
<!-- <img-->
<!-- class="van-image__img"-->
<!-- src="@/assets/images/common/bgGirl.png"-->
<!-- />-->
<!-- </div>-->
<!-- <span>ĐẶC BIỆT</span><span></span>-->
<!-- </div>-->
<!-- </div>-->
</div>
</div>
</div>

View File

@ -7,7 +7,6 @@ import { formatNumber } from "@/helpers/format";
import { useUserStore } from "@/store/user";
import { storeToRefs } from "pinia";
import { showFailToast } from "vant";
import { Popup } from "vant";
import axios from "@/axios";
import API from "@/api";
@ -156,6 +155,7 @@ const submit = () => {
amount.value = 0;
choices.value.forEach((e) => (e.active = 0));
isShowConfirmOrder.value = false;
userStore.updateUserInfo({ money: res.balance });
} else {
showFailToast(res.message ?? "Lỗi bình chọn");
}

View File

@ -19,6 +19,7 @@ const { userInfo, isLogin } = storeToRefs(userStore);
const loadingMoney = ref(false);
const loadingScore = ref(false);
const showVipTable = ref(false);
const countNotify = ref(0);
const withdrawLink = computed(() => {
return userInfo?.value?.isSetBank ? "/withdraw" : "/Setbank";
@ -32,7 +33,7 @@ const loadMoney = () => {
loadingMoney.value = true;
handleRequest(axios.get(API.USER_INFO + "/" + "money"))
.then((res) => {
userStore.updateUserInfo({ money: res.data })
userStore.updateUserInfo({ money: res.data });
})
.finally(() => {
setTimeout(() => {
@ -45,7 +46,7 @@ const loadScore = () => {
loadingScore.value = true;
handleRequest(axios.get(API.USER_INFO + "/" + "score"))
.then((res) => {
userStore.updateUserInfo({ score: res.data })
userStore.updateUserInfo({ score: res.data });
})
.finally(() => {
setTimeout(() => {
@ -53,6 +54,16 @@ const loadScore = () => {
}, 500);
});
};
const getUnreadNotifications = () => {
handleRequest(axios.get(API.NOTIFICATION_UNREAD)).then((res) => {
if (res.success) {
countNotify.value = res.data;
}
});
};
getUnreadNotifications();
</script>
<template>
<div class="mine page">
@ -87,7 +98,7 @@ const loadScore = () => {
/>
</div>
<div class="login-content">
<p class="login-btn" style="margin: 19.1833px 0">
<p class="login-btn" style="margin: 0">
{{ userInfo?.username }}
<img
@click="showVipTable = true"
@ -110,6 +121,12 @@ const loadScore = () => {
"
></span>
</div>
<div style="color: white; margin-top: 10px; text-wrap: nowrap">
thành viên:
<span class="member-code">{{
userInfo.memberCode ?? "********"
}}</span>
</div>
</div>
</div>
</template>
@ -166,15 +183,21 @@ const loadScore = () => {
</div>
</div>
<div class="part-2">
<p class="balance van-ellipsis" style="font-size: 24px"> {{ userInfo?.score }}/100</p>
<p class="balance van-ellipsis" style="font-size: 24px">
{{ userInfo?.score }}/100
</p>
<span class="font-28 font-gray" style="font-size: 14px">
Điểm tín nhiệm</span
>
<div class="refresh-btn" :class="[
<div
class="refresh-btn"
:class="[
loadingScore
? 'van-loading__spinner van-loading__spinner--circular'
: '',
]" @click="loadScore">
]"
@click="loadScore"
>
<i class="van-icon van-icon-replay"></i>
</div>
</div>
@ -221,6 +244,15 @@ const loadScore = () => {
/>
</div>
<span class="menu-item-label">Thông báo</span>
<van-tag
:show="countNotify"
size="large"
type="danger"
style="font-size: 14px; padding: 5px"
round
>
{{ countNotify }}
</van-tag>
</router-link>
<div
class="menu-item"
@ -255,4 +287,10 @@ a {
:deep(.van-image-preview__overlay) {
background: rgba(0, 0, 0, 0.9);
}
.member-code {
/* font-size: 16px; */
color: white;
text-shadow: 0 0 5px #ffa600, 0 0 5px #ffa600;
}
</style>

View File

@ -1,9 +1,70 @@
<script setup>
import { reactive, ref } from "vue";
import axios from "@/axios";
import API from "@/api";
import { handleRequest } from "@/helpers/request";
import { formatNumber, formatDateTime } from "@/helpers/format";
import { showToast } from "vant";
const list = ref([]);
const loading = ref(false);
const finished = ref(false);
const refreshing = ref(false);
const params = reactive({
page: 1,
size: 10,
});
const onLoad = async () => {
const data = await getData();
loading.value = false;
if (data.length < params.size) {
finished.value = true;
}
if (refreshing.value) {
list.value = data;
refreshing.value = false;
return showToast("Làm mới thành công.");
}
list.value.unshift(...data);
};
const onRefresh = () => {
params.page = 1;
list.value = [];
finished.value = false;
loading.value = true;
onLoad();
};
const getData = async () => {
const res = await handleRequest(axios.get(API.NOTIFICATION_LIST, { params }));
if (res.success) {
params.page += 1;
return res.data.data;
}
return [];
};
const read = async (idx) => {
const id = list.value[idx]?._id;
if (!id) return;
const res = await handleRequest(axios.get(API.NOTIFICATION_READ + "/" + id));
if (res.success) {
list.value[idx].read = 1;
}
};
onRefresh();
</script>
<template>
<div class="container page">
<div class="header">
<div class="nav-bar van-nav-bar">
<div class="van-nav-bar__content">
<div @click="$router.go(-1)" class="van-nav-bar__left">
<div @click="$router.push('/mine')" class="van-nav-bar__left">
<i
class="van-icon van-icon-arrow-left"
style="color: rgb(255, 255, 255)"
@ -14,25 +75,54 @@
</div>
</div>
<div class="content">
<div class="van-pull-refresh">
<div class="van-pull-refresh__track" style="transition-duration: 0ms">
<div class="van-pull-refresh__head"></div>
<div class="listItem">
<div class="listTitle">Hoạt động trên không</div>
<van-pull-refresh
v-model="refreshing"
@refresh="onRefresh"
pulling-text="Kéo lên để làm mới..."
loading-text="Đang tải..."
loosing-text="Phát hiện có thể làm mới được"
style="height: 100%; overflow: auto"
>
<van-empty description="Dữ liệu trống" v-if="!list.length" />
<van-list
v-else
v-model:loading="loading"
error-text="Lỗi"
loading-text="Đang tải..."
:finished="finished"
finished-text=""
@load="onLoad"
>
<div v-for="(item, index) in list" :key="index" class="listItem">
<div class="listTitle">{{ item.title }}</div>
<div class="listContent html">
<p>
Chúng tôi CANALIS CLUB - Một quán Bar lớn . Phục vụ tận nơi
tại 63 tỉnh thành trên toàn quốc . Chúng tôi những người mẫu
cao cấp, tiếp viên hàng không, du học sinh.... Sẵn sàng phục vụ
quý khách hàng !<br />
</p>
<p v-html="item.content"></p>
<div style="text-align: right" v-if="!item.read">
<van-tag
:show="countNotify"
round
size="large"
type="warning"
style="
font-size: 14px;
padding: 5px;
margin: 8px 0;
cursor: pointer;
"
@click="read(index)"
>
Đánh dấu đã đọc
</van-tag>
</div>
</div>
<div class="listTime">
<div class="listTimeText">2023-07-05 23:06:33</div>
</div>
<div class="listTimeText">
{{ formatDateTime(item.createdAt) }}
</div>
</div>
</div>
</van-list>
</van-pull-refresh>
</div>
</div>
</template>

View File

@ -19,6 +19,10 @@ const formData = reactive({
password_withdraw: "",
});
const clickAll = () => {
formData.amount = userInfo.value.money ?? 0
}
const submit = () => {
if (isNaN(formData.amount) || formData.amount <= 0) {
return showFailToast("Vui lòng điền số điểm chính xác.");
@ -73,7 +77,7 @@ const submit = () => {
</div>
</div>
</div>
<span class="all">Tất cả</span>
<span class="all" @click="clickAll">Tất cả</span>
</div>
<div class="money" style="width: 100%">
<div class="moneyNumber" style="width: 100%">
@ -104,7 +108,7 @@ const submit = () => {
</span>
</div>
<div class="balance">
<span>VND</span><span class="number">1000Đ</span>
<span>VND</span><span class="number">{{ formatNumber(userInfo.money) }}Đ</span>
</div>
</div>
</div>