import { type UploadUserFile } from 'element-plus' import { defineStore } from 'pinia' import { ref } from 'vue' import type { IClotheInfo, IModelInfo, INavStatus, IClothType, IRoomInfo } from '@/interface' import jfLogoImg from '@/assets/imgs/jf_logo.png' import juyunImg from '@/assets/imgs/juyun.png' import logoImg from '@/assets/imgs/logo.png' import { MenuEnum } from '@/enum/MenuEnum' export const useGlobalStore = defineStore('global', () => { const gender = ref<'male' | 'female'>('female') const noticeVideo = ref( 'https://digit-person.oss-cn-beijing.aliyuncs.com/digital_cloth/1720444463478.mp4' ) const creatingImgMark = ref('1720084773937.png') const createFailMark = ref('1720084729963.png') const creatingAndFailMarkList = ref([creatingImgMark.value, createFailMark.value]) const menu = reactive({ mainNav: MenuEnum.MY_WARDROBE, subNav: MenuEnum.ALL }) type INav = { isPerson: 'yes' | 'no' clothType?: IClothType } const nav = computed(() => { const isPersonMaps = { [MenuEnum.CLOTHES_LIBRARY]: 'no', [MenuEnum.MY_WARDROBE]: 'yes' } const clothTypeMaps = { [MenuEnum.ALL]: null, [MenuEnum.UPPER_OUTER_GARMENT]: 'topCloth', [MenuEnum.BOTTOMS]: 'bottomCloth', [MenuEnum.DRESS]: 'dress', [MenuEnum.SUIT]: 'suit', [MenuEnum.HAIRSTYLE]: 'hair', [MenuEnum.FIGURE]: 'figure', [MenuEnum.UNDERWEAR]: 'underwear' } const isPerson = <'yes' | 'no'>isPersonMaps[menu.mainNav] const clothType = clothTypeMaps[menu.subNav] return Object.assign({ isPerson }, clothType && { clothType }) }) const updateMenu = (val: INavStatus) => { menu.mainNav = val.mainNav menu.subNav = val.subNav } const updateGender = (genderVal: 'male' | 'female') => { if (genderVal !== gender.value) { gender.value = genderVal clearAllSelected() } } const selectedTopCloth = ref() const selectedBottomCloth = ref() const selectedDressCloth = ref() const selectMutipleModelIds = ref([]) const selectMutipleClothesIds = ref<(IModelInfo['id'] | IModelInfo['id'][])[]>() const selectedModel = ref() const selectedRoomInfo = ref() const selectedHairCloth = ref() const selectedFigureCloth = ref() const selectedUnderwearCloth = ref() const updateRoomInfo = (roomInfo: IRoomInfo) => { updateMenu({ mainNav: MenuEnum.CLOTHES_LIBRARY, subNav: MenuEnum.ALL }) nextTick(() => { console.log('更新一下') selectedRoomInfo.value = roomInfo }) } const clearSelectedTopCloth = () => (selectedTopCloth.value = undefined) const clearSelectedBottomCloth = () => (selectedBottomCloth.value = undefined) const clearSecectedDressCloth = () => (selectedDressCloth.value = undefined) const clearSecectedMutipleModelIds = () => { selectMutipleModelIds.value = [] } const clearSecectedMutipleClothesIds = () => { selectMutipleClothesIds.value = [] } const clearSelectedModel = () => (selectedModel.value = undefined) const clearSelectedRoomInfo = () => { selectedRoomInfo.value = undefined } const clearSelectedHairCloth = () => { selectedHairCloth.value = undefined } const clearSelectedFigureCloth = () => { selectedFigureCloth.value = undefined } const ClearselectedUnderwearCloth = () => { selectedUnderwearCloth.value = undefined } const updateModel = (data: IModelInfo) => { selectedModel.value = data } const clearSelectedCloths = () => { clearSelectedTopCloth() clearSelectedBottomCloth() clearSecectedDressCloth() clearSelectedHairCloth() clearSelectedFigureCloth() ClearselectedUnderwearCloth() } const clearAllSelected = () => { clearSelectedCloths() clearSelectedModel() clearSecectedMutipleModelIds() } const fileList = ref([]) const updateFileList = (data: UploadUserFile[]) => { fileList.value = data } const updateSelectedCloth = (data: IClotheInfo) => { if (data.clothType === 'topCloth') { clearSecectedDressCloth() clearSelectedHairCloth() clearSelectedFigureCloth() ClearselectedUnderwearCloth() selectedTopCloth.value = data } if (data.clothType === 'bottomCloth') { clearSecectedDressCloth() clearSelectedHairCloth() clearSelectedFigureCloth() ClearselectedUnderwearCloth() selectedBottomCloth.value = data } if (data.clothType === 'dress') { clearSelectedCloths() selectedDressCloth.value = data } if (data.clothType === 'suit') { clearSelectedCloths() data?.suitList?.forEach((i) => updateSelectedCloth(i)) } if (data.clothType === 'hair') { clearSelectedCloths() selectedHairCloth.value = data } if (data.clothType === 'figure') { clearSelectedCloths() selectedFigureCloth.value = data } if (data.clothType === 'underwear') { clearSelectedCloths() selectedUnderwearCloth.value = data } } const updateSelectMutipleModelIds = (modelId: IModelInfo['id']) => { const oldValue = selectMutipleModelIds.value selectMutipleModelIds.value = oldValue.includes(modelId) ? oldValue.filter((i) => i != modelId) : [...oldValue, modelId] } const updateSelectMutileClothesIds = (clothId: IClotheInfo['clothId'], item: IClotheInfo) => { const oldValue = selectMutipleClothesIds.value if (item.clothType === 'suit') { const idArr = JSON.parse(item.fileUrl) as IClotheInfo[] console.log('AT-[ value &&&&&********** ]', idArr) } let value: string | string[] if (item.clothType === 'suit') { const idArr = JSON.parse(item.fileUrl) as IClotheInfo[] value = idArr.map((i) => i.clothId) } else { value = clothId } console.log('AT-[ value &&&&&********** ]', value) if (item.clothType != 'suit') { selectMutipleClothesIds.value = oldValue?.includes(clothId) ? oldValue.filter((i) => i != clothId) : [...(oldValue || []), clothId] } else { const index = oldValue?.findIndex((i) => i.toString() == value.toString()) if (index != -1) { selectMutipleClothesIds.value = oldValue?.filter((i, idx) => index != idx) } else { selectMutipleClothesIds.value = [...(oldValue || []), value] } } } type IBrandInfo = { logo: string title: string mainWebsite: string style?: Record } const brandInfoMaps = ref( new Map<'jfputon' | 'fashionroom' | 'puton' | string, IBrandInfo>([ [ 'jfputon', { logo: jfLogoImg, title: '精分数据', mainWebsite: 'https://jf.aidigitalfield.com', style: { height: '90%' } } ], [ 'fashionroom', { logo: juyunImg, title: '聚云美搭官网', mainWebsite: 'https://www.marshotspot.com', style: { height: '90%' } } ], [ 'puton', { logo: logoImg, title: 'PutOn美搭助手_AI穿搭平台_数字力场', mainWebsite: 'https://www.aidigitalfield.com', style: { width: ' 94px' } } ] ]) ) return { menu, updateMenu, gender, updateGender, selectedTopCloth, selectedBottomCloth, selectedDressCloth, updateSelectedCloth, selectedModel, updateModel, clearSelectedTopCloth, clearSelectedBottomCloth, clearSecectedDressCloth, clearSelectedCloths, selectMutipleModelIds, updateSelectMutipleModelIds, clearSecectedMutipleModelIds, clearAllSelected, nav, fileList, updateFileList, noticeVideo, creatingImgMark, createFailMark, creatingAndFailMarkList, selectMutipleClothesIds, clearSecectedMutipleClothesIds, updateSelectMutileClothesIds, selectedRoomInfo, clearSelectedRoomInfo, updateRoomInfo, selectedHairCloth, clearSelectedHairCloth, selectedFigureCloth, clearSelectedFigureCloth, brandInfoMaps, selectedUnderwearCloth, ClearselectedUnderwearCloth } })