Commit 16de2048 authored by zhengke's avatar zhengke

匹配介绍

parent 88fd24ee
......@@ -89,6 +89,13 @@ class ConfigService{
return Api.Post("triptemplate_RemoveTripOther",params)
}
/**
* 销售行程定时更新数据
*/
static async SetTripOtherTemp(params : any):Promise<HttpResponse>{
return Api.Post("triptemplate_SetTripOtherTemp",params)
}
/**
* 销售新增编辑模版
*/
......
import { array } from '@amcharts/amcharts4/core';
import Api,{ HttpResponse, Result } from './../utils/request';
class MatchingData{
static async ScenicSearch(params:any):Promise<HttpResponse>{
return Api.Post("mongoscenic_ScenicSearch",params)
}
}
export default MatchingData;
\ No newline at end of file
export const enum ToolbarStates {
SYMBOL = 'symbol',
EL_ANIMATION = 'elAnimation',
EL_NORMALDATA = 'normalData',
EDIT_DATAS = 'editDatas',
EL_TEMPLATEDATA = 'elTemplateData',
EL_STYLE = 'elStyle',
......
......@@ -35,7 +35,6 @@ export default (
})
newActiveIdList = [...newActiveIdList, ...groupMembersId]
}
mainStore.setActiveElementIdList(uniq(newActiveIdList))
mainStore.setHandleElementId(element.id)
}
......
......@@ -180,6 +180,7 @@ import { useRouter } from "vue-router";
import { managerTemplateLink, openNewBlank } from '@/utils/common'
const mainStore = useMainStore()
const { handleElement, handleElementId } = storeToRefs(mainStore)
const slidesStore = useSlidesStore()
const layoutsStore = useSlidesStore()
const { title, slides, slideIndex, viewportRatio } = storeToRefs(slidesStore)
......@@ -224,6 +225,15 @@ const journeyAdsDetails = ref<Object>()
const psdVisibleStatus = ref(false)
const { market, model, ConfigId, CoverImg, dataLoading, TempId, TempType, SourceLoading } = storeToRefs(useScreenStore())
const routers = useRouter();
if(queryObj.value.Title) titleValue.value = queryObj.value.Title
const MonitoringNumber = ref(0)
const MonitoringTNumber = ref(0)
const timer = 10
const Countdown = ref<any>(timer)
const intervalId = ref(null);
const showTimer = ref(false);
// 返回到首页 type 1 模版列表页 0 销售在线模版页
const goBack = (type:any) =>{
mainBackVisible.value = false
......@@ -283,6 +293,43 @@ const UploadPsdHandler = () => {
psdVisibleStatus.value = true
}
// 倒计时更新数据
const benginTimer = () => {
showTimer.value = true;
intervalId.value = setInterval(() => {
if (Countdown.value === 0&&showTimer.value) {
clearInterval(intervalId.value);
intervalId.value = null;
showTimer.value = false
return UpdateItinerary()
} else if(Countdown.value>0) {
Countdown.value--;
}
}, 1000);
}
const UpdateItinerary = async () => {
if(datas.loading) return
queryObj.value.TempData = JSON.stringify(slides.value)
if(model.value==2&&SalesEditor.value>0&&searchData.value.sellId){
datas.loading = true
let queryMsg = {
Id: searchData.value.sellId,
Title: queryObj.value.Title,
TempId: queryObj.value.TempId,
TempData: queryObj.value.TempData,
}
const result = await ConfigService.SetTripOtherTemp(queryMsg);
if (result.data.resultCode == 1) {
console.log(Countdown.value,'======成功')
datas.loading = false
}else{
datas.loading = false
}
}
}
// 销售新增修改行程、广告
const SetSellTemplate = async (type:Number,FolderId:Number) => {
if(FolderId>=0) datas.loading = true
......@@ -617,6 +664,25 @@ watch(()=>autoSave.value,(newVal)=>{
setTemplate(0)
}
})
watch(()=>slides.value,(newVal,oldVal)=>{
if(!MonitoringNumber.value||MonitoringNumber.value<2) MonitoringNumber.value++
if(MonitoringNumber.value>1) {
Countdown.value = timer
benginTimer()
}
},{
deep: true,
immediate: false
})
watch(()=>queryObj.value.Title,(newVal,oldVal)=>{
if(!MonitoringTNumber.value||MonitoringTNumber.value<2) MonitoringTNumber.value++
if(MonitoringTNumber.value>1) {
Countdown.value = timer
benginTimer()
}
console.log('000---',MonitoringTNumber.value)
})
handleUpdateTitle()
</script>
......
<template>
<div class="ElementNormalData">
<el-input
v-model="keywords" placeholder="输入关键词检索"
class="input-with-select q-pb-md" clearable
@input="SearchCloudInfo"
>
<template #prefix>
<IconSearch class="cusor-pointer" @click.stop="SearchCloudInfo"></IconSearch>
</template>
</el-input>
<div v-loading="loading" style="height: calc(100%-40px);overflow: auto;">
<div class="symbol-item NormalDataCenter cursor-pointer"
:class="[current==item.Feature?'active':'']"
v-for="(item,index) in dataList" @click="setElText(item,index)">
<div class="title fz14 text-weight-bold text-ellipsis">{{item.Name}}</div>
<div class="images">
<el-image :src="item.PicPath" style="width: 100%;"
fit="cover">
<template #error>
<div class="row items-center" style="height: 100%;">
<el-image :src="errImg"></el-image>
</div>
</template>
</el-image>
</div>
<div class="text fz12">
{{item.Feature}}
</div>
</div>
</div>
<div v-if="(!dataList || dataList.length==0) && !loading">
<el-empty class="q-ma-xl" description="暂无数据" />
</div>
</div>
<!-- 预览图 -->
<el-image-viewer
@close="() => { isViewerShow = false }"
v-if="isViewerShow"
:initial-index="currentImg"
:url-list="srcList"></el-image-viewer>
</template>
<script lang="ts" setup>
import { ref, reactive, watch } from 'vue'
import { storeToRefs } from 'pinia'
import { useMainStore, useSlidesStore, useScreenStore } from '@/store'
import MatchingData from '@/services/MatchingData'
import { getHtmlPlainText } from '@/utils/common'
import { useUserStore } from "@/store/user";
import HtmlUtil from '@/utils/htmlutil'
const { handleElement, handleElementId } = storeToRefs(useMainStore())
const errImg = ref(require('@/assets/img/noImg.png') as any)
const isViewerShow = ref(false)
const currentImg = ref(0)
const current = ref(null||Number)
const srcList = ref([])
const params = reactive({
kw: HtmlUtil.htmlEncodeByRegExp(handleElement.value.contentStr),
cn: '',
})
const keywords = ref('')
const slidesStore = useSlidesStore()
const dataList = ref([])
const dataListAll = ref([])
const loading = ref(false)
const { userInfo } = storeToRefs(useUserStore());
const SearchCloudInfo = () => {
if(keywords.value){
dataList.value = dataListAll.value.filter(x=>{
return x.Feature.toLowerCase().includes(keywords.value.toLowerCase())
})
}else dataList.value = dataListAll.value
}
const seeImg = (index:Number) =>{
isViewerShow.value = true
currentImg.value = index
}
const setElText = (item:any,index:Number) => {
current.value = item.Feature
const contentStr = handleElement.value.contentStr
if(contentStr!=item.Feature) {
const content = handleElement.value.content.replace(getHtmlPlainText(handleElement.value.content),item.Feature)
const props = {
content,
contentStr:item.Feature
}
slidesStore.updateElement({
id: handleElementId.value,
props
})
}
}
const getDatas = async () => {
loading.value = true
const response = await MatchingData.ScenicSearch(params)
if (response.data.resultCode == 1) {
dataList.value = checkPoiCoverImg(response.data.data)
dataListAll.value = checkPoiCoverImg(response.data.data)
}
loading.value = false
}
const checkPoiCoverImg = (array:any[])=>{
array.forEach((x,index)=>{
if(x.Feature==handleElement.value.contentStr) current.value = x.Feature
if((!x.PicPath||x.PicPath=='') && x.ImgArray && x.ImgArray.length>0){
x.PicPath=x.ImgArray[0]
}else if(x.PicPath && x.PicPath!=''){
if(x.PicPath.indexOf('?')!=-1) x.PicPath=x.PicPath.split('?')[0]
x.ImgArray = x.ImgArray ?? []
x.ImgArray.splice(0,0,x.PicPath)
}
})
return array
}
getDatas()
watch(()=>handleElementId.value, () => {
params.kw = HtmlUtil.htmlEncodeByRegExp(handleElement.value.contentStr)
getDatas()
})
</script>
<style lang="scss" scoped>
.ElementNormalData{
height: 100%;
display: flex;
flex-direction: column;
}
.NormalDataCenter{
border: 2px solid #CED9FF;
padding: 8px 14px;
margin-bottom: 5px;
}
.NormalDataCenter.active{
border-color: #0B40FE;
}
.title{
font-family: PingFang SC;
}
.images{
width: 194px;
max-height: 139px;
overflow: hidden;
margin-top: 8px;
margin-bottom: 11px;
}
.text {
font-family: PingFang SC;
font-weight: 300;
color: #000;
line-height: 18px;
word-break: break-all;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
overflow: hidden;
}
</style>
\ No newline at end of file
......@@ -23,6 +23,7 @@ import ElementStylePanel from './ElementStylePanel/index.vue'
import ElementPositionPanel from './ElementPositionPanel.vue'
import ElementAnimationPanel from './ElementAnimationPanel.vue'
import ElementTemplateData from './ElementTemplateData.vue'
import ElementNormalData from './ElementNormalData.vue'
import SlideDesignPanel from './SlideDesignPanel.vue'
import SlideAnimationPanel from './SlideAnimationPanel.vue'
import MultiPositionPanel from './MultiPositionPanel.vue'
......@@ -45,6 +46,7 @@ const elementTabs = computed<ElementTabs[]>(() => {
{ label: '符号', key: ToolbarStates.SYMBOL },
{ label: '位置', key: ToolbarStates.EL_POSITION },
// { label: '动画', key: ToolbarStates.EL_ANIMATION }
{ label: '匹配数据', key: ToolbarStates.EL_NORMALDATA }
]
}
return [
......@@ -99,6 +101,7 @@ const currentPanelComponent = computed(() => {
[ToolbarStates.EL_TEMPLATEDATA]: ElementTemplateData,
[ToolbarStates.SLIDE_DESIGN]: SlideDesignPanel,
[ToolbarStates.SLIDE_ANIMATION]: SlideAnimationPanel,
[ToolbarStates.EL_NORMALDATA]: ElementNormalData,
[ToolbarStates.MULTI_POSITION]: MultiPositionPanel,
[ToolbarStates.SYMBOL]: SymbolPanel,
}
......
......@@ -78,6 +78,7 @@ import useHistorySnapshot from '@/hooks/useHistorySnapshot'
import ElementOutline from '@/views/components/element/ElementOutline.vue'
import ProsemirrorEditor from '@/views/components/element/ProsemirrorEditor.vue'
import { ToolbarStates } from '@/types/toolbar'
const props = defineProps<{
elementInfo: PPTTextElement
......@@ -102,7 +103,7 @@ const handleSelectElement = (e: MouseEvent | TouchEvent, canMove = true) => {
if(e.button && e.button== 1) return
if (props.elementInfo.lock) return
e.stopPropagation()
mainStore.setToolbarState(ToolbarStates.EL_NORMALDATA)
props.selectElement(e, props.elementInfo, canMove)
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment