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
ORDER_HISTORY: "order/history", ORDER_HISTORY: "order/history",
ORDER: "/order", 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; width: 18.933vw;
height: 6vw; height: 6vw;
margin-left: 0; margin-left: 0;
margin-bottom: -1.6vw; /* margin-bottom: -1.6vw; */
} }
/* .page { /* .page {

View File

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

View File

@ -7,7 +7,6 @@ import { formatNumber } from "@/helpers/format";
import { useUserStore } from "@/store/user"; import { useUserStore } from "@/store/user";
import { storeToRefs } from "pinia"; import { storeToRefs } from "pinia";
import { showFailToast } from "vant"; import { showFailToast } from "vant";
import { Popup } from "vant";
import axios from "@/axios"; import axios from "@/axios";
import API from "@/api"; import API from "@/api";
@ -156,6 +155,7 @@ const submit = () => {
amount.value = 0; amount.value = 0;
choices.value.forEach((e) => (e.active = 0)); choices.value.forEach((e) => (e.active = 0));
isShowConfirmOrder.value = false; isShowConfirmOrder.value = false;
userStore.updateUserInfo({ money: res.balance });
} else { } else {
showFailToast(res.message ?? "Lỗi bình chọn"); 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 loadingMoney = ref(false);
const loadingScore = ref(false); const loadingScore = ref(false);
const showVipTable = ref(false); const showVipTable = ref(false);
const countNotify = ref(0);
const withdrawLink = computed(() => { const withdrawLink = computed(() => {
return userInfo?.value?.isSetBank ? "/withdraw" : "/Setbank"; return userInfo?.value?.isSetBank ? "/withdraw" : "/Setbank";
@ -32,7 +33,7 @@ const loadMoney = () => {
loadingMoney.value = true; loadingMoney.value = true;
handleRequest(axios.get(API.USER_INFO + "/" + "money")) handleRequest(axios.get(API.USER_INFO + "/" + "money"))
.then((res) => { .then((res) => {
userStore.updateUserInfo({ money: res.data }) userStore.updateUserInfo({ money: res.data });
}) })
.finally(() => { .finally(() => {
setTimeout(() => { setTimeout(() => {
@ -45,7 +46,7 @@ const loadScore = () => {
loadingScore.value = true; loadingScore.value = true;
handleRequest(axios.get(API.USER_INFO + "/" + "score")) handleRequest(axios.get(API.USER_INFO + "/" + "score"))
.then((res) => { .then((res) => {
userStore.updateUserInfo({ score: res.data }) userStore.updateUserInfo({ score: res.data });
}) })
.finally(() => { .finally(() => {
setTimeout(() => { setTimeout(() => {
@ -53,6 +54,16 @@ const loadScore = () => {
}, 500); }, 500);
}); });
}; };
const getUnreadNotifications = () => {
handleRequest(axios.get(API.NOTIFICATION_UNREAD)).then((res) => {
if (res.success) {
countNotify.value = res.data;
}
});
};
getUnreadNotifications();
</script> </script>
<template> <template>
<div class="mine page"> <div class="mine page">
@ -87,7 +98,7 @@ const loadScore = () => {
/> />
</div> </div>
<div class="login-content"> <div class="login-content">
<p class="login-btn" style="margin: 19.1833px 0"> <p class="login-btn" style="margin: 0">
{{ userInfo?.username }} {{ userInfo?.username }}
<img <img
@click="showVipTable = true" @click="showVipTable = true"
@ -110,6 +121,12 @@ const loadScore = () => {
" "
></span> ></span>
</div> </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>
</div> </div>
</template> </template>
@ -166,15 +183,21 @@ const loadScore = () => {
</div> </div>
</div> </div>
<div class="part-2"> <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"> <span class="font-28 font-gray" style="font-size: 14px">
Điểm tín nhiệm</span Điểm tín nhiệm</span
> >
<div class="refresh-btn" :class="[ <div
class="refresh-btn"
:class="[
loadingScore loadingScore
? 'van-loading__spinner van-loading__spinner--circular' ? 'van-loading__spinner van-loading__spinner--circular'
: '', : '',
]" @click="loadScore"> ]"
@click="loadScore"
>
<i class="van-icon van-icon-replay"></i> <i class="van-icon van-icon-replay"></i>
</div> </div>
</div> </div>
@ -221,6 +244,15 @@ const loadScore = () => {
/> />
</div> </div>
<span class="menu-item-label">Thông báo</span> <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> </router-link>
<div <div
class="menu-item" class="menu-item"
@ -255,4 +287,10 @@ a {
:deep(.van-image-preview__overlay) { :deep(.van-image-preview__overlay) {
background: rgba(0, 0, 0, 0.9); 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> </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> <template>
<div class="container page"> <div class="container page">
<div class="header"> <div class="header">
<div class="nav-bar van-nav-bar"> <div class="nav-bar van-nav-bar">
<div class="van-nav-bar__content"> <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 <i
class="van-icon van-icon-arrow-left" class="van-icon van-icon-arrow-left"
style="color: rgb(255, 255, 255)" style="color: rgb(255, 255, 255)"
@ -14,25 +75,54 @@
</div> </div>
</div> </div>
<div class="content"> <div class="content">
<div class="van-pull-refresh"> <van-pull-refresh
<div class="van-pull-refresh__track" style="transition-duration: 0ms"> v-model="refreshing"
<div class="van-pull-refresh__head"></div> @refresh="onRefresh"
<div class="listItem"> pulling-text="Kéo lên để làm mới..."
<div class="listTitle">Hoạt động trên không</div> 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"> <div class="listContent html">
<p> <p v-html="item.content"></p>
Chúng tôi CANALIS CLUB - Một quán Bar lớn . Phục vụ tận nơi <div style="text-align: right" v-if="!item.read">
tại 63 tỉnh thành trên toàn quốc . Chúng tôi những người mẫu <van-tag
cao cấp, tiếp viên hàng không, du học sinh.... Sẵn sàng phục vụ :show="countNotify"
quý khách hàng !<br /> round
</p> 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>
<div class="listTime"> <div class="listTime">
<div class="listTimeText">2023-07-05 23:06:33</div> <div class="listTimeText">
{{ formatDateTime(item.createdAt) }}
</div>
</div> </div>
</div> </div>
</div> </van-list>
</div> </van-pull-refresh>
</div> </div>
</div> </div>
</template> </template>

View File

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