dev
This commit is contained in:
@@ -1,15 +1,63 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="h-160px bg-red" :style="{background: `url(${getImageURL('/common/equ-back.png')}) no-repeat center`}"></div>
|
<div class="h-180px pos-relative">
|
||||||
|
<template v-for="part in infoStore.parts" :key="part">
|
||||||
|
<div
|
||||||
|
class="pos-absolute text-white w-26px h-26px border-1px border-solid border-#7a7a7a/50 flex items-center justify-center"
|
||||||
|
:style="infoStyle(part)"
|
||||||
|
@click="choosePart(part)"
|
||||||
|
>
|
||||||
|
{{ partName(part) }}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
<script lang="ts" setup name="EquList">
|
<script lang="ts" setup name="EquList">
|
||||||
|
|
||||||
import { getImageURL } from '@/utils/images'
|
import { getImageURL } from '@/utils/images'
|
||||||
|
import { useVModel } from '@vueuse/core'
|
||||||
|
import { useInfoStore, useConfigStore } from '@/stores'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
part: {
|
||||||
|
type: String,
|
||||||
|
default: '',
|
||||||
|
}
|
||||||
|
})
|
||||||
|
const partModelValue = useVModel(props, 'part')
|
||||||
|
const infoStore = useInfoStore()
|
||||||
|
|
||||||
|
const infoStyle = (part: string) => {
|
||||||
|
let x = 28
|
||||||
|
let y = 5
|
||||||
|
let index = infoStore.parts.findIndex((p) => p == part)
|
||||||
|
if (index == 13) {
|
||||||
|
index -= 7
|
||||||
|
} else if (index >= 5 && index <= 12) {
|
||||||
|
x += 179
|
||||||
|
index -= 5
|
||||||
|
}
|
||||||
|
|
||||||
|
x += (index % 2) * 39
|
||||||
|
y += Math.floor(index / 2) * 34
|
||||||
|
|
||||||
|
const style = {
|
||||||
|
left: `${x}px`,
|
||||||
|
top: `${y}px`,
|
||||||
|
zIndex: 6,
|
||||||
|
fontWeight: 900,
|
||||||
|
}
|
||||||
|
return style
|
||||||
|
}
|
||||||
|
|
||||||
|
const choosePart = (part: string) => {
|
||||||
|
partModelValue.value = part
|
||||||
|
}
|
||||||
|
|
||||||
|
const partName = (part: string) => {
|
||||||
|
if (part == '辅助装备') return '左槽'
|
||||||
|
if (part == '魔法石') return '右槽'
|
||||||
|
return part
|
||||||
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<style lang="scss" scoped></style>
|
||||||
<style lang="scss" scoped>
|
|
||||||
|
|
||||||
|
|
||||||
</style>
|
|
||||||
|
|||||||
@@ -5,27 +5,22 @@ import { useInfoStore, useConfigStore } from '@/stores'
|
|||||||
import EquList from '@/components/dnf/Equipment/List/index.vue'
|
import EquList from '@/components/dnf/Equipment/List/index.vue'
|
||||||
export default defineComponent({
|
export default defineComponent({
|
||||||
name: 'Equip',
|
name: 'Equip',
|
||||||
props: {
|
|
||||||
part: {
|
|
||||||
type: String,
|
|
||||||
default: '头肩',
|
|
||||||
},
|
|
||||||
},
|
|
||||||
setup(props) {
|
setup(props) {
|
||||||
const configStore = useConfigStore()
|
const configStore = useConfigStore()
|
||||||
|
const part = ref('头肩')
|
||||||
const can_upgrade = computed(() => {
|
const can_upgrade = computed(() => {
|
||||||
return !['称号', '宠物'].includes(props.part as string)
|
return !['称号', '宠物'].includes(part.value as string)
|
||||||
})
|
})
|
||||||
|
|
||||||
// const globalStore = useGlobalStore()
|
// const globalStore = useGlobalStore()
|
||||||
|
|
||||||
/** 是否有徽章 */
|
/** 是否有徽章 */
|
||||||
const has_socket = computed(
|
const has_socket = computed(
|
||||||
() => !['称号', '宠物', '耳环', '武器'].includes(props.part as string),
|
() => !['称号', '宠物', '耳环', '武器'].includes(part.value as string),
|
||||||
)
|
)
|
||||||
/** 是否有右侧徽章 */
|
/** 是否有右侧徽章 */
|
||||||
const has_emblem_1 = computed(
|
const has_emblem_1 = computed(
|
||||||
() => has_socket.value && !['辅助装备', '魔法石'].includes(props.part as string),
|
() => has_socket.value && !['辅助装备', '魔法石'].includes(part.value as string),
|
||||||
)
|
)
|
||||||
const basicInfoStore = useInfoStore()
|
const basicInfoStore = useInfoStore()
|
||||||
|
|
||||||
@@ -33,7 +28,7 @@ export default defineComponent({
|
|||||||
return basicInfoStore.enchants
|
return basicInfoStore.enchants
|
||||||
?.filter(
|
?.filter(
|
||||||
(item) =>
|
(item) =>
|
||||||
item.position.includes(props.part) &&
|
item.position.includes(part.value) &&
|
||||||
!item.position.includes('武器装扮') &&
|
!item.position.includes('武器装扮') &&
|
||||||
!item.position.includes('宠物装备'),
|
!item.position.includes('宠物装备'),
|
||||||
)
|
)
|
||||||
@@ -41,7 +36,7 @@ export default defineComponent({
|
|||||||
})
|
})
|
||||||
|
|
||||||
const emblem_list = computed<IEnchantingInfo[] | undefined>(() => {
|
const emblem_list = computed<IEnchantingInfo[] | undefined>(() => {
|
||||||
return basicInfoStore.emblems.filter((item) => item.position.includes(props.part))
|
return basicInfoStore.emblems.filter((item) => item.position.includes(part.value))
|
||||||
})
|
})
|
||||||
|
|
||||||
const global_change = ref(false)
|
const global_change = ref(false)
|
||||||
@@ -50,7 +45,7 @@ export default defineComponent({
|
|||||||
return computed<string | number>({
|
return computed<string | number>({
|
||||||
get() {
|
get() {
|
||||||
return (
|
return (
|
||||||
(configStore.config.equips?.[props.part] as Record<string, any>)?.[name] ??
|
(configStore.config.equips?.[part.value] as Record<string, any>)?.[name] ??
|
||||||
defaultValue ??
|
defaultValue ??
|
||||||
0
|
0
|
||||||
)
|
)
|
||||||
@@ -60,7 +55,7 @@ export default defineComponent({
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (name == 'emblem_1' && !has_emblem_1.value) {
|
if (name == 'emblem_1' && !has_emblem_1.value) {
|
||||||
// configStore.setForge(props.part, name, 0)
|
// configStore.setForge(part.value, name, 0)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -89,7 +84,7 @@ export default defineComponent({
|
|||||||
parts = basicInfoStore.parts.filter((e) => !['称号', '宠物'].includes(e))
|
parts = basicInfoStore.parts.filter((e) => !['称号', '宠物'].includes(e))
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
parts = [props.part]
|
parts = [part.value]
|
||||||
}
|
}
|
||||||
for (const part of parts) {
|
for (const part of parts) {
|
||||||
if (configStore.config.equips[part]) {
|
if (configStore.config.equips[part]) {
|
||||||
@@ -134,11 +129,11 @@ export default defineComponent({
|
|||||||
return () => {
|
return () => {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<EquList/>
|
<EquList v-model:part={part.value}/>
|
||||||
<div class="flex flex-wrap equ-profile">
|
<div class="flex flex-wrap equ-profile">
|
||||||
<div class="equ-profile-item">
|
<div class="equ-profile-item">
|
||||||
<div class="mr-10px row-name">当前部位</div>
|
<div class="mr-10px row-name">当前部位</div>
|
||||||
<span> {props.part}</span>
|
<span> {part.value}</span>
|
||||||
{can_upgrade.value ? (
|
{can_upgrade.value ? (
|
||||||
<calc-checkbox
|
<calc-checkbox
|
||||||
style="margin-left:auto"
|
style="margin-left:auto"
|
||||||
@@ -161,7 +156,7 @@ export default defineComponent({
|
|||||||
<calc-option value={i - 1}>{i - 1}</calc-option>
|
<calc-option value={i - 1}>{i - 1}</calc-option>
|
||||||
))}
|
))}
|
||||||
</calc-select>
|
</calc-select>
|
||||||
{props.part == '武器' && (
|
{part.value == '武器' && (
|
||||||
<calc-select v-model={dz_number.value} class="flex-1 !h-20px">
|
<calc-select v-model={dz_number.value} class="flex-1 !h-20px">
|
||||||
{renderList(9, (i) => (
|
{renderList(9, (i) => (
|
||||||
<calc-option value={i - 1}>锻造+ {i - 1}</calc-option>
|
<calc-option value={i - 1}>锻造+ {i - 1}</calc-option>
|
||||||
|
|||||||
+28
-14
@@ -1,27 +1,41 @@
|
|||||||
import api from "@/api"
|
import api from '@/api'
|
||||||
import type { ICharacterInfo } from "@/api/info/type"
|
import type { ICharacterInfo } from '@/api/info/type'
|
||||||
import { defineStore } from "pinia"
|
import { defineStore } from 'pinia'
|
||||||
|
|
||||||
export const useInfoStore = defineStore("infoStore", ()=>{
|
export const useInfoStore = defineStore('infoStore', () => {
|
||||||
|
const alter_token = ref<string>('')
|
||||||
const alter_token = ref<string>("")
|
|
||||||
const infos = ref<ICharacterInfo | null>(null)
|
const infos = ref<ICharacterInfo | null>(null)
|
||||||
|
|
||||||
const skills = computed(()=>infos.value?.skills ?? [])
|
const skills = computed(() => infos.value?.skills ?? [])
|
||||||
|
|
||||||
const equips = computed(()=>infos.value?.equips ?? [])
|
const equips = computed(() => infos.value?.equips ?? [])
|
||||||
|
|
||||||
const suits = computed(()=>infos.value?.suits ?? [])
|
const suits = computed(() => infos.value?.suits ?? [])
|
||||||
|
|
||||||
const enchants = computed(()=>infos.value?.enchants ?? [])
|
const enchants = computed(() => infos.value?.enchants ?? [])
|
||||||
|
|
||||||
const emblems = computed(()=>infos.value?.emblems?? [])
|
const emblems = computed(() => infos.value?.emblems ?? [])
|
||||||
|
|
||||||
const parts = ['上衣', '头肩', '下装', '腰带', '鞋', '手镯', '项链', '戒指', '耳环', '辅助装备', '魔法石', '武器']
|
const parts = [
|
||||||
|
'头肩',
|
||||||
|
'上衣',
|
||||||
|
'下装',
|
||||||
|
'腰带',
|
||||||
|
'鞋',
|
||||||
|
'武器',
|
||||||
|
'称号',
|
||||||
|
'手镯',
|
||||||
|
'项链',
|
||||||
|
'辅助装备',
|
||||||
|
'戒指',
|
||||||
|
'耳环',
|
||||||
|
'魔法石',
|
||||||
|
'宠物',
|
||||||
|
]
|
||||||
|
|
||||||
const createCharacter = async (alter: string, equVersion?: string) => {
|
const createCharacter = async (alter: string, equVersion?: string) => {
|
||||||
const time = new Date().getTime()
|
const time = new Date().getTime()
|
||||||
alter_token.value = btoa(JSON.stringify({alter, equVersion, time}))
|
alter_token.value = btoa(JSON.stringify({ alter, equVersion, time }))
|
||||||
infos.value = await api.characterInfo()
|
infos.value = await api.characterInfo()
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -34,6 +48,6 @@ export const useInfoStore = defineStore("infoStore", ()=>{
|
|||||||
createCharacter,
|
createCharacter,
|
||||||
enchants,
|
enchants,
|
||||||
emblems,
|
emblems,
|
||||||
parts
|
parts,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
Reference in New Issue
Block a user