This commit is contained in:
Putoo
2026-05-25 18:41:27 +08:00
parent 590f7c5290
commit 0afbf6e39a
32 changed files with 2137 additions and 101 deletions

View File

@@ -62,7 +62,6 @@ const visible = ref(props.isShow)
.popup-content {
margin-top: -35px;
padding: 15px 15px;
color: #e0e0e0;
font-size: 15px;
line-height: 1.6;
min-height: 80px;

View File

@@ -4,6 +4,7 @@
<div class="common">
<Abar href="/">首页</Abar>-
<Abar href="/">挂机</Abar>-
<Abar href="/treasure">聚宝盆</Abar>-
<a target="_blank" href="https://work.weixin.qq.com/kfid/kfc86bc348120aea3e7">反馈</a>
</div>

View File

@@ -9,6 +9,10 @@ export class PageExtend {
return value ? String(value) : ''
}
public static GetPageIndex(page: number, limit: number, index: number) {
return (page - 1) * limit + index;
}
// 回到顶部函数 默认平滑滚动到顶部
public static ScrollToTop(behavior: ScrollBehavior = 'smooth') {
if (typeof window !== 'undefined') {

View File

@@ -53,7 +53,7 @@ export class TimeExtend {
* 获取当前秒级时间戳
*/
public static GetSecondStamp(): number {
return Math.floor(Date.now() / 1000)
return Math.floor(Date.now() / 1000) + 28800
}
/**
@@ -70,12 +70,12 @@ export class TimeExtend {
return this.Now('HH:mm:ss')
}
/**
* 时间字符串 转换为 指定格式字符串
* 场景:把 "2025-01-01 12:30:45" 转成 "2025年01月01日" / "01-01 12:30" 等
* @param timeStr 时间字符串(如 2025-01-01、2025/01/01 12:30、2025-01-01 12:30:45
* @param format 目标格式
*/
/**
* 时间字符串 转换为 指定格式字符串
* 场景:把 "2025-01-01 12:30:45" 转成 "2025年01月01日" / "01-01 12:30" 等
* @param timeStr 时间字符串(如 2025-01-01、2025/01/01 12:30、2025-01-01 12:30:45
* @param format 目标格式
*/
public static StrToFormat(timeStr: string, format = 'yyyy-MM-dd HH:mm:ss'): string {
return this.Format(timeStr, format);
}

View File

@@ -1,8 +1,8 @@
<template>
<div class="content">
我的物品.<Abutton @click="Refresh">刷新</Abutton> <br>
金元: {{ bagInfo.gold }}<br />
金贝: {{ bagInfo.cowry }} <br />
金元:{{ bagInfo.gold }}<br />
金贝:{{ bagInfo.cowry }} <br />
负重:{{ bagInfo.onWeight }}/{{ bagInfo.maxWeight }} <br />
{{ bagInfo.copper }}<br />
<Abar href="/">交易记录</Abar><br>
@@ -27,7 +27,8 @@
<div v-if="type == '0'">
<Acheak @click="ChangeChildBag('0')" :on-value="type_ch" on-cheak="0">全部</Acheak>.<Acheak
@click="ChangeChildBag('1')" :on-value="type_ch" on-cheak="1">穿戴</Acheak>.<Acheak
@click="ChangeChildBag('2')" :on-value="type_ch" on-cheak="2"></Acheak>
@click="ChangeChildBag('2')" :on-value="type_ch" on-cheak="2"></Acheak>.<Acheak
@click="ChangeChildBag('3')" :on-value="type_ch" on-cheak="3">未鉴定</Acheak>
</div>
<div v-if="type == '2'">
<Acheak @click="ChangeChildBag('0')" :on-value="type_ch" on-cheak="0">全部</Acheak>.<Acheak
@@ -45,7 +46,37 @@
</div>
<div class="content">
暂无.
<div class="common" v-if="type == '0'">
<div class="item" v-for="(item, index) in data" :key="index">
{{ PageExtend.GetPageIndex(currentPage, 10, index + 1) }}.
<Abar href="">{{ item.equName }}({{item.lev}})</Abar>
<span v-if="item.isOn == 1">(穿)</span>
<span v-if="item.isAppr == 0">(未鉴定)</span>
<span v-if="item.useEndTime < onTime" style="color: red;">(过期)</span>
<span v-if="item.durability < 1" style="color: red;">(损坏)</span>
<span v-if="item.isLock == 1" style="color: green;">()</span>
</div>
</div>
<div class="common" v-if="type == '1'">
<div class="item" v-for="(item, index) in data" :key="index">
{{ PageExtend.GetPageIndex(currentPage, 10, index + 1) }}.
<Abar href="">{{ item.goodsName }}</Abar>({{ item.count }})
</div>
</div>
<div class="common" v-if="type == '2'">
<div class="item" v-for="(item, index) in data" :key="index">
{{ PageExtend.GetPageIndex(currentPage, 10, index + 1) }}.
<span v-if="item.code == 'Card'">
<Abar href="">{{ item.goodsName }}</Abar>({{ item.count }})
</span>
<span v-else>
<Abar href="">{{ item.goodsName }}</Abar>({{ item.count }})
</span>
</div>
</div>
<span v-if="data.length == 0">暂无.</span>
</div>
<div class="content">
<Pagination :currentPage="currentPage" :limit="10" :total="total" @pageChange="handlePageChange" />
@@ -65,17 +96,17 @@ const data = ref<Array<any>>([]);
const type = ref('0');
const type_ch = ref('0');
const serch = ref('');
const onTime = ref(0);
onMounted(async () => {
try {
onTime.value = TimeExtend.GetSecondStamp();
let result = await BagService.GetUserBagData();
if (result.code == 0) {
bagInfo.value = result.data;
await BindData();
}
console.log(result);
}
finally {
PageLoading.Close();
@@ -83,11 +114,11 @@ onMounted(async () => {
})
const BindData = async (): Promise<void> => {
let result = await MapService.GetMapUser(currentPage.value);
let result = await BagService.GetUserBagProp(Number(type.value), Number(type_ch.value), serch.value, currentPage.value)
if (result.code == 0) {
data.value = result.data.data;
total.value = result.data.total;
console.log(result);
console.log(data.value);
}
else {
MessageExtend.ShowDialog("提示", result.msg);
@@ -109,6 +140,7 @@ const ChangeChildBag = async (ch: string): Promise<void> => {
/**刷新 */
const Refresh = async (): Promise<void> => {
serch.value = '';
onTime.value = TimeExtend.GetSecondStamp();
MessageExtend.LoadingToast("刷新中...");
currentPage.value = 1;
await BindData();

View File

@@ -14,27 +14,32 @@
</div>
<div class="content">
您看到:
<Abar href="/map/user" v-if="mapUser.length>0">
<span v-for="item in mapUser">{{item.nick}} &nbsp;</span>
</Abar>
<Abar href="/map/user" v-if="mapUser.length > 0">
<span v-for="item in mapUser">{{ item.nick }} &nbsp;</span>
</Abar>
</div>
<div class="content">
<div class="item" v-for="item in npcData">
<Abar href="">{{ item.npcName }}{{ item.tips }}</Abar>
</div>
</div>
<div class="content">
请选择出口:<br />
<span v-if="mapDong.mapId != ''">东:<Abutton @click="BindData(mapDong.mapId)">{{ mapDong.name }}</Abutton></span>
<span v-if="mapXi.mapId != ''">西:<Abutton @click="BindData(mapXi.mapId)">{{ mapXi.name }}</Abutton></span>
<span v-if="mapDong.mapId != ''">东:<Abutton @click="BindData(mapDong.mapId)">{{ mapDong.name }}</Abutton>
<b v-if="toMapPathData.some(it => it.mapId == mapDong.mapId)">🚩</b>
</span>
<span v-if="mapXi.mapId != ''">西:<Abutton @click="BindData(mapXi.mapId)">{{ mapXi.name }}</Abutton>
<b v-if="toMapPathData.some(it => it.mapId == mapXi.mapId)">🚩</b></span>
<br v-if="mapDong.mapId != '' || mapXi.mapId != ''">
<span v-if="mapNan.mapId != ''">南:<Abutton @click="BindData(mapNan.mapId)">{{ mapNan.name }}</Abutton></span>
<span v-if="mapBei.mapId != ''">北:<Abutton @click="BindData(mapBei.mapId)">{{ mapBei.name }}</Abutton></span>
<span v-if="mapNan.mapId != ''">南:<Abutton @click="BindData(mapNan.mapId)">{{ mapNan.name }}</Abutton>
<b v-if="toMapPathData.some(it => it.mapId == mapNan.mapId)">🚩</b></span>
<span v-if="mapBei.mapId != ''">北:<Abutton @click="BindData(mapBei.mapId)">{{ mapBei.name }}</Abutton>
<b v-if="toMapPathData.some(it => it.mapId == mapBei.mapId)">🚩</b></span>
</div>
<div class="content">
<Abutton @click="ShowCityProp">城内地图</Abutton>.<Abar href="/">寻路</Abar><br />
<Abutton @click="ShowCityProp">城内地图</Abutton>.<Abutton @click="ShowMapPathProp">寻路</Abutton>
</div>
<div class="content">
{{ mapInfo.tips }}
@@ -53,6 +58,26 @@
</span>
</div>
</GamePopup>
<!--寻路-->
<GamePopup v-model:show="showPath" title="【自动寻路】">
<!-- 自定义内容 -->
<div class="content">
<div class="common serch" style="font-size: 16px; margin-top: 10px;">
搜索:&nbsp;<input type="text" class="search-ipt" v-model="mapPathSerch">&nbsp;
<button class="ipt-btn" name="serch" @click="ShowMapPathProp">搜索</button>
</div>
<div class="mapList" style="max-height: 300px;">
<span v-for="(item, index) in cityMapData" :key="index">
{{ index + 1 }}.
<Abutton @click="ChangeMapPath(item.mapId)">{{ item.mapName }}</Abutton>({{ item.x }},{{ item.y }})
<br>
</span>
<span v-if="cityMapData.length == 0">暂无地图.</span>
</div>
</div>
</GamePopup>
</template>
<script setup lang="ts">
definePageMeta({
@@ -132,4 +157,62 @@ const ChangeMap = async (mapId: string): Promise<void> => {
showCity.value = false;
};
/**寻路 */
const cityMapData = ref<Array<any>>([]);
const toMapPathData = ref<Array<any>>([]);
const showPath = ref(false);
const mapPathSerch = ref('');
let changPathLock = true;//寻路锁
const ShowMapPathProp = () => {
//加载数据
MapService.GetUserOnCityMap(mapPathSerch.value).then(res => {
if (res.code == 0) {
showPath.value = true;
mapPathSerch.value = '';
cityMapData.value = res.data;
}
else {
MessageExtend.ShowDialog("提示", res.msg);
}
});
}
const ChangeMapPath = async (mapId: string): Promise<void> => {
if (changPathLock) {
changPathLock = false;
//此处获取寻路路径信息
let result = await MapService.GetAutoMapPath(mapId);
changPathLock = true;
showPath.value = false;
if (result.code == 0) {
toMapPathData.value = []
toMapPathData.value = result.data;
StartToMap()
}
else {
MessageExtend.ShowDialog("提示", result.msg);
}
}
};
const timer = ref(0) // 定时器实例
const RunMap = async (): Promise<void> => {
if (toMapPathData.value.length > 0) {
var toPath = toMapPathData.value.shift();
await BindData(toPath.mapId);
toMapPathData.value = toMapPathData.value.filter(item => item !== toPath.mapId)
}
else {
clearInterval(timer.value);
MessageExtend.LoadingClose();
MessageExtend.Notify("寻路完成,已达到目的地!", "success");
}
}
const StartToMap = () => {
MessageExtend.LoadingToast("自动寻路中...");
timer.value = setInterval(async () => {
await RunMap()
}, 1000)
}
</script>

View File

@@ -0,0 +1,31 @@
<template>
<div class="content">聚宝盆</div>
<div class="content">
金元宝:51000 <br>
余额:5.22 <br>
抽奖次数:3 [<Abar>领取</Abar>] <br>
<Abar href="">我要抽奖</Abar>.<Abar>设置支付宝</Abar>
</div>
<div class="content">
我要提现:<br>
周一:<Abutton>提现(0.3)</Abutton><br>
周二:<Abutton>提现(0.3)</Abutton><br>
周三:<Abutton>提现(0.3)</Abutton><br>
周四:<Abutton>提现(0.3)</Abutton><br>
周五:<Abutton>提现(0.3)</Abutton><br>
周六:<Abutton>提现(0.3)</Abutton><br>
周日:<Abutton>提现(1)</Abutton><br>
</div>
<div class="content">
超级提现:<br>
<Abutton>提现(20)</Abutton><br>
<Abutton>提现(50)</Abutton><br>
<Abutton>提现(100)</Abutton><br>
</div>
<div class="content">
说明:<br>
1.每天完成日常任务可以领取抽奖次数<br>
2.抽奖将获得不同数额得金元宝每日0点按照100001结算到余额<br>
3.在羁绊时间内每天可通过支付宝提现领取游戏福利红包<br>
</div>
</template>

View File

@@ -14,4 +14,20 @@ export class MapService {
static async GetMapUser(page: number) {
return await ApiService.Request("get", "/Map/Map/GetMapUser", { page });
}
/**
* 获取当前城市所有地图
* GET /Map/Map/GetUserOnCityMap
*/
static async GetUserOnCityMap(search: string) {
return await ApiService.Request("get", "/Map/Map/GetUserOnCityMap", { search });
}
/**
* 获取自动寻路路径
* GET /Map/Map/GetAutoMapPath
*/
static async GetAutoMapPath(toMap: string) {
return await ApiService.Request("get", "/Map/Map/GetAutoMapPath", { toMap });
}
}

View File

@@ -6,4 +6,12 @@ export class BagService {
static async GetUserBagData() {
return await ApiService.Request("get", "/User/Bag/GetUserBagData");
}
/**
* GetUserBagProp
* GET /User/Bag/GetUserBagProp
*/
static async GetUserBagProp(type: number, ch: number, query: string, page: number) {
return await ApiService.Request("get", "/User/Bag/GetUserBagProp", { type, ch, query, page });
}
}