chat聊天功能
This commit is contained in:
43
src/views/HomeView/Tools.vue
Normal file
43
src/views/HomeView/Tools.vue
Normal file
@@ -0,0 +1,43 @@
|
||||
<template>
|
||||
<div class="toolsPage">
|
||||
<tools></tools>
|
||||
</div>
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { defineComponent,computed,ref,provide,nextTick,createVNode,toRefs, reactive} from 'vue'
|
||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
||||
import { Https } from "@/tool/https";
|
||||
import { useStore } from "vuex";
|
||||
import { useI18n } from 'vue-i18n'
|
||||
import tools from '@/component/toolsPage/index.vue'
|
||||
export default defineComponent({
|
||||
components:{
|
||||
tools,
|
||||
},
|
||||
props:{
|
||||
},
|
||||
emits:[],
|
||||
setup(props,{emit}) {
|
||||
const store = useStore();
|
||||
const data = reactive({
|
||||
})
|
||||
const dataDom = reactive({
|
||||
})
|
||||
return{
|
||||
...toRefs(dataDom),
|
||||
...toRefs(data),
|
||||
}
|
||||
},
|
||||
provide() {
|
||||
return {
|
||||
}
|
||||
},
|
||||
})
|
||||
</script>
|
||||
<style lang="less" scoped>
|
||||
.toolsPage{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
}
|
||||
</style>
|
||||
@@ -9,7 +9,7 @@
|
||||
<div v-show="!isScroll" class="modal_title_text_assistant gallery_btn white" :class="{active:'all' == worksSelect}" @click="setWorksSelect({value:'all'})">All</div>
|
||||
<div v-show="!isScroll" class="modal_title_text_assistant gallery_btn white" :class="{active:'NewYear_2025' == worksSelect}" @click="setWorksSelect({value:'NewYear_2025'})">NewYear_2025</div>
|
||||
</div> -->
|
||||
<div class="page_content" >
|
||||
<div class="page_content" ref="autoscrollDom">
|
||||
<Falls ref="fall" @loadend="isShowMark = false" @setPortfolioLike="setPortfolioLike" :isScroll="isScroll" @getImgScale="getImgScale"></Falls>
|
||||
<div class="page_loading_box" v-show="!isNoData">
|
||||
<span class="page_loading" v-show="!isShowMark"></span>
|
||||
@@ -28,7 +28,7 @@
|
||||
</template>
|
||||
<script lang="ts">
|
||||
import { LoadingOutlined } from "@ant-design/icons-vue";
|
||||
import { defineComponent,h ,toRefs,ref,reactive,onMounted,nextTick,watch,computed} from 'vue'
|
||||
import { defineComponent,h ,toRefs,ref,reactive,onMounted,nextTick,watch,onBeforeUnmount} from 'vue'
|
||||
// import RobotAssist from "@/component/HomePage/RobotAssist.vue";
|
||||
import { Https } from "@/tool/https";
|
||||
import newScaleImage from "@/component/WorksPage/newScaleImage.vue";
|
||||
@@ -45,6 +45,10 @@ export default defineComponent({
|
||||
generalMenu,
|
||||
},
|
||||
props:{
|
||||
autoscroll:{
|
||||
type:Boolean,
|
||||
default:false,
|
||||
},
|
||||
isScroll:{
|
||||
type:Boolean,
|
||||
default:true,
|
||||
@@ -101,6 +105,8 @@ export default defineComponent({
|
||||
},
|
||||
isShowMark:false,
|
||||
isNoData:false,//如果数据为空就不加载
|
||||
autoscrollDom:null as any,
|
||||
autoscrollTime:null as any,
|
||||
})
|
||||
let menuList:any = ref([
|
||||
{
|
||||
@@ -228,7 +234,6 @@ export default defineComponent({
|
||||
new IntersectionObserver(
|
||||
(entries, observer) => {
|
||||
// 如果不是相交,则直接返回
|
||||
// console.log(entries[0]);
|
||||
if (!entries[0].intersectionRatio) return;
|
||||
filter.getListDate.page += 1
|
||||
getPorfolio()
|
||||
@@ -251,6 +256,50 @@ export default defineComponent({
|
||||
nextTick(()=>{
|
||||
setPorfolioDom()
|
||||
})
|
||||
//对元素设置自动滚动,每次滚动10px
|
||||
if (prop.autoscroll) {
|
||||
let isAdd = true
|
||||
filter.autoscrollTime = setInterval(() => {
|
||||
// console.log(filter.autoscrollDom.scrollHeight,filter.autoscrollDom.scrollTop+ filter.autoscrollDom.clientHeight)
|
||||
if(filter.autoscrollDom.scrollHeight > filter.autoscrollDom.scrollTop+ filter.autoscrollDom.clientHeight-3 && filter.autoscrollDom.scrollHeight < filter.autoscrollDom.scrollTop+ filter.autoscrollDom.clientHeight+3){
|
||||
isAdd = false
|
||||
}
|
||||
if(filter.autoscrollDom.scrollTop < 3){
|
||||
isAdd = true
|
||||
}
|
||||
if(isAdd){
|
||||
filter.autoscrollDom.scrollTop += 2;
|
||||
}else{
|
||||
filter.autoscrollDom.scrollTop -= 2;
|
||||
}
|
||||
}, 10);
|
||||
}
|
||||
|
||||
|
||||
// const start = filter.autoscrollDom.scrollTop;
|
||||
// const maxScroll = filter.autoscrollDom.scrollHeight - filter.autoscrollDom.clientHeight;
|
||||
// const duration = 3000; // 完整滚动时长(ms)
|
||||
// let startTime:any = null;
|
||||
|
||||
// function animate(currentTime:any) {
|
||||
// if (!startTime) startTime = currentTime;
|
||||
// const elapsed = currentTime - startTime;
|
||||
// const progress = Math.min(elapsed / duration, 1); // 0~1
|
||||
|
||||
// // 缓动函数(easeInOutQuad)
|
||||
// const easeProgress = progress < 0.5
|
||||
// ? 2 * progress * progress
|
||||
// : 1 - Math.pow(-2 * progress + 2, 2) / 2;
|
||||
|
||||
// filter.autoscrollDom.scrollTop = start + (maxScroll - start) * easeProgress;
|
||||
|
||||
// if (progress < 1) {
|
||||
// filter.autoscrollTime = requestAnimationFrame(animate);
|
||||
// }
|
||||
// }
|
||||
|
||||
// filter.autoscrollTime = requestAnimationFrame(animate);
|
||||
|
||||
let data = {
|
||||
id:router.currentRoute.value.query?.workId
|
||||
}
|
||||
@@ -258,6 +307,9 @@ export default defineComponent({
|
||||
getImgScale(data)
|
||||
}
|
||||
})
|
||||
onBeforeUnmount(() => {
|
||||
clearInterval(filter.autoscrollTime); // 清除定时器
|
||||
})
|
||||
return {
|
||||
...toRefs(filter),
|
||||
menuList,
|
||||
@@ -298,6 +350,7 @@ export default defineComponent({
|
||||
padding: 0;
|
||||
border-radius: 0;
|
||||
.page_content{
|
||||
scrollbar-width: none;
|
||||
border-radius: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -110,6 +110,24 @@
|
||||
></template>
|
||||
</a-select>
|
||||
</div>
|
||||
<div class="generalModel_state_item smail" v-if="selectCode == 'Models'">
|
||||
<a-select
|
||||
ref="select"
|
||||
v-model:value="ageGroup"
|
||||
:options="ageGroupList"
|
||||
@change="getLibraryList"
|
||||
style="width:20rem"
|
||||
size="large"
|
||||
:fieldNames="{ label: 'name', value: 'value' }"
|
||||
>
|
||||
<template #suffixIcon
|
||||
><span
|
||||
class="icon iconfont icon-xiala"
|
||||
style="color: #343579"
|
||||
></span
|
||||
></template>
|
||||
</a-select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -231,7 +249,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<!-- 蒙层 start-->
|
||||
<div class="mark_loading" v-show="isShowMark || getLangIsShowMark">
|
||||
<div class="mark_loading" v-show="isShowMark">
|
||||
<a-spin size="large" />
|
||||
</div>
|
||||
<!-- 蒙层 end-->
|
||||
@@ -463,7 +481,8 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>{{ ageGroup }}
|
||||
<mannequinEdit ref="ModelPlacement" :ageGroup="ageGroup" :isPop="true" @submit="getLibraryList"></mannequinEdit>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -471,8 +490,7 @@
|
||||
</div>
|
||||
<searchLabel ref="searchLabel"></searchLabel>
|
||||
<scaleImage ref="scaleImage" :isCanvas="selectCode == 'Sketchboard'" :sex="workspace.sex"></scaleImage>
|
||||
<ModelPlacement ref="ModelPlacement" @submitModelPlacement="getLibraryList"></ModelPlacement>
|
||||
<ModelPlacementMobile ref="ModelPlacementMobile" @submitModelPlacement="getLibraryList"></ModelPlacementMobile>
|
||||
<!-- <ModelPlacement ref="ModelPlacement" @submitModelPlacement="getLibraryList"></ModelPlacement> -->
|
||||
<setLabel ref="setLabel"></setLabel>
|
||||
<createSlogan ref="createSlogan" @setSloganData="setSloganData"></createSlogan>
|
||||
<UpgradePlan ref="UpgradePlan"></UpgradePlan>
|
||||
@@ -485,10 +503,8 @@
|
||||
<script lang="ts">
|
||||
import { LoadingOutlined } from "@ant-design/icons-vue";
|
||||
import { defineComponent,h ,ref,createVNode,nextTick,watch,provide,computed,reactive,toRefs} from 'vue'
|
||||
import ModelPlacement from '@/component/LibraryPage/ModelPlacement.vue';
|
||||
// import ModelPlacement from '@/component/LibraryPage/ModelPlacementUpdata.vue';
|
||||
import setLabel from '@/component/LibraryPage/setLabel.vue';
|
||||
import ModelPlacementMobile from '@/component/LibraryPage/ModelPlacementMobile.vue';
|
||||
import brandDetail from '@/component/LibraryPage/brandDetail.vue';
|
||||
import createBrand from '@/component/LibraryPage/createBrand.vue';
|
||||
import searchLabel from '@/component/LibraryPage/searchLabel.vue';
|
||||
@@ -508,11 +524,10 @@ import { remove } from "jszip";
|
||||
import createSlogan from "@/component/HomePage/createSlogan.vue";
|
||||
import generalMenu from "@/component/HomePage/generalMenu.vue";
|
||||
import UpgradePlan from "@/component/HomePage/UpgradePlan.vue";
|
||||
import mannequinEdit from "@/component/HomePage/index/model/mannequin/edit.vue";
|
||||
export default defineComponent({
|
||||
components: {
|
||||
ModelPlacement,
|
||||
setLabel,
|
||||
ModelPlacementMobile,
|
||||
brandDetail,
|
||||
createBrand,
|
||||
searchLabel,
|
||||
@@ -523,12 +538,9 @@ export default defineComponent({
|
||||
createSlogan,
|
||||
generalMenu,
|
||||
UpgradePlan,
|
||||
mannequinEdit,
|
||||
},
|
||||
props:{
|
||||
getLangIsShowMark:{
|
||||
type:Boolean,
|
||||
default:true,
|
||||
}
|
||||
},
|
||||
|
||||
setup(props) {
|
||||
@@ -548,7 +560,7 @@ export default defineComponent({
|
||||
]
|
||||
})
|
||||
let selectImgList:any = ref([])
|
||||
let selectCode:any = ref('Moodboard')
|
||||
let selectCode:any = ref('')
|
||||
let searchPictureName = ref('')
|
||||
let searchPictureSeed:any = ref(0);
|
||||
let designType:any = ref({
|
||||
@@ -574,6 +586,8 @@ export default defineComponent({
|
||||
const pageData = reactive({
|
||||
isBrandDetail:false,
|
||||
brandDNAList:[] as any,
|
||||
ageGroup:'',
|
||||
ageGroupList:computed(()=>store.state.UserHabit.ageGroup),
|
||||
})
|
||||
let designTypeList:any = ref({
|
||||
Sketchboard:positionType,
|
||||
@@ -733,6 +747,7 @@ export default defineComponent({
|
||||
level1Type:selectCode.value,
|
||||
level2Type:design,
|
||||
page:1,
|
||||
ageGroup:pageData.ageGroup,
|
||||
modelSex:sex.value?sex.value:'',
|
||||
pictureName:searchPictureName.value,
|
||||
size:pageSize.value,
|
||||
@@ -797,17 +812,6 @@ export default defineComponent({
|
||||
dataDom.createBrand.openAddBrand()
|
||||
}
|
||||
|
||||
watch(
|
||||
() => props.getLangIsShowMark, // 这里使用了一个 getter 函数
|
||||
(newValue, oldValue) => {
|
||||
if(!newValue){
|
||||
getLibraryList('')
|
||||
getClass()
|
||||
getSex()
|
||||
}
|
||||
},
|
||||
{immediate: true,}
|
||||
)
|
||||
return {
|
||||
...toRefs(dataDom),
|
||||
...toRefs(pageData),
|
||||
@@ -906,9 +910,9 @@ export default defineComponent({
|
||||
handler(query, oldQuery) {
|
||||
if(oldQuery && query?.library == oldQuery?.library)return
|
||||
let str = query.library
|
||||
if(!this.ageGroup)this.ageGroup = this.ageGroupList[0].value
|
||||
if(!str)str = 'Moodboard'
|
||||
nextTick(()=>{
|
||||
console.log()
|
||||
this.selectMenuItem({code:str})
|
||||
// setWorksSelect(str)
|
||||
})
|
||||
@@ -922,6 +926,8 @@ export default defineComponent({
|
||||
this.isTest =JSON.parse(isTest)
|
||||
this.uploadUrl = getUploadUrl()
|
||||
this.token = getCookie("token") || "";
|
||||
this.getClass()
|
||||
this.getSex()
|
||||
},
|
||||
|
||||
methods:{
|
||||
@@ -963,13 +969,13 @@ export default defineComponent({
|
||||
}
|
||||
},
|
||||
selectMenuItem(menu:any){
|
||||
|
||||
if(menu.code != this.upload.level1Type){
|
||||
this.selectCode = menu.code
|
||||
this.currentPage = 1
|
||||
this.total = 0
|
||||
if(menu.code == 'MyBrand'){
|
||||
this.getBrandDNAList()
|
||||
this.upload.level1Type = menu.code
|
||||
return
|
||||
}
|
||||
this.searchPictureName = ''
|
||||
@@ -1390,14 +1396,15 @@ export default defineComponent({
|
||||
url:data.url,
|
||||
name:name,
|
||||
}
|
||||
this.placementClick(newData)
|
||||
this.placementClick(data)
|
||||
},
|
||||
|
||||
//给模特打点编辑
|
||||
placementClick(data:any){
|
||||
// let placementModal:any = isMoible() ? this.$refs.ModelPlacementMobile : this.$refs.ModelPlacement
|
||||
let placementModal:any = this.$refs.ModelPlacement
|
||||
placementModal.showPlacementModal(data,this.sex)
|
||||
placementModal.mannEditMask = false
|
||||
placementModal.showPlacementModal(data,this.sex,'Library')
|
||||
},
|
||||
setTextareaShow(){
|
||||
this.isTextarea = !this.isTextarea
|
||||
@@ -1958,6 +1965,7 @@ export default defineComponent({
|
||||
width: 100%;
|
||||
// width: calc(100% - 23.5rem);
|
||||
height: 100%;
|
||||
position: relative;
|
||||
.header_operate_item{
|
||||
margin-right: 5rem;
|
||||
color: #C2C2C2;
|
||||
|
||||
Reference in New Issue
Block a user