This commit is contained in:
Putoo
2026-06-01 18:49:17 +08:00
parent 8a5b6d31ca
commit eb81a1c381
50 changed files with 1367 additions and 59 deletions

View File

@@ -16,7 +16,7 @@
</span>
</span>
<span v-if="CheckRole(item.chat.code)">
[<Abutton @click="DelChat(item.chat.chatId)">删除</Abutton>]
[<Abutton @click="DelChat(item.chat.chatId)">删除</Abutton>.<Abutton @click="BlackChat(item.chat.chatId)">封禁</Abutton>]
</span>
</div>
</div>
@@ -68,10 +68,13 @@ const CheckRole = (type: string): boolean => {
}
// 1. 声明要触发的事件
const emit = defineEmits(['delChat'])
const emit = defineEmits(['delChat','blackChat'])
const DelChat = async (chatId: string) => {
emit('delChat', { chatId: chatId });
}
const BlackChat = async (chatId: string) => {
emit('blackChat', { chatId: chatId });
}
</script>

View File

@@ -1,7 +1,7 @@
<template>
<div class="common">
<Abar href="/user">状态</Abar>.
<Abar href="/bag">物品</Abar>.
<Abar href="/user/bag">物品</Abar>.
<Abar href="/chat">聊天</Abar>
</div>
<div class="common">

View File

@@ -1 +0,0 @@
<template></template>

View File

@@ -0,0 +1,58 @@
<template>
<div class="content">
恢复体力
</div>
<div class="content">
当前体力{{ data.blood }}/{{ data.upBlood }}
</div>
<div class="content" v-if="data.blood < data.upBlood">
[<Abutton @click="Recover">立即恢复</Abutton>]
</div>
<div class="content" v-else>
体力满满,无需恢复!
</div>
</template>
<script setup lang="ts">
definePageMeta({
layout: layout.default,
middleware: 'page-loading'
})
const data = ref<any>({});
onMounted(async () => {
try {
await BindData();
}
finally {
PageLoading.Close();
}
})
const BindData = async (): Promise<void> => {
let result = await UserService.GetUserBaseAttrInfo("")
if (result.code == 0) {
data.value = result.data;
}
else {
MessageExtend.ShowDialog("提示", result.msg);
}
};
const Recover = async (): Promise<void> => {
let npcId = LocalStorageHelper.GetOnNpc();
MessageExtend.LoadingToast("恢复中...");
let result = await RecoverService.RecoverBlood(Number(npcId));
MessageExtend.LoadingClose();
if (result.code == 0) {
MessageExtend.Notify("恢复成功!", "success");
await BindData();
}
else {
MessageExtend.ShowDialog("提示", result.msg);
}
};
</script>

View File

@@ -1 +1,58 @@
<template></template>
<template>
<div class="content">
恢复士气
</div>
<div class="content">
当前士气{{ data.morale }}/{{ data.upMorale }}
</div>
<div class="content" v-if="data.morale < data.upMorale">
[<Abutton @click="Recover">立即恢复</Abutton>]
</div>
<div class="content" v-else>
士气满满,无需恢复!
</div>
</template>
<script setup lang="ts">
definePageMeta({
layout: layout.default,
middleware: 'page-loading'
})
const data = ref<any>({});
onMounted(async () => {
try {
await BindData();
}
finally {
PageLoading.Close();
}
})
const BindData = async (): Promise<void> => {
let result = await UserService.GetUserBaseAttrInfo("")
if (result.code == 0) {
data.value = result.data;
}
else {
MessageExtend.ShowDialog("提示", result.msg);
}
};
const Recover = async (): Promise<void> => {
let npcId = LocalStorageHelper.GetOnNpc();
MessageExtend.LoadingToast("恢复中...");
let result = await RecoverService.RecoverMorale(Number(npcId));
MessageExtend.LoadingClose();
if (result.code == 0) {
MessageExtend.Notify("恢复成功!", "success");
await BindData();
}
else {
MessageExtend.ShowDialog("提示", result.msg);
}
};
</script>

View File

@@ -0,0 +1,58 @@
<template>
<div class="content">
恢复活力
</div>
<div class="content">
当前活力{{ data.vitality }}/{{ data.upVitality }}
</div>
<div class="content" v-if="data.vitality < data.upVitality">
[<Abutton @click="Recover">立即恢复</Abutton>]
</div>
<div class="content" v-else>
活力满满,无需恢复!
</div>
</template>
<script setup lang="ts">
definePageMeta({
layout: layout.default,
middleware: 'page-loading'
})
const data = ref<any>({});
onMounted(async () => {
try {
await BindData();
}
finally {
PageLoading.Close();
}
})
const BindData = async (): Promise<void> => {
let result = await RecoverService.GetUserVigour()
if (result.code == 0) {
data.value = result.data;
}
else {
MessageExtend.ShowDialog("提示", result.msg);
}
};
const Recover = async (): Promise<void> => {
let npcId = LocalStorageHelper.GetOnNpc();
MessageExtend.LoadingToast("恢复中...");
let result = await RecoverService.RecoverVigour(Number(npcId));
MessageExtend.LoadingClose();
if (result.code == 0) {
MessageExtend.Notify("恢复成功!", "success");
await BindData();
}
else {
MessageExtend.ShowDialog("提示", result.msg);
}
};
</script>

View File

@@ -12,7 +12,7 @@
<Acheak @click="ChangeChat('5')" :on-value="type" on-cheak="5">系统</Acheak>
</div>
<div class="content">
<GameChat :data="data" :show-time="1" :role="chatRole" @delChat="DelChat"></GameChat>
<GameChat :data="data" :show-time="1" :role="chatRole" @delChat="DelChat" @blackChat="BlackChat"></GameChat>
<span v-if="data.length == 0">暂无发言.</span>
</div>
<div class="content">
@@ -131,14 +131,29 @@ const ChangeChat = async (typeid: string): Promise<void> => {
//删除记录
const DelChat = async (data: any) => {
MessageExtend.ShowConfirmDialogAsyc("频道管理", `您确定要删除该发言吗?`, async () => {
let result = await ChatService.DeleteChat(data.chatId);
MessageExtend.ShowConfirmDialogAsyc("频道管理", `您确定要删除该发言吗?`, async () => {
let result = await ChatService.DeleteChat(data.chatId);
if (result.code == 0) {
await BindData();
MessageExtend.Notify("删除成功!", "success");
}
else {
MessageExtend.ShowDialog("删除操作", result.msg);
MessageExtend.Notify(result.msg, "danger");
}
return true;
});
}
/**封禁 */
const BlackChat = async (data: any) => {
MessageExtend.ShowConfirmDialogAsyc("频道管理", `您确定要封禁Ta吗?`, async () => {
let result = await ChatService.BlackUser(data.chatId);
if (result.code == 0) {
await BindData();
MessageExtend.Notify("封禁成功!", "success");
}
else {
MessageExtend.Notify(result.msg, "danger");
}
return true;

View File

@@ -1 +1,189 @@
<template></template>
<template>
<div class="content">
<div class="common" v-if="equInfo.img != ''">
<Aimage :url="equInfo.img" _alt="."></Aimage>
</div>
<div class="common" v-if="ueId == ''">
名称:{{ equInfo.equName }}<br>
部位:{{ EquTool.GetEquPlaceName(equInfo.code) }}<br>
等级:{{ equInfo.lev }}<br>
交易:{{ equInfo.isDeal == 1 ? "可交易" : "不可交易" }}<br>
赠送:{{ equInfo.isGive == 1 ? "可赠送" : "不可赠送" }}<br>
获取途径:{{ equInfo.source }}<br>
说明:{{ equInfo.remark }}<br>
<span v-if="equInfo.sex != 'Default'">
性别:{{ equInfo.sex == 'Boy' ? "" : "" }}<br>
</span>
强化:{{ equInfo.isIntensify == 1 ? "可强化" : "不可强化" }}<br>
负重:{{ equInfo.weight }}<br>
<div v-if="equInfo.isAppr == 0" style="margin:0px;">
<span v-if="Number(equInfo.blood) > 0">
体力:{{ equInfo.blood }}<br>
</span>
<span v-if="Number(equInfo.minAtk) > 0">
攻击:{{ equInfo.minAtk }}-{{ equInfo.maxAtk }}<br>
</span>
<span v-if="Number(equInfo.defense) > 0">
防御:{{ equInfo.defense }}<br>
</span>
<span v-if="Number(equInfo.agility) > 0">
敏捷:{{ equInfo.agility }}<br>
</span>
<span v-if="Number(equInfo.morale) > 0">
士气:{{ equInfo.morale }}<br>
</span>
</div>
耐久:{{ equInfo.durability }}<br>
<span v-if="equInfo.suitCode != '0' && equInfo.suitCode != ''">
套装:<Abar href="/">{{ suitInfo.suitName }}</Abar><br>
</span>
特性:{{ EquTool.GetEquAttrName(equInfo.equAttr, 0) }}<br>
<span v-if="equInfo.holeCount > 0">
镶嵌:{{ equInfo.holeCount }}<br>
</span>
<span v-if="equInfo.useTime > 0">
有效期:{{ equInfo.useTime }}
</span>
<div v-if="equInfo.isAppr == 1">
(*该装备需要鉴定)
</div>
</div>
<div class="common" v-if="ueId != ''">
名称:{{ equData.equName }}<br>
<span v-if="equData.equName != equData.unitEquName">
装备名称:{{ equData.unitEquName }}<br>
</span>
部位:{{ EquTool.GetEquPlaceName(equData.code) }}<br>
等级:{{ equData.lev }}<br>
品阶:{{ EquTool.EquStartTips(equData.start) }}<br>
<span v-if="equData.quality > 0">
品质:<Abar href="">equData.qualityName</Abar><br>
</span>
交易:{{ equData.isDeal == 1 ? "可交易" : "不可交易" }}<br>
赠送:{{ equData.isGive == 1 ? "可赠送" : "不可赠送" }}<br>
获取途径:{{ equInfo.source }}<br>
说明:{{ equInfo.remark }}<br>
签名:{{ equData.sign }}<br>
获得人:<GameUser :data="owUser" :show-icon="0" :show-area="0"></GameUser><br>
<span v-if="equData.sex != 'Default'">
性别:{{ equData.sex == 'Boy' ? "" : "" }}<br>
</span>
强化:{{ equData.isIntensify == 1 ? "可强化" : "不可强化" }}<br>
<span v-if="equData.intensifyLev > 0">
强化等级:{{ equData.intensifyLev }}<br>
</span>
<span v-if="equAwaken.length > 0">
<Abar href="">装备特性:{{ equAwaken[0].name }}({{ equAwaken[0].lev }})</Abar><br>
</span>
附魔:{{ equMent.name }}<br>
负重:{{ equData.weight }}<br>
<div v-if="equData.isAppr == 1" style="margin:0px;">
<span v-if="Number(equData.blood) > 0">
体力:{{ equData.blood }}<br>
</span>
<span v-if="Number(equData.minAtk) > 0">
攻击:{{ equData.minAtk }}-{{ equData.maxAtk }}<br>
</span>
<span v-if="Number(equData.defense) > 0">
防御:{{ equData.defense }}<br>
</span>
<span v-if="Number(equData.agility) > 0">
敏捷:{{ equData.agility }}<br>
</span>
<span v-if="Number(equData.morale) > 0">
士气:{{ equData.morale }}<br>
</span>
</div>
耐久:{{ equData.maxdurability }}/{{ equData.durability }}<br>
<span v-if="equData.suitCode != '0' && equData.suitCode != ''">
套装:<Abar href="/">{{ suitInfo.suitName }}</Abar><br>
</span>
特性:{{ EquTool.GetEquAttrName(equData.equAttr, 0) }}<br>
<span v-if="equData.holeCount > 0">
镶嵌:({{ gemMent.length }}/{{ equData.holeCount }})<br>
</span>
<span v-if="equData.opTime == 0">
<span v-if="equInfo.useTime > 0">
有效期:{{ equInfo.useTime }}
</span>
</span>
<span v-else>
<span v-if="equInfo.useTime > 0">
到期时间:{{ TimeExtend.Format(equData.useEndTime, "yyyy-MM-dd") }}
</span>
</span>
<div v-if="equData.isAppr == 0">
(*该装备需要鉴定)
</div>
<div class="common" v-if="myUserId == equData.userId && equData.isAppr == 1">
<span>
<Abutton>穿戴装备</Abutton><br>
</span>
<span>
<Abutton>洗练</Abutton><br>
</span>
<span>
<Abutton>觉醒</Abutton><br>
</span>
<span>
<Abutton>升星</Abutton><br>
</span>
<span>
<Abutton>绑定</Abutton><br>
</span>
<span>
<Abar href="">寄售</Abar><br>
</span>
<span>
<Abutton>个性化</Abutton><br>
</span>
</div>
</div>
</div>
</template>
<script setup lang="ts">
definePageMeta({
layout: layout.default,
middleware: 'page-loading'
})
const equData = ref<any>({});
const equInfo = ref<any>({});
const suitInfo = ref<any>({});
const owUser = ref<any>({});
const equAwaken = ref<Array<any>>([]);
const equMent = ref<any>({});
const gemMent = ref<Array<any>>([]);
const myUserId = StateHelper.userId;
let ueId = PageExtend.QueryString("ue");
onMounted(async () => {
try {
await BindData();
}
finally {
PageLoading.Close();
}
})
const BindData = async (): Promise<void> => {
let equId = PageExtend.QueryString("id");
let result = await EquService.GetEquInfo(Number(equId), ueId);
if (result.code == 0) {
equData.value = result.data.equData;
equInfo.value = result.data.equ;
suitInfo.value = result.data.suit;
owUser.value = result.data.user;
equAwaken.value = result.data.equData.equAwaken;
equMent.value = result.data.equData.equMent;
gemMent.value = result.data.equData.gemMent;
console.log(result);
}
else {
MessageExtend.ShowDialog("提示", result.msg);
}
};
</script>

View File

@@ -1 +1,56 @@
<template></template>
<template>
<div class="content">
<div class="common" v-if="data.img != ''">
<Aimage :url="data.img" _alt="."></Aimage>
</div>
名称:{{ data.goodsName }} <Abar href="" v-if="count > 0">寄售</Abar><br>
<div class="common" v-if="data.code == 'Card'">
等级:{{ data.lev }}
</div>
获取途径:{{ data.source }}<br>
说明:{{ data.tips }}<br>
交易:{{ data.isDeal == 1 ? "可交易" : "不可交易" }}<br>
赠送:{{ data.isGive == 1 ? "可赠送" : "不可赠送" }}<br>
负重:{{ data.weight }}<br>
</div>
<div class="content" v-if="count > 0">
<div class="common">
数量:{{ count }}
</div>
</div>
</template>
<script setup lang="ts">
definePageMeta({
layout: layout.default,
middleware: 'page-loading'
})
const data = ref<any>({});
const count = ref(0);
onMounted(async () => {
try {
await BindData();
}
finally {
PageLoading.Close();
}
})
const BindData = async (): Promise<void> => {
let goodsId = PageExtend.QueryString("id");
let result = await GoodsService.GetGoodsInfo(Number(goodsId));
if (result.code == 0) {
data.value = result.data.goods;
count.value = result.data.count;
console.log(result);
}
else {
MessageExtend.ShowDialog("提示", result.msg);
}
};
</script>

View File

@@ -49,7 +49,7 @@
<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='"/prop/goods?ue=" + item.ueId'>{{ item.equName }}({{ item.lev }})</Abar>
<Abar :href='"/prop/equ?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>

View File

@@ -14,16 +14,40 @@
</div>
<div class="item border-btm ">
<Abar href="/user/setting/drug">急救箱设置</Abar>
</div>
<div class="item border-btm ">
<Abutton>重置负重</Abutton><span style="font-size: 14px;;">(*重置负重数据)</span>
</div>
<div class="item border-btm ">
<Abutton>刷新图标</Abutton><span style="font-size: 14px;;">(*更新图标数据)</span>
<Abutton @click="RefreshSetting(0)">重置负重</Abutton><span style="font-size: 14px;;">(*重置负重数据)</span>
</div>
<div class="item border-btm ">
<Abutton @click="RefreshSetting(1)">刷新图标</Abutton><span style="font-size: 14px;;">(*更新图标数据)</span>
</div>
</div>
</template>
<script setup lang="ts">
definePageMeta({
layout: layout.default,
middleware: 'page-loading'
})
const role = ref(0);
onMounted(async () => {
try {
}
finally {
PageLoading.Close();
}
})
const RefreshSetting = async (_type: number) => {
MessageExtend.LoadingToast("操作中...");
let result = await SettingService.RefreshSetting(_type);
MessageExtend.LoadingClose();
if (result.code == 0) {
MessageExtend.Notify(result.msg, "success");
}
else {
MessageExtend.ShowDialog("操作提示", result.msg);
}
}
</script>

View File

@@ -1,6 +1,6 @@
<template>
<div class="content">
<Abar :href='"/message/read?id=" + userData.userNo'>私聊</Abar>. <Abar :href='"/user/gift/give?no="+userData.userNo'>送礼物</Abar>. <Abar href="/user/interact/dou">逗一下</Abar><br />
<Abar :href='"/user/message/read?id=" + userData.userNo'>私聊</Abar>. <Abar :href='"/user/gift/give?no="+userData.userNo'>送礼物</Abar>. <Abar href="/user/interact/dou">逗一下</Abar><br />
<Abar href="/user/master/add">拜师</Abar>. <Abar :href='"/trade/user?no="+userData.userNo'>交易</Abar>. <Abar href="/bag/give">送道具</Abar><br>
<Abutton @click="FriendHandle">{{ isFriend ? "删除好友" : "加好友" }}</Abutton>
<span v-if="isEnemy == false">

View File

@@ -16,6 +16,7 @@ export class ChatService {
static async SendChat(type: number, sign: string) {
return await ApiService.Request("post", "/Chat/Chat/SendChat", { type, sign });
}
/**
* 删除聊天记录
* GET /Chat/Chat/DeleteChat
@@ -23,4 +24,12 @@ export class ChatService {
static async DeleteChat(chatId: string) {
return await ApiService.Request("get", "/Chat/Chat/DeleteChat", { chatId });
}
/**
* 封禁ID
* GET /Chat/Chat/BlackUser
*/
static async BlackUser(chatId: string) {
return await ApiService.Request("get", "/Chat/Chat/BlackUser", { chatId });
}
}

View File

@@ -0,0 +1,9 @@
export class EquService {
/**
* 获取装备信息
* GET /Equ/GetEquInfo
*/
static async GetEquInfo(equId: number, ueId: string) {
return await ApiService.Request("get", "/Equ/GetEquInfo", { equId, ueId });
}
}

View File

@@ -0,0 +1,10 @@
export class GoodsService {
/**
* 获取物品信息
* GET /Goods/GetGoodsInfo
* @param goodsId 物品ID
*/
static async GetGoodsInfo(goodsId: number) {
return await ApiService.Request("get", "/Goods/GetGoodsInfo", { goodsId });
}
}

View File

@@ -0,0 +1,33 @@
export class RecoverService {
/**
* 恢复体力
* GET /Recover/RecoverBlood
*/
static async RecoverBlood(npcId: number) {
return await ApiService.Request("get", "/Recover/RecoverBlood", { npcId });
}
/**
* 恢复士气
* GET /Recover/RecoverMorale
*/
static async RecoverMorale(npcId: number) {
return await ApiService.Request("get", "/Recover/RecoverMorale", { npcId });
}
/**
* 获取个人活力
* GET /Recover/GetUserVigour
*/
static async GetUserVigour() {
return await ApiService.Request("get", "/Recover/GetUserVigour");
}
/**
* 恢复活力
* GET /Recover/RecoverVigour
*/
static async RecoverVigour(npcId: number) {
return await ApiService.Request("get", "/Recover/RecoverVigour", { npcId });
}
}

View File

@@ -14,4 +14,12 @@ export class SettingService {
static async UpdateUserConfig(type: number, state: number) {
return await ApiService.Request("get", "/User/Setting/UpdateUserConfig", { type, state });
}
/**
* 刷新/重置设置
* GET /User/Setting/RefreshSetting
*/
static async RefreshSetting(type: number) {
return await ApiService.Request("get", "/User/Setting/RefreshSetting", { type });
}
}

View File

@@ -15,6 +15,14 @@ export class UserService {
return await ApiService.Request("get", "/User/User/GetUserBaseInfo", { no });
}
/**
* 获取基础属性信息
* GET /User/User/GetUserBaseAttrInfo
*/
static async GetUserBaseAttrInfo(no: string) {
return await ApiService.Request("get", "/User/User/GetUserBaseAttrInfo", { no });
}
/**
* 获取用户资料
* GET /User/User/GetHomeInfo
@@ -33,10 +41,10 @@ export class UserService {
}
/**
* 变更性别
* POST /User/User/UpdateUserSex
* @param sex body
*/
* 变更性别
* POST /User/User/UpdateUserSex
* @param sex body
*/
static async UpdateUserSex(sex: string) {
return await ApiService.Request("post", "/User/User/UpdateUserSex", { sex });
}

View File

@@ -0,0 +1,85 @@
export class EquTool {
public static GetEquPlaceName(code: string): string {
let result = "";
switch (code) {
case "Mouth":
result = "嘴饰";
break;
case "Hold":
result = "手持";
break;
case "Vice":
result = "副手";
break;
case "Head":
result = "头戴";
break;
case "Wear":
result = "身穿";
break;
case "Waist":
result = "腰戴";
break;
case "Foot":
result = "脚穿";
break;
case "Ornaments":
result = "佩戴";
break;
case "Fashion":
result = "时装";
break;
case "Wing":
result = "羽翼";
break;
case "Decorate":
result = "装饰";
break;
}
return result;
}
public static GetEquAttrName(equAttr: Array<any>, type: number): string {
if (!equAttr) {
equAttr = [];
}
let result = "";
equAttr.forEach(item => {
result += `${item.tip}${type == 1 ? "<br />" : ","}`;
});
result = StringExtend.trimEnd(result, ',');
return result;
}
public static EquStartTips(start: number): string {
if (!start) {
start = 0;
}
let result = "";
if (start == 0) {
result = "✩(0星)";
}
else {
let s = start / 2;
for (let i = 0; i < s; i++) {
result += "★";
}
if (start % 2 != 0) {
result += "✩";
}
result += `(${start}星)`;
}
return result;
}
}