This commit is contained in:
2026-05-28 13:16:24 +08:00
parent 6f07c8bc15
commit b539cdb42f
34 changed files with 1118 additions and 779 deletions
+1 -1
View File
@@ -20,7 +20,7 @@ let baseURL = '/api'
// 避免远程开发的时候冲突
if (process.env.NODE_ENV == 'development') {
baseURL = 'http://127.0.0.1:47173/api'
baseURL = '/api'
}
if (import.meta.env.MODE == 'web' || import.meta.env.MODE == 'show') {
+3 -2
View File
@@ -11,8 +11,9 @@
// rgba(0, 0, 0, 0.95) 100%
// ),
`url(${getImageURL('adventure/bg.png')})`,
backgroundSize: '100% auto',
backgroundPosition: 'center',
backgroundSize: '80% auto',
backgroundPosition: 'center center',
backgroundRepeat: 'no-repeat',
/* url(https://wfiles.gtimg.cn/wuji_open/wupload/dnf_universe_data.picture_info/30b81227_1245MGsPY_R.png); */
}"
>
+17 -12
View File
@@ -1,9 +1,11 @@
<template>
<div class="flex-1 overflow-hidden w-full flex items-center justify-center p-20 box-border">
<div class="max-h-full w-full overflow-auto flex flex-wrap gap-4 items-center">
<div
class="max-h-full w-full overflow-auto grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-6 gap-4"
>
<template v-for="item in sortedList" :key="item.roleId">
<div
class="flex flex-col items-center gap-4 rounded-lg border-2 border-transparent border-solid hover:border-blue/80 w-40 relative h-50 cursor-pointer p-2"
class="mx-auto w-full max-w-52 h-65 flex flex-col items-center justify-center gap-3 rounded-lg border-2 border-transparent border-solid hover:border-blue/80 cursor-pointer px-3 py-4 box-border"
:style="{
borderColor: acitveRoleId == item.roleId ? '#F4C08A' : '',
}"
@@ -13,11 +15,9 @@
<img
:src="item.avatarLink"
alt="avatar"
class="w-auto h-50 rounded-full object-cover border-2 border-white/50 absolute top--5"
class="h-auto w-40 rounded-full object-cover border-2 border-white/50 shrink-0"
/>
<div
class="absolute bottom-2 left-1/2 transform -translate-x-1/2 text-center flex flex-col w-50"
>
<div class="w-full text-center flex flex-col items-center leading-6">
<span class="text-sm text-#DED29A">{{ item.roleName }}</span>
<span class="text-sm text-#908150">{{ item.roleJob }}</span>
<span class="text-sm text-[#3ea74e]">名望: {{ formatFame(item.fame) }}</span>
@@ -30,16 +30,18 @@
<div class="flex-1"></div>
<calc-button class="h-10 w-30">导入角色</calc-button>
<div class="flex-1 flex justify-end px-10 gap-5">
<calc-button>选择职业</calc-button>
<calc-button>刷新</calc-button>
<calc-button>取消绑定</calc-button>
<calc-button @click="navToHome">选择职业</calc-button>
<calc-button @click="helperStore.refreshHelperInfo(helperStore.helperInfo?.id)">
刷新
</calc-button>
<calc-button @click="helperStore.logout">取消绑定</calc-button>
</div>
</div>
</template>
<script setup lang="ts" name="dnfhelper-list">
import { computed } from 'vue'
import router from '@/router'
import { useDnfHelperStore } from '@/stores/dnfhelper'
import { computed } from 'vue'
const props = defineProps<{
list: {
@@ -53,7 +55,6 @@ const props = defineProps<{
const { list } = toRefs(props)
const acitveRoleId = ref<string | null>(null)
const helperStore = useDnfHelperStore()
const sortedList = computed(() => {
@@ -64,6 +65,10 @@ const formatFame = (fame: number) => {
return new Intl.NumberFormat('zh-CN').format(fame)
}
const navToHome = () => {
router.push({ path: '/' })
}
const chooseRole = ({ roleId }: { roleId: string }) => {
console.log(roleId)
acitveRoleId.value = roleId
+10 -2
View File
@@ -1,2 +1,10 @@
<template></template>
<script lang="ts" name="dnfhelper-processing" setup></script>
<template>
<div class="w-full h-full flex flex-col items-center justify-center gap-1">
<img :src="getImageURL('loading2.webp')" alt="loading2" class="mb-1" />
<div>同步数据中</div>
<div>请稍候,正在处理从助手识别数据。请勿刷新页面。</div>
</div>
</template>
<script lang="ts" name="dnfhelper-processing" setup>
import { getImageURL } from '@/utils/images'
</script>
+11
View File
@@ -41,6 +41,8 @@ export default defineComponent(async () => {
const adventure = await api.adventures()
// https://bbs.colg.cn/zfj_auth.html?r=${Date.now().toString()}
return () => (
<Fragment>
<div
@@ -103,6 +105,15 @@ export default defineComponent(async () => {
></div>
</div>
*/}
<div
class="flex flex-col"
style={`position: absolute;top: ${30 + 82 * 0}px;left: 750px;width: 160px;height: 150px;`}
>
<div
class="w-70px h-50px bg-no-repeat"
style={`z-index:5;background-position:2% 50%;background-size:100% auto;background-image: url('${import.meta.env.BASE_URL}images/tooltips/login.gif')`}
></div>
</div>
</Fragment>
)
})
+30 -26
View File
@@ -1,44 +1,48 @@
import { defineStore } from "pinia";
import api from "@/api";
import type { IHelperInfo } from "@/api/info/type";
import { defineStore } from 'pinia'
import api from '@/api'
import type { IHelperInfo } from '@/api/info/type'
export const useDnfHelperStore = defineStore("dnfHelperStore", () => {
const helperInfo = useLocalStorage<IHelperInfo | null>("dnfHelperInfo", null, {
export const useDnfHelperStore = defineStore('dnfHelperStore', () => {
const helperInfo = useLocalStorage<IHelperInfo | null>('dnfHelperInfo', null, {
serializer: {
read: (v) => (v ? JSON.parse(v) : null),
write: (v) => JSON.stringify(v),
},
});
})
const loading = ref(false);
const errorMessage = ref("");
const loading = ref(false)
const errorMessage = ref('')
const refleshHelperInfo = async (uid?: string) => {
if (!uid) return;
loading.value = true;
errorMessage.value = "";
const refreshHelperInfoInner = async (uid?: string) => {
if (!uid) return
loading.value = true
errorMessage.value = ''
try {
const data = await api.getHelperList(uid);
const data = await api.getHelperList(uid)
if (data) {
helperInfo.value = data;
helperInfo.value = data
}
} catch (error) {
errorMessage.value = error instanceof Error ? error.message : "同步助手数据失败";
throw error;
errorMessage.value = error instanceof Error ? error.message : '同步助手数据失败'
throw error
} finally {
loading.value = false;
loading.value = false
}
};
}
const refreshHelperInfo = async (uid?: string) => {
await refleshHelperInfo(uid);
};
await refreshHelperInfoInner(uid)
}
// Keep compatibility with existing callers.
const refleshHelperInfo = async (uid?: string) => {
await refreshHelperInfoInner(uid)
}
const logout = () => {
helperInfo.value = null;
errorMessage.value = "";
};
helperInfo.value = null
errorMessage.value = ''
}
return {
helperInfo,
@@ -47,5 +51,5 @@ export const useDnfHelperStore = defineStore("dnfHelperStore", () => {
refleshHelperInfo,
refreshHelperInfo,
logout,
};
});
}
})
+1 -1
View File
@@ -2,7 +2,7 @@ let baseURL = 'https://image.dnftools.com'
// 避免远程开发的时候冲突
if (process.env.NODE_ENV == 'development') {
baseURL = 'http://127.0.0.1:3000'
baseURL = '/image'
}
if (import.meta.env.MODE == 'web' || import.meta.env.MODE == 'show') {
+18 -3
View File
@@ -8,7 +8,7 @@ import Components from 'unplugin-vue-components/vite'
import AutoImport from 'unplugin-auto-import/vite'
// import RekaResolver from 'reka-ui/resolver'
import UnoCSS from 'unocss/vite'
import uncomponents from "unplugin-vue-components/vite"
import uncomponents from 'unplugin-vue-components/vite'
// https://vite.dev/config/
export default defineConfig({
@@ -19,9 +19,9 @@ export default defineConfig({
UnoCSS(),
uncomponents({
dts: true,
dirs: ["src/components/"],
dirs: ['src/components/'],
allowOverrides: true,
directoryAsNamespace: true
directoryAsNamespace: true,
}),
// Components({
// dts: 'src/types/components.d.ts',
@@ -44,6 +44,21 @@ export default defineConfig({
},
}),
],
server: {
host: '0.0.0.0',
proxy: {
'/api': {
target: 'http://127.0.0.1:47173/api',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
},
'/image': {
target: 'http://127.0.0.1:3000',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/image/, ''),
},
},
},
resolve: {
alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)),