1212
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<template>
|
||||
<Abar href="">{{data.nick}}</Abar>
|
||||
<template>
|
||||
<Abar :href='"/user/user?no=" +data.userNo' >{{ data.nick }}</Abar>
|
||||
</template>
|
||||
<script lang="ts" setup>
|
||||
const props = defineProps({
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
<div class="common">
|
||||
<Abar href="/">首页</Abar>-
|
||||
<Abar href="/">挂机</Abar>-
|
||||
<Abar href="/treasure">聚宝盆</Abar>-
|
||||
<!-- <Abar href="/treasure">聚宝盆</Abar>- -->
|
||||
<a target="_blank" href="https://work.weixin.qq.com/kfid/kfc86bc348120aea3e7">反馈</a>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
<template>
|
||||
<div class="common">
|
||||
<Abar href="/">状态</Abar>.
|
||||
<Abar href="/user">状态</Abar>.
|
||||
<Abar href="/bag">物品</Abar>.
|
||||
<Abar href="/chat">聊天</Abar>
|
||||
</div>
|
||||
<div class="common">
|
||||
<Abar href="/">好友</Abar>.
|
||||
<Abar href="/">宠物</Abar>.
|
||||
<Abar href="/">队伍</Abar>
|
||||
<Abar href="/friend">好友</Abar>.
|
||||
<Abar href="/pet">宠物</Abar>.
|
||||
<Abar href="/team">队伍</Abar>
|
||||
</div>
|
||||
<div class="common">
|
||||
<Abar href="/">商城</Abar>.
|
||||
<Abar href="/">活动</Abar>.
|
||||
<Abar href="/">排行</Abar>
|
||||
<Abar href="/mall">商城</Abar>.
|
||||
<Abar href="/activity">活动</Abar>.
|
||||
<Abar href="/rank">排行</Abar>
|
||||
</div>
|
||||
</template>
|
||||
46
Web/src/extends/LocalStorageExtend.ts
Normal file
46
Web/src/extends/LocalStorageExtend.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
export class LocalStorageExtend {
|
||||
/**
|
||||
* 设置本地存储
|
||||
* @param key 键名
|
||||
* @param value 值(支持任意类型:对象/数组/字符串/数字)
|
||||
*/
|
||||
public static Set<T>(key: string, value: T): void {
|
||||
try {
|
||||
const data = JSON.stringify(value);
|
||||
window.localStorage.setItem(key, data);
|
||||
} catch (error) {
|
||||
console.error('localStorage 设置失败:', error);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取本地存储
|
||||
* @param key 键名
|
||||
* @param defaultValue 默认值(取不到时返回)
|
||||
* @returns 解析后的值
|
||||
*/
|
||||
public static Get<T>(key: string, defaultValue?: T): T | null {
|
||||
try {
|
||||
const data = window.localStorage.getItem(key);
|
||||
if (!data) return defaultValue ?? null;
|
||||
return JSON.parse(data) as T;
|
||||
} catch (error) {
|
||||
console.error('localStorage 获取失败:', error);
|
||||
return defaultValue ?? null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除指定存储
|
||||
*/
|
||||
public static Remove(key: string): void {
|
||||
window.localStorage.removeItem(key);
|
||||
}
|
||||
|
||||
/**
|
||||
* 清空所有存储
|
||||
*/
|
||||
public static Clear(): void {
|
||||
window.localStorage.clear();
|
||||
}
|
||||
}
|
||||
3
Web/src/pages/activity/index.vue
Normal file
3
Web/src/pages/activity/index.vue
Normal file
@@ -0,0 +1,3 @@
|
||||
<template>
|
||||
|
||||
</template>
|
||||
@@ -4,7 +4,7 @@
|
||||
金元:{{ bagInfo.gold }}<br />
|
||||
金贝:{{ bagInfo.cowry }} <br />
|
||||
负重:{{ bagInfo.onWeight }}/{{ bagInfo.maxWeight }} <br />
|
||||
{{ bagInfo.copper }}铜<br />
|
||||
{{ GameTool.FormatCopper(bagInfo.copper) }}<br />
|
||||
<Abar href="/">交易记录</Abar><br>
|
||||
<Abar href="/">赠送记录</Abar>
|
||||
</div>
|
||||
@@ -48,31 +48,30 @@
|
||||
<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>
|
||||
{{ PageExtend.GetPageIndex(currentPage, 10, index + 1) }}.
|
||||
<Abar :href='"/prop/goods?ue=" + item.ueId'>{{ 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.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 }})
|
||||
<Abar :href='"/prop/goods?id=" + item.goodsId'>{{ 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 }})
|
||||
<Abar :href='"/prop/goods?id=" + item.goodsId'>{{ item.goodsName }}</Abar>({{ item.count }})
|
||||
</span>
|
||||
<span v-else>
|
||||
<Abar href="">{{ item.goodsName }}</Abar>({{ item.count }})
|
||||
<Abar :href='"/prop/goods?id=" + item.goodsId'>{{ item.goodsName }}</Abar>({{ item.count }})
|
||||
</span>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -84,6 +83,13 @@
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
|
||||
interface bagStorage {
|
||||
type: string
|
||||
type_ch: string
|
||||
page: number
|
||||
serch: string
|
||||
}
|
||||
|
||||
definePageMeta({
|
||||
layout: layout.default,
|
||||
middleware: 'page-loading'
|
||||
@@ -101,7 +107,15 @@ const onTime = ref(0);
|
||||
|
||||
onMounted(async () => {
|
||||
try {
|
||||
onTime.value = TimeExtend.GetSecondStamp();
|
||||
onTime.value = TimeExtend.GetSecondStamp();
|
||||
let localData = LocalStorageExtend.Get<bagStorage>("BagPageCache");
|
||||
if (localData != null) {
|
||||
type.value = localData.type;
|
||||
type_ch.value = localData.type_ch;
|
||||
currentPage.value = localData.page;
|
||||
serch.value = localData.serch;
|
||||
}
|
||||
|
||||
let result = await BagService.GetUserBagData();
|
||||
if (result.code == 0) {
|
||||
bagInfo.value = result.data;
|
||||
@@ -117,8 +131,11 @@ const BindData = async (): Promise<void> => {
|
||||
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(data.value);
|
||||
total.value = result.data.total;
|
||||
|
||||
//存储请求参数
|
||||
let addLocalData: bagStorage = { type: type.value, type_ch: type_ch.value, page: currentPage.value, serch: serch.value };
|
||||
LocalStorageExtend.Set("BagPageCache", addLocalData);
|
||||
}
|
||||
else {
|
||||
MessageExtend.ShowDialog("提示", result.msg);
|
||||
@@ -128,12 +145,13 @@ const BindData = async (): Promise<void> => {
|
||||
/**切换背包 */
|
||||
const ChangeBag = async (_type: string): Promise<void> => {
|
||||
type.value = _type;
|
||||
type_ch.value = '0';
|
||||
type_ch.value = '0';
|
||||
serch.value='';
|
||||
await BindData();
|
||||
}
|
||||
|
||||
const ChangeChildBag = async (ch: string): Promise<void> => {
|
||||
type_ch.value = ch;
|
||||
type_ch.value = ch;
|
||||
await BindData();
|
||||
}
|
||||
|
||||
@@ -143,14 +161,14 @@ const Refresh = async (): Promise<void> => {
|
||||
onTime.value = TimeExtend.GetSecondStamp();
|
||||
MessageExtend.LoadingToast("刷新中...");
|
||||
currentPage.value = 1;
|
||||
await BindData();
|
||||
await BindData();
|
||||
MessageExtend.LoadingClose();
|
||||
PageExtend.ScrollToTop();
|
||||
}
|
||||
|
||||
/**翻页 */
|
||||
const handlePageChange = async (page: number): Promise<void> => {
|
||||
currentPage.value = page;
|
||||
currentPage.value = page;
|
||||
await BindData();
|
||||
};
|
||||
|
||||
|
||||
1
Web/src/pages/friend/index.vue
Normal file
1
Web/src/pages/friend/index.vue
Normal file
@@ -0,0 +1 @@
|
||||
<template></template>
|
||||
3
Web/src/pages/mall/index.vue
Normal file
3
Web/src/pages/mall/index.vue
Normal file
@@ -0,0 +1,3 @@
|
||||
<template>
|
||||
|
||||
</template>
|
||||
3
Web/src/pages/pet/index.vue
Normal file
3
Web/src/pages/pet/index.vue
Normal file
@@ -0,0 +1,3 @@
|
||||
<template>
|
||||
暂未开放.
|
||||
</template>
|
||||
1
Web/src/pages/prop/equ.vue
Normal file
1
Web/src/pages/prop/equ.vue
Normal file
@@ -0,0 +1 @@
|
||||
<template></template>
|
||||
1
Web/src/pages/prop/goods.vue
Normal file
1
Web/src/pages/prop/goods.vue
Normal file
@@ -0,0 +1 @@
|
||||
<template></template>
|
||||
1
Web/src/pages/rank/index.vue
Normal file
1
Web/src/pages/rank/index.vue
Normal file
@@ -0,0 +1 @@
|
||||
<template></template>
|
||||
1
Web/src/pages/team/index.vue
Normal file
1
Web/src/pages/team/index.vue
Normal file
@@ -0,0 +1 @@
|
||||
<template></template>
|
||||
88
Web/src/pages/user/index.vue
Normal file
88
Web/src/pages/user/index.vue
Normal file
@@ -0,0 +1,88 @@
|
||||
<template>
|
||||
<div class="content">
|
||||
<Abar href="">更换称号</Abar><br>
|
||||
ID:{{ userData.userNo }} [<Abar href="">升靓号</Abar>]<br>
|
||||
昵称:<Abar href="">{{ userData.nick }}</Abar><br>
|
||||
性别:<Abar href="">{{ userData.sex }}</Abar><br>
|
||||
<Abar>特权</Abar>:<br>
|
||||
徽章:<Abar>显示</Abar><br>
|
||||
社交:<Abar>未收到礼物</Abar><br>
|
||||
婚姻:单身<br>
|
||||
个性签名:{{ userData.sign }}.<Abar>修改</Abar><br>
|
||||
宠物:暂无<br>
|
||||
坐骑:无<br>
|
||||
成就:<Abar>展示成就</Abar><br>
|
||||
等级:{{ attrData.lev }}<br>
|
||||
综合战力:{{attrData.score}}<br>
|
||||
经验:{{ expData.exp }}/{{ expData.upExp }}<br>
|
||||
体力:{{attrData.blood}}/{{attrData.upBlood}} {{attrData.bloodTips}}<br>
|
||||
攻击:{{attrData.minAtk}}-{{attrData.maxAtk}} {{attrData.atkTips}}<br>
|
||||
防御:{{attrData.defense}} {{attrData.defTips}}<br>
|
||||
敏捷:{{attrData.agility}} {{attrData.agilityTips}}<br>
|
||||
士气:{{attrData.morale}}/{{attrData.upMorale}} {{attrData.moraleTips}}<br>
|
||||
师德:{{accData.teach}}<br>
|
||||
声望:{{accData.renown}}<br>
|
||||
活力:{{ vitality }}<br>
|
||||
罪恶值:0<br>
|
||||
帮派:无<br>
|
||||
<!-- ---◈药品状态◈---<br>
|
||||
◆体力宝+24370<br>
|
||||
◆耐久包+0<br> -->
|
||||
</div>
|
||||
<div class="content">
|
||||
<div class="item">
|
||||
<Abar>装备</Abar>.
|
||||
<Abar>技能</Abar>.
|
||||
<Abar>特性</Abar>
|
||||
</div>
|
||||
<div class="item">
|
||||
<Abar>帮派</Abar>.
|
||||
<Abar>船队</Abar>.
|
||||
<Abar>房产</Abar>
|
||||
</div>
|
||||
<div class="item">
|
||||
<Abar>山寨</Abar>.
|
||||
<Abar>交易</Abar>.
|
||||
<Abar>设置</Abar>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
|
||||
definePageMeta({
|
||||
layout: layout.default,
|
||||
middleware: 'page-loading'
|
||||
})
|
||||
const userData = ref<any>({});
|
||||
const vitality = ref(0);
|
||||
const expData = ref<any>({});
|
||||
const attrData = ref<any>({});
|
||||
const accData = ref<any>({});
|
||||
|
||||
onMounted(async () => {
|
||||
try {
|
||||
await BindData();
|
||||
}
|
||||
finally {
|
||||
PageLoading.Close();
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
const BindData = async (): Promise<void> => {
|
||||
let result = await UserService.GetUserInfo();
|
||||
if (result.code == 0) {
|
||||
userData.value = result.data.user;
|
||||
vitality.value = result.data.vitality;
|
||||
expData.value = result.data.exp;
|
||||
attrData.value = result.data.attr;
|
||||
accData.value = result.data.acc;
|
||||
console.log(result);
|
||||
}
|
||||
else {
|
||||
MessageExtend.ShowDialog("提示", result.msg);
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
90
Web/src/pages/user/user.vue
Normal file
90
Web/src/pages/user/user.vue
Normal file
@@ -0,0 +1,90 @@
|
||||
<template>
|
||||
<div class="content">
|
||||
<Abar>私聊</Abar>. <Abar>送礼物</Abar>. <Abar>逗一下</Abar><br />
|
||||
<Abar>拜师</Abar>. <Abar>山寨</Abar>. <Abar>送道具</Abar><br>
|
||||
<Abar>加好友</Abar>. <Abar>加仇人</Abar>
|
||||
</div>
|
||||
<div class="content"></div>
|
||||
<div class="content">
|
||||
ID:{{ userData.userNo }}({{ online == 1 ? '在线' : '离线' }})<br>
|
||||
昵称:{{ userData.nick }}<br>
|
||||
特权:<br>
|
||||
徽章:<br>
|
||||
社交: 暂无<br>
|
||||
婚姻:<br>
|
||||
结拜:暂无<br>
|
||||
宠物:暂无<br>
|
||||
坐骑:无<br>
|
||||
成就:<br>
|
||||
个性签名:{{ userData.sign }}<br>
|
||||
罪恶值:0<br>
|
||||
师德:{{ accData.teach }}<br>
|
||||
</div>
|
||||
<div class="content">
|
||||
{{ attrData.lev }}级{{ userData.sex }}性({{ onMap }})
|
||||
</div>
|
||||
<div class="content">
|
||||
手持: <br>
|
||||
副手:<br>
|
||||
头戴:<br>
|
||||
身穿: <br>
|
||||
腰带: <br>
|
||||
脚穿: <br>
|
||||
佩戴: <br>
|
||||
时装:<br>
|
||||
羽翼: <br>
|
||||
装饰: <br>
|
||||
套装: <br>
|
||||
帮会: <br>
|
||||
队伍:<br>
|
||||
</div>
|
||||
<div class="content"></div>
|
||||
</template>
|
||||
<script setup lang="ts">
|
||||
|
||||
definePageMeta({
|
||||
layout: layout.default,
|
||||
middleware: 'page-loading'
|
||||
})
|
||||
const userData = ref<any>({});
|
||||
const attrData = ref<any>({});
|
||||
const accData = ref<any>({});
|
||||
const online = ref(0);
|
||||
const onMap = ref('');
|
||||
|
||||
onMounted(async () => {
|
||||
try {
|
||||
await BindData();
|
||||
}
|
||||
finally {
|
||||
PageLoading.Close();
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
|
||||
const BindData = async (): Promise<void> => {
|
||||
let no = PageExtend.QueryString("no");
|
||||
let result = await UserService.GetHomeInfo(no);
|
||||
if (result.code == 0) {
|
||||
userData.value = result.data.user;
|
||||
attrData.value = result.data.attr;
|
||||
accData.value = result.data.acc;
|
||||
online.value = result.data.isOnline;
|
||||
onMap.value = result.data.onMapName;
|
||||
console.log(result);
|
||||
}
|
||||
else if (result.code == 101) {
|
||||
return PageExtend.Redirect("/user");
|
||||
}
|
||||
else if (result.code == 102) {
|
||||
MessageExtend.ShowDialogEvent("提示", "玩家不存在!", () => {
|
||||
return PageExtend.Redirect("/user");
|
||||
}, "确认");
|
||||
}
|
||||
else {
|
||||
MessageExtend.ShowDialog("提示", result.msg);
|
||||
}
|
||||
};
|
||||
|
||||
</script>
|
||||
17
Web/src/services/user/UserService.ts
Normal file
17
Web/src/services/user/UserService.ts
Normal file
@@ -0,0 +1,17 @@
|
||||
export class UserService {
|
||||
/**
|
||||
* 获取个人资料信息
|
||||
* GET /User/User/GetUserInfo
|
||||
*/
|
||||
static async GetUserInfo() {
|
||||
return await ApiService.Request("get", "/User/User/GetUserInfo");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取用户资料
|
||||
* GET /User/User/GetHomeInfo
|
||||
*/
|
||||
static async GetHomeInfo(no: string) {
|
||||
return await ApiService.Request("get", "/User/User/GetHomeInfo", { no });
|
||||
}
|
||||
}
|
||||
38
Web/src/utility/GameTool.ts
Normal file
38
Web/src/utility/GameTool.ts
Normal file
@@ -0,0 +1,38 @@
|
||||
export class GameTool {
|
||||
/**
|
||||
* 静态方法:将总铜数转换为 金/银/铜 字符串
|
||||
* @param totalCopper 总铜数量
|
||||
* @returns 格式化字符串,如:1金 234银 567铜
|
||||
*/
|
||||
public static FormatCopper(totalCopper: number | string): string {
|
||||
// 安全转为数字并取整(货币无小数)
|
||||
let copper = Math.floor(Number(totalCopper) || 0);
|
||||
|
||||
// 处理负数
|
||||
const isNegative = copper < 0;
|
||||
copper = Math.abs(copper);
|
||||
|
||||
// 单位换算
|
||||
const copperUnit = copper % 1000;
|
||||
const totalSilver = Math.floor(copper / 1000);
|
||||
const silverUnit = totalSilver % 1000;
|
||||
const goldUnit = Math.floor(totalSilver / 1000);
|
||||
|
||||
// 拼接非0单位
|
||||
const parts: string[] = [];
|
||||
if (goldUnit > 0) parts.push(`${goldUnit}金`);
|
||||
if (silverUnit > 0) parts.push(`${silverUnit}银`);
|
||||
if (copperUnit > 0) parts.push(`${copperUnit}铜`);
|
||||
|
||||
// 空值显示 0铜
|
||||
let result = parts.length > 0 ? parts.join(' ') : '0铜';
|
||||
|
||||
// 恢复负号
|
||||
if (isNegative) {
|
||||
result = `-${result}`;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user