Merge branch 'main' of ssh://18.167.251.121:10002/aidlab/lanecarford_front
All checks were successful
git提交控制 AiDA WEB-Node.js main 分支构建部署 / build (20.19.0) (push) Has been skipped
All checks were successful
git提交控制 AiDA WEB-Node.js main 分支构建部署 / build (20.19.0) (push) Has been skipped
This commit is contained in:
9
src/assets/icons/share.svg
Normal file
9
src/assets/icons/share.svg
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<svg width="26" height="26" viewBox="0 0 26 26" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||||
|
<rect width="25.338" height="25.338" fill="url(#pattern0_27_28523)"/>
|
||||||
|
<defs>
|
||||||
|
<pattern id="pattern0_27_28523" patternContentUnits="objectBoundingBox" width="1" height="1">
|
||||||
|
<use xlink:href="#image0_27_28523" transform="scale(0.0078125)"/>
|
||||||
|
</pattern>
|
||||||
|
<image id="image0_27_28523" width="128" height="128" preserveAspectRatio="none" xlink:href="data:image/png;base64,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"/>
|
||||||
|
</defs>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.3 KiB |
78
src/components/WaveLoading.vue
Normal file
78
src/components/WaveLoading.vue
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
<template>
|
||||||
|
<div class="loading-container" :style="containerStyle">
|
||||||
|
<div class="dot"></div>
|
||||||
|
<div class="dot"></div>
|
||||||
|
<div class="dot"></div>
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script setup>
|
||||||
|
import { computed } from 'vue'
|
||||||
|
import { defineProps } from 'vue'
|
||||||
|
|
||||||
|
const props = defineProps({
|
||||||
|
color: {
|
||||||
|
type: String,
|
||||||
|
default: '#000' // 默认颜色
|
||||||
|
},
|
||||||
|
size: {
|
||||||
|
type: Number,
|
||||||
|
default: 10 // 默认圆点大小(px)
|
||||||
|
},
|
||||||
|
spacing: {
|
||||||
|
type: Number,
|
||||||
|
default: 3 // 默认间距(px),调整为合适小尺寸
|
||||||
|
},
|
||||||
|
amplitude: {
|
||||||
|
type: Number,
|
||||||
|
default: 8 // 默认浮动幅度(px),调整为合适比例
|
||||||
|
},
|
||||||
|
duration: {
|
||||||
|
type: Number,
|
||||||
|
default: 1.2 // 默认动画持续时间(s)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
const containerStyle = computed(() => ({
|
||||||
|
'--color': props.color,
|
||||||
|
'--size': `${props.size}px`,
|
||||||
|
'--spacing': `${props.spacing}px`,
|
||||||
|
'--amplitude': `${props.amplitude}px`,
|
||||||
|
'--duration': `${props.duration}s`
|
||||||
|
}))
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.loading-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
/* 可以根据需要调整容器高度或移除 */
|
||||||
|
}
|
||||||
|
|
||||||
|
.dot {
|
||||||
|
width: var(--size);
|
||||||
|
height: var(--size);
|
||||||
|
background-color: var(--color);
|
||||||
|
border-radius: 50%;
|
||||||
|
margin: 0 var(--spacing);
|
||||||
|
animation: wave var(--duration) infinite ease-in-out;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dot:nth-child(2) {
|
||||||
|
animation-delay: 0.2s;
|
||||||
|
}
|
||||||
|
|
||||||
|
.dot:nth-child(3) {
|
||||||
|
animation-delay: 0.4s;
|
||||||
|
}
|
||||||
|
|
||||||
|
@keyframes wave {
|
||||||
|
0%, 100% {
|
||||||
|
transform: translateY(0);
|
||||||
|
}
|
||||||
|
50% {
|
||||||
|
transform: translateY(calc(-1 * var(--amplitude)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -7,7 +7,9 @@
|
|||||||
import {
|
import {
|
||||||
getGenerateHistoricals,
|
getGenerateHistoricals,
|
||||||
setTryOnEffectFavorite,
|
setTryOnEffectFavorite,
|
||||||
cancelTryOnEffectFavorite
|
cancelTryOnEffectFavorite,
|
||||||
|
cancelStyleFavorite,
|
||||||
|
setStyleFavorite
|
||||||
} from '@/api/workshop'
|
} from '@/api/workshop'
|
||||||
import { useRouter } from 'vue-router'
|
import { useRouter } from 'vue-router'
|
||||||
import MyEvent from '@/utils/myEvent'
|
import MyEvent from '@/utils/myEvent'
|
||||||
@@ -106,17 +108,22 @@
|
|||||||
}
|
}
|
||||||
// 详情页
|
// 详情页
|
||||||
const onDetailsItem = (v) => {
|
const onDetailsItem = (v) => {
|
||||||
if (v.isRegenerated) return
|
if (v.isRegenerated || !v.styleUrl) return
|
||||||
router.push({ query: { ...query.value, styleUrl: v.styleUrl } })
|
router.push({ query: { ...query.value, styleUrl: v.styleUrl } })
|
||||||
}
|
}
|
||||||
// 喜欢
|
// 喜欢
|
||||||
const isLoveLoading = ref(false)
|
const isLoveLoading = ref(false)
|
||||||
const onLoveItem = (v) => {
|
const onLoveItem = (v) => {
|
||||||
if (isLoveLoading.value) return
|
if (isLoveLoading.value) return
|
||||||
const http = v.isFavorite ? cancelTryOnEffectFavorite : setTryOnEffectFavorite
|
var http
|
||||||
|
if (navActive.value === 'Outfit') {
|
||||||
|
http = v.isFavorite ? cancelStyleFavorite : setStyleFavorite
|
||||||
|
} else {
|
||||||
|
http = v.isFavorite ? cancelTryOnEffectFavorite : setTryOnEffectFavorite
|
||||||
|
}
|
||||||
isLoveLoading.value = true
|
isLoveLoading.value = true
|
||||||
v.isFavorite = !v.isFavorite
|
v.isFavorite = !v.isFavorite
|
||||||
http(v.tryOnId)
|
http(v.id)
|
||||||
.then(() => {
|
.then(() => {
|
||||||
isLoveLoading.value = false
|
isLoveLoading.value = false
|
||||||
})
|
})
|
||||||
@@ -154,7 +161,10 @@
|
|||||||
|
|
||||||
alert(`现在${isShare.value ? '可以' : '不可以'}分享`)
|
alert(`现在${isShare.value ? '可以' : '不可以'}分享`)
|
||||||
}
|
}
|
||||||
|
const onShareItem = (v) => {
|
||||||
|
const url = v.tryOnUrl || v.url
|
||||||
|
if (url) shareImageToWhatsapp(url)
|
||||||
|
}
|
||||||
const onDownloadItem = async (v) => {
|
const onDownloadItem = async (v) => {
|
||||||
if (isShare.value) {
|
if (isShare.value) {
|
||||||
await shareImageToWhatsapp(v.tryOnUrl)
|
await shareImageToWhatsapp(v.tryOnUrl)
|
||||||
@@ -287,9 +297,12 @@
|
|||||||
<div @click.stop="onLoveItem(v)">
|
<div @click.stop="onLoveItem(v)">
|
||||||
<SvgIcon :name="`love_${v.isFavorite ? '1' : '0'}`" size="27" />
|
<SvgIcon :name="`love_${v.isFavorite ? '1' : '0'}`" size="27" />
|
||||||
</div>
|
</div>
|
||||||
<div @click.stop="onDownloadItem(v)">
|
<!-- <div @click.stop="onDownloadItem(v)">
|
||||||
<SvgIcon name="download" size="27" v-show="!v.loading" />
|
<SvgIcon name="download" size="27" v-show="!v.loading" />
|
||||||
<van-loading color="#000" size="3rem" v-show="v.loading" />
|
<van-loading color="#000" size="3rem" v-show="v.loading" />
|
||||||
|
</div> -->
|
||||||
|
<div @click.stop="onShareItem(v)">
|
||||||
|
<SvgIcon name="share" size="27" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="icon-selected" v-show="(isChooseSave || isChooseOne) && v.selected">
|
<div class="icon-selected" v-show="(isChooseSave || isChooseOne) && v.selected">
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ const onContinue = ()=>{
|
|||||||
if(!isHistoryFlow.value){
|
if(!isHistoryFlow.value){
|
||||||
router.push({ path: 'uploadFace', query: {...query.value} })
|
router.push({ path: 'uploadFace', query: {...query.value} })
|
||||||
}else{
|
}else{
|
||||||
router.push({ path: 'creation', query: {...query.value} })
|
router.push({ path: 'creation', query: {...query.value, active: FlowType.H_TRYON } })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
import { ref, reactive, onMounted, inject } from 'vue'
|
import { ref, reactive, onMounted, inject } from 'vue'
|
||||||
import router from '@/router'
|
import router from '@/router'
|
||||||
import { showConfirmDialog, showToast } from 'vant'
|
import { showConfirmDialog, showToast } from 'vant'
|
||||||
import { useUserInfoStore, useOverallStore } from '@/stores'
|
import { useUserInfoStore, useOverallStore,useGenerateStore } from '@/stores'
|
||||||
import { LogOut } from '@/api/login'
|
import { LogOut } from '@/api/login'
|
||||||
import { getCustomerList, type CustomerListParams, customerCheckin } from '@/api/workshop'
|
import { getCustomerList, type CustomerListParams, customerCheckin } from '@/api/workshop'
|
||||||
import MyEvent from '@/utils/myEvent'
|
import MyEvent from '@/utils/myEvent'
|
||||||
@@ -15,6 +15,8 @@
|
|||||||
|
|
||||||
const userInfoStore = useUserInfoStore()
|
const userInfoStore = useUserInfoStore()
|
||||||
const overallStore = useOverallStore()
|
const overallStore = useOverallStore()
|
||||||
|
const generateStore = useGenerateStore()
|
||||||
|
|
||||||
const emit = defineEmits(['selected-customer'])
|
const emit = defineEmits(['selected-customer'])
|
||||||
const show = ref(false)
|
const show = ref(false)
|
||||||
const isEdit = ref(false)
|
const isEdit = ref(false)
|
||||||
@@ -187,7 +189,8 @@
|
|||||||
customerCheckin({ nickname: selectedCustomer.name }).then((res) => {
|
customerCheckin({ nickname: selectedCustomer.name }).then((res) => {
|
||||||
useUserInfoStore().resetGenerateParams()
|
useUserInfoStore().resetGenerateParams()
|
||||||
MyEvent.emit('clear-generate-state')
|
MyEvent.emit('clear-generate-state')
|
||||||
useUserInfoStore().setCustomerInfo(res)
|
useGenerateStore().setCustomerInfo(res)
|
||||||
|
router.push({ path: '/workshop/home' })
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
showSwitchCustomerPopup.value = false
|
showSwitchCustomerPopup.value = false
|
||||||
|
|||||||
@@ -9,7 +9,8 @@
|
|||||||
<div class="message-content">
|
<div class="message-content">
|
||||||
<div class="message-text" :class="{ streaming: isStreaming }">
|
<div class="message-text" :class="{ streaming: isStreaming }">
|
||||||
<div v-html="content"></div>
|
<div v-html="content"></div>
|
||||||
<span v-if="isStreaming" class="streaming-cursor">|</span>
|
<!-- <span v-if="isStreaming" class="streaming-cursor">|</span> -->
|
||||||
|
<WaveLoading v-if="isStreaming" />
|
||||||
</div>
|
</div>
|
||||||
<!-- <div v-if="!isMyself" class="message-actions flex">
|
<!-- <div v-if="!isMyself" class="message-actions flex">
|
||||||
<SvgIcon
|
<SvgIcon
|
||||||
@@ -27,6 +28,7 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed } from 'vue'
|
import { computed } from 'vue'
|
||||||
import MarkdownIt from 'markdown-it'
|
import MarkdownIt from 'markdown-it'
|
||||||
|
import WaveLoading from '@/components/WaveLoading.vue'
|
||||||
import { useUserInfoStore } from '@/stores'
|
import { useUserInfoStore } from '@/stores'
|
||||||
|
|
||||||
const md = new MarkdownIt()
|
const md = new MarkdownIt()
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<template>
|
<template>
|
||||||
<div class="asistant-container flex flex-column">
|
<div class="asistant-container flex flex-column">
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<HeaderTitle hasSetting styleType="3" />
|
<HeaderTitle hasSetting styleType="3" @clickProfile="handleClickProfile" />
|
||||||
</div>
|
</div>
|
||||||
<div class="content flex-1">
|
<div class="content flex-1">
|
||||||
<NoticeList
|
<NoticeList
|
||||||
@@ -17,12 +17,14 @@
|
|||||||
<div class="btn flex flex-center" @click="handleContinue">Generate</div>
|
<div class="btn flex flex-center" @click="handleContinue">Generate</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<Profile ref="profileRef" />
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import HeaderTitle from '@/components/HeaderTitle.vue'
|
import HeaderTitle from '@/components/HeaderTitle.vue'
|
||||||
import NoticeList from './components/NoticeList.vue'
|
import NoticeList from './components/NoticeList.vue'
|
||||||
import InputArea from './components/InputArea.vue'
|
import InputArea from './components/InputArea.vue'
|
||||||
|
import Profile from '../Workshop/profile.vue'
|
||||||
import { ref, onMounted, onUnmounted, onActivated } from 'vue'
|
import { ref, onMounted, onUnmounted, onActivated } from 'vue'
|
||||||
import { useRouter, useRoute } from 'vue-router'
|
import { useRouter, useRoute } from 'vue-router'
|
||||||
import { useUserInfoStore, useGenerateStore } from '@/stores'
|
import { useUserInfoStore, useGenerateStore } from '@/stores'
|
||||||
@@ -54,6 +56,11 @@ interface ChatMessage {
|
|||||||
self?: boolean
|
self?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const profileRef = ref<InstanceType<typeof Profile> | null>(null)
|
||||||
|
const handleClickProfile = () => {
|
||||||
|
profileRef.value.open()
|
||||||
|
}
|
||||||
|
|
||||||
const noticeListRef = ref<NoticeListRef | null>(null)
|
const noticeListRef = ref<NoticeListRef | null>(null)
|
||||||
const messageList = ref<ChatMessage[]>([])
|
const messageList = ref<ChatMessage[]>([])
|
||||||
|
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ const router = useRouter()
|
|||||||
const generateStore = useGenerateStore()
|
const generateStore = useGenerateStore()
|
||||||
const loading = ref(false)
|
const loading = ref(false)
|
||||||
|
|
||||||
type PageMode = 'form' | 'entry' | 'create'
|
type PageMode = 'entry' | 'form' | 'create'
|
||||||
const pageMode = ref<PageMode>('entry')
|
const pageMode = ref<PageMode>('entry')
|
||||||
const formTitle = computed(() => {
|
const formTitle = computed(() => {
|
||||||
return pageMode.value === 'entry' || pageMode.value === 'form' ? 'Customer ID' : 'Create Profile'
|
return pageMode.value === 'entry' || pageMode.value === 'form' ? 'Customer ID' : 'Create Profile'
|
||||||
@@ -147,7 +147,7 @@ const handleShowPopup = (flag: Boolean) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleSelectCustomer = (value) => {
|
const handleSelectCustomer = (value) => {
|
||||||
if (value) {
|
if (value && pageMode.value === 'form') {
|
||||||
customerData.value.nickname = value.name
|
customerData.value.nickname = value.name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -189,7 +189,7 @@ const handleBack = (e?: Event) => {
|
|||||||
|
|
||||||
.setting {
|
.setting {
|
||||||
z-index: 1;
|
z-index: 1;
|
||||||
padding: 3.17rem 4.9rem 0 8.4rem;
|
padding: 3.67rem 4.9rem 0 8.4rem;
|
||||||
font-size: 7rem;
|
font-size: 7rem;
|
||||||
.c-svg {
|
.c-svg {
|
||||||
width: initial;
|
width: initial;
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
<!-- 标题 -->
|
<!-- 标题 -->
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<div class="title">Choose Stylist.</div>
|
<div class="title">Choose Stylist.</div>
|
||||||
<div class="sub-title">What style are you looking for? </div>
|
<div class="sub-title">What style are you looking for?</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="carousel-container" v-show="!showVideo">
|
<div class="carousel-container" v-show="!showVideo">
|
||||||
@@ -35,7 +35,13 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Continue按钮 -->
|
<!-- Continue按钮 -->
|
||||||
<div class="continue-button" @click="handleContinue" v-if="!$route.query?.demo">Continue</div>
|
<button
|
||||||
|
class="sandblasted-blurred continue-button flex flex-center"
|
||||||
|
@click="handleContinue"
|
||||||
|
v-if="!$route.query?.demo"
|
||||||
|
>
|
||||||
|
<span>Continue</span>
|
||||||
|
</button>
|
||||||
<!-- <van-dialog
|
<!-- <van-dialog
|
||||||
class="video-dialog"
|
class="video-dialog"
|
||||||
:show-confirm-button="false"
|
:show-confirm-button="false"
|
||||||
@@ -181,7 +187,7 @@ const handleContinue = () => {
|
|||||||
letter-spacing: -0.04rem;
|
letter-spacing: -0.04rem;
|
||||||
margin-bottom: 3.2rem;
|
margin-bottom: 3.2rem;
|
||||||
}
|
}
|
||||||
.sub-title{
|
.sub-title {
|
||||||
font-family: 'satoshiRegular';
|
font-family: 'satoshiRegular';
|
||||||
font-size: 4rem;
|
font-size: 4rem;
|
||||||
}
|
}
|
||||||
@@ -294,9 +300,9 @@ const handleContinue = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.continue-button {
|
button.sandblasted-blurred.continue-button {
|
||||||
height: 6.7rem;
|
height: 6.7rem;
|
||||||
box-sizing: border-box;
|
width: 24.6rem;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 6.4rem;
|
bottom: 6.4rem;
|
||||||
right: 7.6rem;
|
right: 7.6rem;
|
||||||
@@ -306,11 +312,9 @@ const handleContinue = () => {
|
|||||||
color: white;
|
color: white;
|
||||||
font-size: 4rem;
|
font-size: 4rem;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
cursor: pointer;
|
|
||||||
z-index: 3;
|
z-index: 3;
|
||||||
font-family: 'satoshiRegular';
|
font-family: 'satoshiRegular';
|
||||||
display: flex;
|
box-sizing: border-box;
|
||||||
align-items: center;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
:deep(.van-overlay) {
|
:deep(.van-overlay) {
|
||||||
|
|||||||
Reference in New Issue
Block a user