Commit 45740fd7 authored by 罗超's avatar 罗超

提交部分的路由改造页面

parent 8097de2f
......@@ -42,7 +42,6 @@ declare module 'vue' {
ElOption: typeof import('element-plus/es')['ElOption']
ElPagination: typeof import('element-plus/es')['ElPagination']
ElPopover: typeof import('element-plus/es')['ElPopover']
ElResult: typeof import('element-plus/es')['ElResult']
ElRow: typeof import('element-plus/es')['ElRow']
ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
ElSelect: typeof import('element-plus/es')['ElSelect']
......
......@@ -59,9 +59,9 @@
"svg-pathdata": "^6.0.3",
"tinycolor2": "^1.6.0",
"tippy.js": "^6.3.7",
"vue": "^3.3.7",
"vue": "^3.4.21",
"vue-konva": "^3.0.2",
"vue-router": "^4.2.5",
"vue-router": "^4.0.13",
"vue3-leaderline": "^1.2.11",
"vuedraggable": "^4.1.0"
},
......
<template>
<div v-if="isFinish" style="height: 100vh;background: rgb(243, 246, 251);">
<!-- <Screen v-if="screening" /> -->
<PreviewCustomSlider v-if="model==448963"></PreviewCustomSlider>
<Market v-else-if="(market&&model!=2&&!query().ViewSlideshow)||(market&&SalesEditor>0&&!query().ViewSlideshow)"></Market>
<Workspace v-else-if="model==2&&SalesEditor==0"/>
<Editor v-else-if="_isPC" />
<Mobile v-else />
</div>
<el-result v-if="loading" title="404" :sub-title="ShareTips">
<template #icon></template>
<template #extra></template>
</el-result>
<router-view/>
</template>
<script lang="ts" setup>
import { ApiResult } from '@/configs/axios';
import { onMounted,ref,provide } from 'vue'
import { storeToRefs } from 'pinia'
import { useScreenStore, useMainStore, useSnapshotStore,
useFontStore, useSellTemplateStore, useSlidesStore } from '@/store'
import { LOCALSTORAGE_KEY_DISCARDED_DB } from '@/configs/storage'
import { deleteDiscardedDB } from '@/utils/database'
import { isPC, query } from './utils/common'
import { userStore } from './store/user'
import { injectKeyTemplate } from '@/types/injectKey'
import ConfigService from '@/services/ConfigService'
import { domainManager } from '@/utils/domainManager'
import { enterFullscreen, exitFullscreen, isFullscreen } from '@/utils/fullscreen'
import { VIEWPORT_SIZE, VIEWPORT_VER_SIZE } from '@/configs/canvas'
import { onMounted, ref,provide } from 'vue';
import { deleteDiscardedDB } from './utils/database';
import { useFontStore, useMainStore, useSnapshotStore } from '@/store'
import { LOCALSTORAGE_KEY_DISCARDED_DB } from '@/configs/storage';
import { storeToRefs } from 'pinia';
import { injectKeyTemplate } from './types/injectKey';
import Editor from './views/Editor/index.vue'
import Screen from './views/Screen/index.vue'
import Mobile from './views/Mobile/index.vue'
import Market from './views/Market/Index.vue'
import PreviewCustomSlider from './views/Preview/PreviewCustomSlider.vue'
import SellTemplate from './views/SellTemplate/index.vue'
import Workspace from './views/SellTemplate/Workspace.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
const snapshotStore = useSnapshotStore()
const mainStore = useMainStore()
const { databaseId } = storeToRefs(mainStore)
const searchData = ref({} as any)
provide(injectKeyTemplate,searchData)
const autoSave = ref(0)
provide("SellTravelSave",autoSave)
const isFinish = ref(false)
const loading = ref(false)
const ShareTips = ref('')
const _isPC = isPC()
const mainStore = useMainStore()
const snapshotStore = useSnapshotStore()
const modelStore = useScreenStore()
const ConfigIdStore = useScreenStore()
const marketStore = useScreenStore()
const isModelStore = useScreenStore()
const TempIdStore = useScreenStore()
const ScreenStore = useScreenStore()
const SellTemplateStore = useSellTemplateStore()
const slidesStore = useSlidesStore()
const { databaseId } = storeToRefs(mainStore)
const { screening, market, model, ConfigId } = storeToRefs(useScreenStore())
const { userInfo } = storeToRefs(userStore())
const { SalesEditor, SalesTripId } = storeToRefs(useSellTemplateStore())
const { slides } = storeToRefs(useSlidesStore())
const { enterScreeningFromStart } = storeToRefs(useScreenStore())
if (process.env.NODE_ENV === 'production') {
window.onbeforeunload = () => false
}
const userLoginHandler = async ()=>{
let param = query()
let userId = 0
let ConfigId = 0 // 9117
let model = 0
let SalesTripId = ''
await useFontStore().loadAllFonts()
if(param.uid) userId=parseInt(param.uid)
if(param.ConfigId) ConfigId=parseInt(param.ConfigId)
if(param.model) model=parseInt(param.model)
if(param.SalesTripId) {
SalesTripId = param.SalesTripId
SellTemplateStore.setSalesTripId(SalesTripId)
try {
await sellShareTemplate()
} catch (error) {}
}
ConfigIdStore.setConfigId(ConfigId)
modelStore.setModel(model)
try {
if(param.uid) await userStore().setUserLoginAsync(userId)
if(ConfigId>0&&model!=2) await GetTripConfig(ConfigId)
} catch (error) {}
if(userId>0)isFinish.value=true
if(param.ViewSlideshow) {
searchData.value.ViewSlideshow = param.ViewSlideshow
try {
await sellHistoryTripTemplate(param.sellId,param.LogId)
} catch (error) {}
}
if(!ConfigId&&!model&&(param.SalesTripId&&param.SalesTripId=='')) ElMessageBox.confirm(
'当前没有权限进行任何操作,请联系管理员!',
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).then(() => {})
.catch(() => {})
}
onMounted(async () => {
await deleteDiscardedDB()
snapshotStore.initSnapshotDatabase()
mainStore.setAvailableFonts()
})
// 销售历史版本模版数据
const sellHistoryTripTemplate = async (sellId:any,LogId:any) => {
const loadingObj = ElLoading.service({
text:'正在渲染数据',
lock:true
})
try {
let queryMsg
let dataRes
if(!LogId){
queryMsg = {
Id: sellId,
Status: searchData.value.ViewSlideshow==1?1:0
}
// 行程广告浏览记录
if(queryMsg.Status==0) await ConfigService.SetTripBrowse({FileId: sellId});
dataRes = await ConfigService.sellGetTemplateDetails(queryMsg);
}else{
queryMsg = {
LogId: LogId,
FileId: sellId,
}
dataRes = await ConfigService.GetHistoryInfo(queryMsg);
}
if (dataRes.data.resultCode==ApiResult.SUCCESS) {
loadingObj.close()
loading.value = false
isFinish.value=true
let dataObj = dataRes.data.data
let viewportRatios = 0
if(dataObj.TemplateType!=2) {
viewportRatios = 1.414
if(dataObj.TempType==1) viewportRatios = 0.7069
}
if(dataObj.TemplateType==2&&dataObj.Width&&dataObj.Height) {
viewportRatios = dataObj.Height/dataObj.Width
}
if(dataObj.Width&&dataObj.Height) {
VIEWPORT_SIZE.Value = dataObj.Height
VIEWPORT_VER_SIZE.Value = dataObj.Width
}else{
VIEWPORT_SIZE.Value = 1754
VIEWPORT_VER_SIZE.Value = 1240
}
slidesStore.setViewportRatio(viewportRatios)
let SlidesData = JSON.parse(dataObj.TempData)
let newSlides = []
await SlidesData.forEach((x,i)=>{
newSlides.push(x)
})
slidesStore.setSlides(newSlides)
ScreenStore.setScreening(true)
enterScreeningFromStart
slidesStore.updateSlideIndex(0)
}else{
loading.value = true
ShareTips.value = dataRes.data.message
loadingObj.close()
}
} catch (error) {
}
}
// 销售分享模版数据
const sellShareTemplate = async () =>{
const loadingObj = ElLoading.service({
text:'正在渲染数据',
lock:true
})
try {
let queryMsg = {
Code: SalesTripId.value
}
const slidesData = slides.value
let dataRes = await ConfigService.GetTripOtherByCode(queryMsg);
if (dataRes.data.resultCode==ApiResult.SUCCESS) {
loadingObj.close()
loading.value = false
isFinish.value=true
let dataObj = dataRes.data.data
let viewportRatios = 0
if(dataObj.TemplateType!=2) {
viewportRatios = 1.414
if(dataObj.TempType==1) viewportRatios = 0.7069
}
if(dataObj.TemplateType==2&&dataObj.Width&&dataObj.Height) {
viewportRatios = dataObj.Height/dataObj.Width
}
if(dataObj.Width&&dataObj.Height) {
VIEWPORT_SIZE.Value = dataObj.Height
VIEWPORT_VER_SIZE.Value = dataObj.Width
}else{
VIEWPORT_SIZE.Value = 1754
VIEWPORT_VER_SIZE.Value = 1240
}
slidesStore.setViewportRatio(viewportRatio)
let SlidesData = JSON.parse(dataObj.TempData)
let newSlides = []
await SlidesData.forEach((x,i)=>{
newSlides.push(x)
})
slidesStore.setSlides(newSlides)
slidesStore.updateSlideIndex(0)
ScreenStore.setScreening(true)
enterScreeningFromStart
}else{
loading.value = true
ShareTips.value = dataRes.data.message
loadingObj.close()
}
} catch (error) {
loading.value = true
ShareTips.value = error
loadingObj.close()
}
}
/**
* 根据团期配置编号获取行程详情
*/
const GetTripConfig = async (ConfigId) =>{
try {
let queryMsg = {
ConfigId: ConfigId
}
let datasRes = await ConfigService.triptemplateGetTripConfig(queryMsg);
if (datasRes.data.resultCode==ApiResult.SUCCESS && datasRes.data.data) {
let dataObj = datasRes.data.data
if(dataObj.TempId==0){
return window.parent.postMessage(`暂无行程数据`, `${domainManager().notificationUrl}`);
}
isModelStore.setIsModel(true)
marketStore.setMarket(!market)
TempIdStore.setTempId(dataObj.TempId)
}
} catch (error) {
}
if (process.env.NODE_ENV === 'production') {
window.onbeforeunload = () => false
}
userLoginHandler()
// 应用注销时向 localStorage 中记录下本次 indexedDB 的数据库ID,用于之后清除数据库
window.addEventListener('unload', () => {
const discardedDB = localStorage.getItem(LOCALSTORAGE_KEY_DISCARDED_DB)
......@@ -270,13 +37,12 @@ window.addEventListener('unload', () => {
const newDiscardedDB = JSON.stringify(discardedDBList)
localStorage.setItem(LOCALSTORAGE_KEY_DISCARDED_DB, newDiscardedDB)
})
useFontStore().loadAllFonts()
</script>
<style lang="scss">
@import url('@/assets/styles/common.css');
#app {
height: 100%;
}
.el-overlay{
}
</style>
\ No newline at end of file
......@@ -18,17 +18,19 @@ import Icon from '@/plugins/icon'
import Directive from '@/plugins/directive'
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
import VueKonva from 'vue-konva';
import router from './router'
const app = createApp(App)
app.use(router)
const pinia = createPinia()
pinia.use(piniaPluginPersistedstate)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component)
}
app.use(Icon)
app.use(Directive)
app.use(VueKonva)
app.use(pinia)
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
app.component(key, component)
}
app.mount('#app')
import { createRouter, createWebHistory } from 'vue-router'
import routes from './router'
import { userStore } from '@/store/user';
import { ElLoading } from 'element-plus';
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes
})
const whiteList = ['/autoLogin','/login','/notfound']
const managerMenu = ['/market','/editor_admin']
let loadingInstance:any = null
router.beforeEach((to:any, from:any, next:any) => {
const user = userStore()
if(!loadingInstance){
loadingInstance = ElLoading.service({
fullscreen:true,
lock:true
})
}
if (whiteList.includes(to.path) || user.getUserToken!='') {
if(managerMenu.includes(to.path) && user.getUser.IsEditTripTemplate!=1){
next('/notfound');
}
if (to.meta.title) {
document.title = to.meta.title
}
next();
} else {
if(to.query && to.query.uid){
next(`/autoLogin?forword=${encodeURIComponent(to.fullPath)}`)
}
next('/notfound');
}
});
router.afterEach(() => {
if (loadingInstance) {
loadingInstance.close()
loadingInstance = null
}
});
export default router
\ No newline at end of file
import { RouteRecordRaw } from 'vue-router'
const routes: RouteRecordRaw[] = [
{
path: '/',
component: () => import('@/views/Index.vue'),
meta:{
title:'个人空间'
}
},
{
path: '/notfound',
component: () => import('@/views/ErrorNotFound.vue'),
meta:{
title:'Oops! 出错了'
}
},
{
path: '/autoLogin',
component: () => import('@/views/Auth/AutoLogin.vue'),
meta:{
title:'自动登录中...'
}
},
{
path: '/market',
component: () => import('@/views/Market/Index.vue'),
meta:{
title:'模板管理'
}
},
{
path: '/market/create',
component: () => import('@/views/Market/Index.vue'),
meta:{
title:'选择模板进行创作'
}
},
{
path: '/market/create/ad',
component: () => import('@/views/Market/Index.vue'),
meta:{
title:'选择广告模板'
}
},
{
path: '/market/create/trip',
component: () => import('@/views/Market/Index.vue'),
meta:{
title:'选择行程模板'
}
},
{
path: '/editor/:id(\\d+)/:tid(\\d+)/:type(\\d+)/:pid(\\d+)/e/:e(\\d+)/c/:c(\\d+)',
component: () => import('@/views/Editor/Editor.vue'),
meta:{
title:'编辑'
}
},
{
path: '/editor/:tid(\\d+)/:type(\\d+)',
component: () => import('@/views/Editor/Editor.vue'),
meta:{
title:'新建'
}
}
];
export default routes;
\ No newline at end of file
import UserService from '@/services/UserService';
import { defineStore } from 'pinia';
import { StorageLike } from 'pinia-plugin-persistedstate';
import SecureLS from 'secure-ls';
const ls = new SecureLS({
isCompression: false,
encryptionSecret: '38c31684-d00d-30dc-82e0-fad9eec46d1d',
})
const st: StorageLike = {
setItem(key: string, value: string) {
ls.set(key, value);
},
getItem(key: string): string | null {
return ls.get(key);
},
}
export const userStore = defineStore('user', {
state:()=>({
token:'' as string,
......@@ -21,8 +35,13 @@ export const userStore = defineStore('user', {
if (response.data.resultCode == 1) {
this.token = response.data.data.token
this.userInfo = response.data.data
return true
}
} catch (error) {}
return false
}
},
persist: {
storage: st,
}
});
\ No newline at end of file
import { number } from '@amcharts/amcharts4/core'
import { padStart } from 'lodash'
/**
......@@ -10,6 +9,16 @@ export const fillDigit = (digit: number, len: number) => {
return padStart('' + digit, len, '0')
}
export const openNewBlank = (path:string) => {
if(path!=''){
const url = `${window.location.origin}${path}`
window.open(url, '_blank')
}
}
export const createSaleEditorLink = (id:number,tid:number,type:1|2,pid:number,ep:0|1,cp:0|1) =>{
return `/editor/${id}/${tid}/${type}/${pid}/e/${ep}/c/${cp}`
}
/**
* 判断设备
*/
......
<template>
<div class="full-height column flex-center items-center" v-if="!result">
<el-empty :image-size="200" description="抱歉,你的账户信息不存在" />
</div>
</template>
<script setup lang="ts">
import { userStore } from '@/store/user';
import { query } from '@/utils/common';
import { ElLoading } from 'element-plus';
import { ref } from 'vue';
import { useRouter } from 'vue-router';
const router = useRouter();
const forword = decodeURIComponent(router.currentRoute.value.query.forword)
const param = query(forword)
const result = ref(true)
const userLoginHandler = async ()=>{
const loading = ElLoading.service({
fullscreen:true,
lock:true
})
if(param.uid){
let response = await userStore().setUserLoginAsync(parseInt(param.uid))
if(response){
router.push({
path: forword
})
return
}
}
result.value=false
}
userLoginHandler()
</script>
<style lang="scss">
</style>
\ No newline at end of file
<template>
<EditorHome v-if="showEditor"></EditorHome>
</template>
<script lang="ts" setup>
import { inject, ref } from 'vue';
import EditorHome from './index.vue'
import { injectKeyTemplate } from "@/types/injectKey"
import { useSellTemplateStore, useScreenStore, useSlidesStore } from "@/store";
import { useRouter } from 'vue-router';
const router = useRouter()
const currentRoute = router.currentRoute.value
const params = currentRoute.params
const searchData = ref({} as any)
searchData.value = inject(injectKeyTemplate)
const SalesEditorStore = useSellTemplateStore()
const showEditor = ref(false)
const initSellEditor=()=>{
let list = [
{
id: "test-slide-1",
pageType: 0,
elements: [],
background: {
type: "solid",
color: "#ffffff",
},
},
];
useSlidesStore().setSlides(list)
useScreenStore().setModel(2)
searchData.value.sellId = parseInt(params.id.toString())
searchData.value.sellTempId = parseInt(params.tid.toString())
searchData.value.TemplateType = parseInt(params.type.toString())
searchData.value.ParentFileId = parseInt(params.pid.toString())
//@TODO:注意,这个地方应该替换为接口验证
searchData.value.noExportPermission = params.e.toString()!='1'
searchData.value.noCopyPermission = params.c.toString()!='1'
SalesEditorStore.setSalesEditor(2);
showEditor.value=true
}
const init =()=>{
//销售修改行程
if(currentRoute.path.includes('/editor/') && params.id) initSellEditor()
else if(currentRoute.path.includes('/editor/')) initSellEditor()
}
init()
</script>
\ No newline at end of file
<template>
<Screen v-if="screening" />
<div class="pptist-editor" v-show="model!=3&&!screening&&!query().ViewSlideshow">
<EditorHeader class="layout-header" />
<div class="layout-content">
......
<template>
<div class="full-height column flex-center items-center" style="height: 100vh;">
<el-empty :image-size="200" description="没有找到页面" />
</div>
</template>
\ No newline at end of file
<template>
<div v-if="isFinish" style="height: 100vh;background: rgb(243, 246, 251);">
<!-- <Screen v-if="screening" /> -->
<PreviewCustomSlider v-if="model==448963"></PreviewCustomSlider>
<Market v-else-if="(market&&model!=2&&!query().ViewSlideshow)||(market&&SalesEditor>0&&!query().ViewSlideshow)"></Market>
<Workspace v-else-if="model==2&&SalesEditor==0"/>
<Editor v-else-if="_isPC" />
<Mobile v-else />
</div>
<el-result v-if="loading" title="404" :sub-title="ShareTips">
<template #icon></template>
<template #extra></template>
</el-result>
</template>
<script lang="ts" setup>
import { ApiResult } from '@/configs/axios';
import { onMounted,ref,provide } from 'vue'
import { storeToRefs } from 'pinia'
import { useScreenStore, useMainStore, useSnapshotStore,
useFontStore, useSellTemplateStore, useSlidesStore } from '@/store'
import { LOCALSTORAGE_KEY_DISCARDED_DB } from '@/configs/storage'
import { deleteDiscardedDB } from '@/utils/database'
import { isPC, query } from '@/utils/common'
import { userStore } from '@/store/user'
import { injectKeyTemplate } from '@/types/injectKey'
import ConfigService from '@/services/ConfigService'
import { domainManager } from '@/utils/domainManager'
import { enterFullscreen, exitFullscreen, isFullscreen } from '@/utils/fullscreen'
import { VIEWPORT_SIZE, VIEWPORT_VER_SIZE } from '@/configs/canvas'
import Editor from './Editor/index.vue'
import Screen from './Screen/index.vue'
import Mobile from './Mobile/index.vue'
import Market from './Market/Index.vue'
import PreviewCustomSlider from './Preview/PreviewCustomSlider.vue'
import SellTemplate from './SellTemplate/index.vue'
import Workspace from './SellTemplate/Workspace.vue'
import { ElMessage, ElMessageBox } from 'element-plus'
const searchData = ref({} as any)
provide(injectKeyTemplate,searchData)
const autoSave = ref(0)
provide("SellTravelSave",autoSave)
const isFinish = ref(false)
const loading = ref(false)
const ShareTips = ref('')
const _isPC = isPC()
const mainStore = useMainStore()
const snapshotStore = useSnapshotStore()
const modelStore = useScreenStore()
const ConfigIdStore = useScreenStore()
const marketStore = useScreenStore()
const isModelStore = useScreenStore()
const TempIdStore = useScreenStore()
const ScreenStore = useScreenStore()
const SellTemplateStore = useSellTemplateStore()
const slidesStore = useSlidesStore()
const { databaseId } = storeToRefs(mainStore)
const { screening, market, model, ConfigId } = storeToRefs(useScreenStore())
const { userInfo } = storeToRefs(userStore())
const { SalesEditor, SalesTripId } = storeToRefs(useSellTemplateStore())
const { slides } = storeToRefs(useSlidesStore())
const { enterScreeningFromStart } = storeToRefs(useScreenStore())
const userLoginHandler = async ()=>{
let param = query()
let userId = 0
let ConfigId = 0 // 9117
let model = 0
let SalesTripId = ''
await useFontStore().loadAllFonts()
if(param.uid) userId=parseInt(param.uid)
if(param.ConfigId) ConfigId=parseInt(param.ConfigId)
if(param.model) model=parseInt(param.model)
if(param.SalesTripId) {
SalesTripId = param.SalesTripId
SellTemplateStore.setSalesTripId(SalesTripId)
try {
await sellShareTemplate()
} catch (error) {}
}
ConfigIdStore.setConfigId(ConfigId)
modelStore.setModel(model)
try {
if(param.uid) await userStore().setUserLoginAsync(userId)
if(ConfigId>0&&model!=2) await GetTripConfig(ConfigId)
} catch (error) {}
if(userId>0)isFinish.value=true
if(param.ViewSlideshow) {
searchData.value.ViewSlideshow = param.ViewSlideshow
try {
await sellHistoryTripTemplate(param.sellId,param.LogId)
} catch (error) {}
}
if(!ConfigId&&!model&&(param.SalesTripId&&param.SalesTripId=='')) ElMessageBox.confirm(
'当前没有权限进行任何操作,请联系管理员!',
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).then(() => {})
.catch(() => {})
}
// 销售历史版本模版数据
const sellHistoryTripTemplate = async (sellId:any,LogId:any) => {
const loadingObj = ElLoading.service({
text:'正在渲染数据',
lock:true
})
try {
let queryMsg
let dataRes
if(!LogId){
queryMsg = {
Id: sellId,
Status: searchData.value.ViewSlideshow==1?1:0
}
// 行程广告浏览记录
if(queryMsg.Status==0) await ConfigService.SetTripBrowse({FileId: sellId});
dataRes = await ConfigService.sellGetTemplateDetails(queryMsg);
}else{
queryMsg = {
LogId: LogId,
FileId: sellId,
}
dataRes = await ConfigService.GetHistoryInfo(queryMsg);
}
if (dataRes.data.resultCode==ApiResult.SUCCESS) {
loadingObj.close()
loading.value = false
isFinish.value=true
let dataObj = dataRes.data.data
let viewportRatios = 0
if(dataObj.TemplateType!=2) {
viewportRatios = 1.414
if(dataObj.TempType==1) viewportRatios = 0.7069
}
if(dataObj.TemplateType==2&&dataObj.Width&&dataObj.Height) {
viewportRatios = dataObj.Height/dataObj.Width
}
if(dataObj.Width&&dataObj.Height) {
VIEWPORT_SIZE.Value = dataObj.Height
VIEWPORT_VER_SIZE.Value = dataObj.Width
}else{
VIEWPORT_SIZE.Value = 1754
VIEWPORT_VER_SIZE.Value = 1240
}
slidesStore.setViewportRatio(viewportRatios)
let SlidesData = JSON.parse(dataObj.TempData)
let newSlides = []
await SlidesData.forEach((x,i)=>{
newSlides.push(x)
})
slidesStore.setSlides(newSlides)
ScreenStore.setScreening(true)
enterScreeningFromStart
slidesStore.updateSlideIndex(0)
}else{
loading.value = true
ShareTips.value = dataRes.data.message
loadingObj.close()
}
} catch (error) {
}
}
// 销售分享模版数据
const sellShareTemplate = async () =>{
const loadingObj = ElLoading.service({
text:'正在渲染数据',
lock:true
})
try {
let queryMsg = {
Code: SalesTripId.value
}
const slidesData = slides.value
let dataRes = await ConfigService.GetTripOtherByCode(queryMsg);
if (dataRes.data.resultCode==ApiResult.SUCCESS) {
loadingObj.close()
loading.value = false
isFinish.value=true
let dataObj = dataRes.data.data
let viewportRatios = 0
if(dataObj.TemplateType!=2) {
viewportRatios = 1.414
if(dataObj.TempType==1) viewportRatios = 0.7069
}
if(dataObj.TemplateType==2&&dataObj.Width&&dataObj.Height) {
viewportRatios = dataObj.Height/dataObj.Width
}
if(dataObj.Width&&dataObj.Height) {
VIEWPORT_SIZE.Value = dataObj.Height
VIEWPORT_VER_SIZE.Value = dataObj.Width
}else{
VIEWPORT_SIZE.Value = 1754
VIEWPORT_VER_SIZE.Value = 1240
}
slidesStore.setViewportRatio(viewportRatio)
let SlidesData = JSON.parse(dataObj.TempData)
let newSlides = []
await SlidesData.forEach((x,i)=>{
newSlides.push(x)
})
slidesStore.setSlides(newSlides)
slidesStore.updateSlideIndex(0)
ScreenStore.setScreening(true)
enterScreeningFromStart
}else{
loading.value = true
ShareTips.value = dataRes.data.message
loadingObj.close()
}
} catch (error) {
loading.value = true
ShareTips.value = error
loadingObj.close()
}
}
/**
* 根据团期配置编号获取行程详情
*/
const GetTripConfig = async (ConfigId) =>{
try {
let queryMsg = {
ConfigId: ConfigId
}
let datasRes = await ConfigService.triptemplateGetTripConfig(queryMsg);
if (datasRes.data.resultCode==ApiResult.SUCCESS && datasRes.data.data) {
let dataObj = datasRes.data.data
if(dataObj.TempId==0){
return window.parent.postMessage(`暂无行程数据`, `${domainManager().notificationUrl}`);
}
isModelStore.setIsModel(true)
marketStore.setMarket(!market)
TempIdStore.setTempId(dataObj.TempId)
}
} catch (error) {
}
}
userLoginHandler()
</script>
<style lang="scss">
#app {
height: 100%;
}
.el-overlay{
}
</style>
\ No newline at end of file
<template>
<div style="height: 100vh;background: rgb(243, 246, 251);">
<Workspace />
</div>
</template>
<script lang="ts" setup>
import Workspace from './SellTemplate/Workspace.vue';
</script>
<style lang="scss">
</style>
\ No newline at end of file
This diff is collapsed.
......@@ -17,35 +17,6 @@
</el-icon>
</div>
</div>
<div>
<!--
<el-dropdown v-if="datas.selectedDatas.length>0" trigger="click" class="q-px-md">
<el-button>
<el-icon><CopyDocument /></el-icon>
<span class="">批量操作</span>
</el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item icon="Expand" @click="MoveFile(0)">移动至</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
<el-dropdown trigger="click">
<el-button>新建</el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item
@click="sellAdd(1)"
>新建行程</el-dropdown-item
>
<el-dropdown-item
@click="sellAdd(3)"
>建广告图</el-dropdown-item
>
</el-dropdown-menu>
</template>
</el-dropdown> -->
</div>
</div>
<div class="col full-width q-ml-md">
<journeyAdsList
......@@ -61,39 +32,20 @@
</template>
<script setup lang="ts">
import { ApiResult } from '@/configs/axios';
import { ref, reactive, provide, watch, inject, onMounted } from "vue";
import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
import { MoreFilled, Edit, ArrowLeft,CopyDocument,DCaret,CaretTop,CaretBottom } from "@element-plus/icons-vue";
import { ref, reactive, inject, onMounted } from "vue";
import { ElMessage } from "element-plus";
import ConfigService from "@/services/ConfigService";
import FolderService from "@/services/FolderService";
import { injectKeyTemplate } from "@/types/injectKey";
import { } from "@/utils/common";
import { useSellTemplateStore, useScreenStore } from "@/store";
import TreeFile from "./components/TreeFile.vue";
import breadPeeling from "./components/breadPeeling.vue";
import journeyAdsList from "./components/journeyAdsList.vue";
const SalesEditorStore = useSellTemplateStore();
const marketStore = useScreenStore();
const props = defineProps({
currentMenu: {
type: Number,
default: 3,
},
});
const PopoverVisibleControls = ref(false);
const isIndeterminate = ref(false);
const dataList = ref([] as Array<any>);
const NewDataList = ref([] as Array<any>);
const searchData = ref({} as any);
searchData.value = inject(injectKeyTemplate);
const deleteLoading = ref<any>(null);
const removeShareLoading = ref<any>(null);
searchData.value = inject(injectKeyTemplate)
const RefreshLoading = ref(false)
const currentRootDom = ref()
const datas = reactive({
selectedDatas: [] as Array,
selectedDatas: [] as any[],
selectAll: false as any,
setFileList: [] as any,
});
......@@ -104,26 +56,15 @@
pageCount: 0, //总页数
FileType: 0,
OrderByType: 2,//1 升序 2倒序
});
const editObj = reactive({});
const loading = ref(false as any);
const SellTemplateRef = ref<any>();
})
const loading = ref(false as any)
const UpdateData = (obj:any) =>{
dataList.value = obj.list
}
const success = () => {
datas.selectAll = false;
datas.selectedDatas = [];
refreshHandler()
}
const sellAdd = (type:number) =>{
searchData.value.sellId = 0
searchData.value.sellTempId = 0
SalesEditorStore.setSalesEditor(type)
marketStore.setMarket(true)
}
// 移动到文件夹
const MoveFile = (item:any) => {
datas.setFileList = []
......@@ -143,20 +84,6 @@
isTreeFile.value = true
}
// 重命名
const OffEdit = () => {
for (let i = 0; i < dataList.value.length; i++) {
dataList.value[i].editTitle = false;
if (
editObj.value &&
editObj.value.FileId &&
dataList.value[i].FileId == editObj.value.FileId
) {
dataList.value[i].FileName = editObj.value.FileName;
}
}
};
const querySearchHandler = async () => {
loading.value = true;
try {
......@@ -186,20 +113,6 @@
RefreshLoading.value = false;
}
};
const scrollingHandler = () => {
if (SellTemplateRef.value && !loading.value) {
let maxHeight =
SellTemplateRef.value.scrollHeight - SellTemplateRef.value.offsetHeight;
let scrollTop = SellTemplateRef.value.scrollTop;
if (
(maxHeight - scrollTop == 0 || maxHeight - scrollTop < 1) &&
queryObj.pageCount > queryObj.pageIndex
) {
queryObj.pageIndex++;
querySearchHandler();
}
}
};
const refreshHandler = (obj:any) => {
currentRootDom.value.click()
if(obj){
......@@ -214,18 +127,6 @@
querySearchHandler();
};
watch(
() => searchData.value.SellTemplateType,
(n, o) => {
return
isIndeterminate.value = false;
datas.selectAll = false;
datas.selectedDatas = [];
refreshHandler();
}
);
onMounted(() => {});
querySearchHandler();
......
......@@ -50,20 +50,14 @@
</template>
<script setup lang="ts">
import { ref, reactive, provide, watch, inject, onMounted, PropType } from "vue";
import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
import { MoreFilled, Edit, ArrowLeft,CopyDocument,DCaret,CaretTop,CaretBottom,Position } from "@element-plus/icons-vue";
import ConfigService from "@/services/ConfigService";
import { ref, reactive, watch, onMounted, PropType } from "vue";
import { ElMessage } from "element-plus";
import { ArrowLeft } from "@element-plus/icons-vue";
import FolderService from "@/services/FolderService";
import { injectKeyTemplate } from "@/types/injectKey";
import { formatDateTimeToRead } from "@/utils/common";
import { useSellTemplateStore, useScreenStore, useSlidesStore } from "@/store";
import { ApiResult } from "@/configs/axios";
import journeyAdsList from "./components/journeyAdsList.vue";
import breadPeeling from "./components/breadPeeling.vue";
const SalesEditorStore = useSellTemplateStore();
const marketStore = useScreenStore();
const props = defineProps({
currentMenu: {
type: Number,
......@@ -75,14 +69,9 @@
}
});
const PopoverVisibleControls = ref(false);
const journeyAdsDetails = ref('');
const isTreeFile = ref(false)
const Navigations = ref([] as Array<any>);
const dataList = ref([] as Array<any>);
const NewDataList = ref([] as Array<any>);
const searchData = ref({} as any);
searchData.value = inject(injectKeyTemplate);
const RefreshLoading = ref(false)
const currentRootDom = ref()
const datas = reactive({
......@@ -96,10 +85,7 @@
name: string;
parentId: number;
type: number;
}>({ id: -1, name: "", parentId: 0, number: 1 });
let TemplateType = 0;
if (searchData.value.SellTemplateType)
TemplateType = searchData.value.SellTemplateType;
}>({ id: -1, name: "", parentId: 0, number: 1 })
const emit = defineEmits<{
(event: 'destroy-position'): void
}>()
......@@ -113,7 +99,6 @@
});
const loading = ref(false as any);
const SellTemplateRef = ref<any>();
// 已选数据
const UpdateData = (obj:any) =>{
......@@ -179,20 +164,6 @@
RefreshLoading.value = false;
}
};
const scrollingHandler = () => {
if (SellTemplateRef.value && !loading.value) {
let maxHeight =
SellTemplateRef.value.scrollHeight - SellTemplateRef.value.offsetHeight;
let scrollTop = SellTemplateRef.value.scrollTop;
if (
(maxHeight - scrollTop == 0 || maxHeight - scrollTop < 1) &&
queryObj.pageCount > queryObj.pageIndex
) {
queryObj.pageIndex++;
querySearchHandler();
}
}
};
const refreshHandler = (obj:any) => {
currentRootDom.value.click()
if(obj){
......@@ -208,12 +179,6 @@
queryObj.pageIndex = obj&&obj.pageIndex?obj.pageIndex:1;
querySearchHandler();
};
const operaFolder = (id: number, name: string) => {
folderObj.value.id = id;
folderObj.value.name = name;
folderObj.value.type = queryObj.FileType;
folderObj.value.parentId = queryObj.FileId
};
const checkPositionHandler = (n:any)=>{
if(n){
if(n.Position && n.Position.length>0){
......@@ -229,16 +194,6 @@
}
}
watch(
() => searchData.value.SellTemplateType,
(n, o) => {
datas.selectedDatas = [];
queryObj.FileType = n;
queryObj.FileId = 0;
refreshHandler();
}
);
watch(() => queryObj.FileId,(n, o) => {
if(!n) Navigations.value = []
}
......
This diff is collapsed.
......@@ -88,24 +88,17 @@
</template>
<script setup lang="ts">
import { ref, reactive, provide, watch, inject, onMounted, PropType } from "vue";
import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
import { MoreFilled, Edit, ArrowLeft,CopyDocument,DCaret,CaretTop,CaretBottom } from "@element-plus/icons-vue";
import ConfigService from "@/services/ConfigService";
import { ref, reactive, watch, inject, onMounted, PropType } from "vue";
import { ElMessage } from "element-plus";
import { ArrowLeft} from "@element-plus/icons-vue";
import FolderService from "@/services/FolderService";
import { injectKeyTemplate } from "@/types/injectKey";
import { formatDateTimeToRead } from "@/utils/common";
import { useSellTemplateStore, useScreenStore, useSlidesStore } from "@/store";
import ShareForm from "./components/ShareForm.vue";
import Folder from "./components/Folder.vue";
import HistoricalVersion from "./components/HistoricalVersion.vue";
import TreeFile from "./components/TreeFile.vue";
import breadPeeling from "./components/breadPeeling.vue";
import { ApiResult } from "@/configs/axios";
import journeyAdsList from "./components/journeyAdsList.vue";
const SalesEditorStore = useSellTemplateStore();
const marketStore = useScreenStore();
const props = defineProps({
currentMenu: {
type: Number,
......@@ -117,12 +110,10 @@
}
});
const PopoverVisibleControls = ref(false);
const journeyAdsDetails = ref('');
const isTreeFile = ref(false)
const Navigations = ref([] as Array<any>);
const dataList = ref([] as Array<any>);
const NewDataList = ref([] as Array<any>);
const searchData = ref({} as any);
searchData.value = inject(injectKeyTemplate);
const RefreshLoading = ref(false)
......@@ -139,12 +130,7 @@
parentId: number;
type: number;
}>({ id: -1, name: "", parentId: 0, number: 1 });
let TemplateType = 0;
if (searchData.value.SellTemplateType)
TemplateType = searchData.value.SellTemplateType;
const emit = defineEmits<{
(event: 'destroy-position'): void
}>()
const queryObj = reactive({
pageIndex: 1,
pageSize: 50,
......@@ -191,31 +177,6 @@
queryObj.FileId = FileId
refreshHandler()
}
const sellAdd = (type:number) =>{
searchData.value.sellId = 0
searchData.value.sellTempId = 0
SalesEditorStore.setSalesEditor(type)
marketStore.setMarket(true)
}
// 移动到文件夹
const MoveFile = () => {
datas.setFileList = []
for(let i=0;i<dataList.value.length;i++){
for(let j=0;j<datas.selectedDatas.length;j++){
if(dataList.value[i].FileId==datas.selectedDatas[j]){
datas.setFileList.push(
{
FileId: dataList.value[i].FileId,
FileType: dataList.value[i].FileType,
ParentFileId: dataList.value[i].ParentFileId
}
)
}
}
}
isTreeFile.value = true
}
const querySearchHandler = async () => {
if(loading.value) return
......@@ -247,20 +208,7 @@
RefreshLoading.value = false;
}
};
const scrollingHandler = () => {
if (SellTemplateRef.value && !loading.value) {
let maxHeight =
SellTemplateRef.value.scrollHeight - SellTemplateRef.value.offsetHeight;
let scrollTop = SellTemplateRef.value.scrollTop;
if (
(maxHeight - scrollTop == 0 || maxHeight - scrollTop < 1) &&
queryObj.pageCount > queryObj.pageIndex
) {
queryObj.pageIndex++;
querySearchHandler();
}
}
};
const refreshHandler = (obj:any) => {
currentRootDom.value.click()
if(obj){
......@@ -276,12 +224,7 @@
queryObj.pageIndex = obj&&obj.pageIndex?obj.pageIndex:1;
querySearchHandler();
};
const operaFolder = (id: number, name: string) => {
folderObj.value.id = id;
folderObj.value.name = name;
folderObj.value.type = queryObj.FileType;
folderObj.value.parentId = queryObj.FileId
};
const checkPositionHandler = (n:any)=>{
if(n){
if(n.Position && n.Position.length>0){
......@@ -297,16 +240,6 @@
}
}
watch(
() => searchData.value.SellTemplateType,
(n, o) => {
datas.selectedDatas = [];
queryObj.FileType = n;
queryObj.FileId = 0;
refreshHandler();
}
);
watch(() => queryObj.FileId,(n, o) => {
if(!n) Navigations.value = []
}
......
<template>
<div class="workspace column">
<div class="workspace column" >
<div class="row q-pa-md items-center" style="padding-bottom: 15px;">
<img src="https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1708239425000_437.png" style="height: 30px;" />
<div class="col text-center">
......@@ -26,7 +26,7 @@
</div>
</el-tooltip>
<el-tooltip effect="dark" content="模板广场" placement="right">
<div class="left-button q-mt-md" @click="searchData.TemplateType=0,sellAdd(99)">
<div class="left-button q-mt-md" @click="openMarketHandler()">
<span class="svg-icon svg-icon-primary svg-icon-2x">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="24px" height="24px" viewBox="0 0 24 24" version="1.1">
<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
......@@ -54,8 +54,8 @@
</el-button>
<template #dropdown>
<el-dropdown-menu>
<el-dropdown-item @click="searchData.TemplateType=1,sellAdd(1)">创建行程</el-dropdown-item>
<el-dropdown-item @click="searchData.TemplateType=2,sellAdd(3)">创建广告图</el-dropdown-item>
<el-dropdown-item @click="openMarketHandler('/trip')">创建行程</el-dropdown-item>
<el-dropdown-item @click="openMarketHandler('/ad')">创建广告图</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
......@@ -96,39 +96,30 @@ import StarTarget from './StarTarget.vue'
import ShareList from './Share.vue';
import journeyAds from './journeyAds.vue'
import RecycleBin from './RecycleBin.vue'
import { Plus,ArrowDown,Clock,Star,Share,Picture,Management,Delete,RefreshRight,Refresh,Loading } from '@element-plus/icons-vue';
import { injectKeyTemplate } from '@/types/injectKey'
import { Plus,ArrowDown,Clock,Star,Share,Picture,Management,Delete } from '@element-plus/icons-vue';
import { useSellTemplateStore, useScreenStore, useSlidesStore } from '@/store'
import { useRouter } from 'vue-router';
import { openNewBlank } from '@/utils/common';
const router = useRouter();
const {userInfo} = storeToRefs(userStore())
const currentMenu = ref<number>(0)
const position = ref<{FileId:number,FileType:1|2,Position:{FileId:number,FileName:string}[]}|null>(null)
const searchData = ref({} as any)
searchData.value = inject(injectKeyTemplate)
if(searchData.value.SellTemplateType){
let current = 0
if(searchData.value.SellTemplateType==1) current = 3
if(searchData.value.SellTemplateType==2) current = 4
currentMenu.value = current
}else if(searchData.value.currentMenu!=undefined)currentMenu.value = searchData.value.currentMenu
const SalesEditorStore = useSellTemplateStore()
const marketStore = useScreenStore()
if(router.currentRoute.value.query && router.currentRoute.value.query.current){
currentMenu.value = parseInt(router.currentRoute.value.query.current.toString())
}
const sellAdd = (type:number) =>{
searchData.value.sellId = 0
searchData.value.sellTempId = 0
SalesEditorStore.setSalesEditor(type)
marketStore.setMarket(true)
const openMarketHandler = (type:string='') =>{
openNewBlank(`/market/create${type}`)
}
const openFilePosition = (playload:any)=>{
position.value=playload
if(!playload.FormShare){
currentMenu.value = playload.FileType==1?3:4
searchData.value.currentMenu=currentMenu.value
searchData.value.SellTemplateType = playload.FileType
// searchData.value.currentMenu=currentMenu.value
// searchData.value.SellTemplateType = playload.FileType
}
else currentMenu.value = 2
......@@ -136,11 +127,8 @@ const openFilePosition = (playload:any)=>{
const setCurrentMenuHandler=(i:number)=>{
currentMenu.value=i
searchData.value.currentMenu=i
let TemplateType = 0
if(i==3) TemplateType = 1
if(i==4) TemplateType = 2
searchData.value.SellTemplateType = TemplateType
//searchData.value.currentMenu=i
//searchData.value.SellTemplateType = TemplateType
}
</script>
<style scoped>
......
......@@ -34,8 +34,7 @@
<th class="text-light">版本名称</th>
<th class="text-light text-center" style="min-width: 120px;width: 120px;">操作</th>
</tr>
<template v-for="(item,index) in dataList">
<tr class="HistoricalVersion-table pointer">
<tr class="HistoricalVersion-table pointer" v-for="(item,index) in dataList">
<td class="text-light text-5B5D62">
<span class="text-bold">{{item.UpdateTime.substr(0,11)}}</span>
<span class="q-pl-md q-pt-sm">{{item.UpdateTime.substr(11,19)}}</span>
......@@ -54,7 +53,7 @@
<el-dropdown class="q-pl-md" trigger="click">
<el-icon size="16" color="#b1b7cf"><MoreFilled /></el-icon>
<template #dropdown>
<el-dropdown-menu class="q-pa-md" @click.stop="OffEdit">
<el-dropdown-menu class="q-pa-md">
<el-dropdown-item icon="Promotion" @click.stop="clickControls(item,1)">另存</el-dropdown-item>
<el-dropdown-item v-if="item.LogId!=0" icon="Switch" @click.stop="clickControls(item,2)">替换</el-dropdown-item>
</el-dropdown-menu>
......@@ -63,7 +62,6 @@
</span>
</td>
</tr>
</template>
</table>
<div v-if="dataList.length == 0 && !loading" class="bg-white rounded col"
style="padding: 40px 10px;">
......@@ -91,13 +89,10 @@
</template>
<script setup lang="ts">
import { ApiResult } from '@/configs/axios';
import OrgService from '@/services/OrgService';
import { ref,reactive,provide } from 'vue';
import { View,Download,EditPen,Delete } from '@element-plus/icons-vue';
import { ElMessage } from 'element-plus';
import { ref,reactive } from 'vue';
import { ElLoading, ElMessage, ElMessageBox } from 'element-plus';
import ConfigService from '@/services/ConfigService';
import { isPC, query } from '@/utils/common'
import { injectKeyTemplate } from '@/types/injectKey'
import { query } from '@/utils/common'
import CopyFile from "./CopyFile.vue";
const props = defineProps({
......@@ -107,7 +102,7 @@ import CopyFile from "./CopyFile.vue";
},
details: {
type:Object,
required:{}
required:true
}
})
const emit = defineEmits<{
......@@ -119,13 +114,9 @@ import CopyFile from "./CopyFile.vue";
pdfImg: 'https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1708337830000_43.png',
adsImg: 'https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1708250377000_777.png',
})
const searchData = ref({} as any)
provide(injectKeyTemplate,searchData)
const show=ref(true)
const loading = ref(true)
const loading = ref(false)
const HistoricalVersion = ref<any>()
const copyDataList = ref([] as Array<any>);
const deleteLoading = ref<any>(null);
const queryObj = reactive({
pageIndex: 1,
......@@ -133,11 +124,11 @@ import CopyFile from "./CopyFile.vue";
pageCount: 0, //总页数
FileId: props.details.FileId,
})
const journeyAdsDetails = ref('');
const journeyAdsDetails = ref<any>('');
const isCopyTo = ref(false);
const dataList=ref([])
const dataList=ref<any[]>([])
const clickControls = (row:any,type:any) => {
const clickControls = (row:any,type:any=0) => {
if(type){
journeyAdsDetails.value = row
if(type==1){
......@@ -194,32 +185,29 @@ import CopyFile from "./CopyFile.vue";
}
deleteLoading.value.close();
deleteLoading.value = null;
};
}
const closedhandler=()=>{
emit('close')
}
const querySearchHandler = async () => {
if(loading.value) return
loading.value = true
try {
if(queryObj.pageIndex == 1) dataList.value =[]
let pageRes = await ConfigService.GetFileHistory(queryObj);
if (pageRes.data.resultCode==ApiResult.SUCCESS) {
let arrList = function (list) {
list.forEach((x) => {
pageRes.data.data.pageData.forEach((x:any) => {
x.NewTitle = ''
});
};
arrList(pageRes.data.data.pageData);
dataList.value = dataList.value.concat(pageRes.data.data.pageData);
})
dataList.value = dataList.value.concat(pageRes.data.data.pageData)
queryObj.pageCount = pageRes.data.data.pageCount;
}
loading.value = false
} catch (error) {
ElMessage.error({
message:'数据加载异常,请刷新页面'
})
loading.value = false
}
loading.value = false
}
const scrollingHandler = () =>{
if(HistoricalVersion.value && !loading.value){
......@@ -230,14 +218,13 @@ import CopyFile from "./CopyFile.vue";
querySearchHandler()
}
}
}
const refreshHandler = () => {
queryObj.pageIndex = 1;
querySearchHandler();
emit('refreshHandler')
};
}
querySearchHandler()
</script>
......
......@@ -191,7 +191,7 @@ import { ElMessage,ElTree,ElLoading, ElMessageBox } from 'element-plus';
import ConfigService from "@/services/ConfigService";
import FolderService from "@/services/FolderService";
import { injectKeyTemplate } from "@/types/injectKey";
import { formatDateTimeToRead } from "@/utils/common";
import { createSaleEditorLink, formatDateTimeToRead } from "@/utils/common";
import { useSellTemplateStore, useScreenStore, useSlidesStore } from "@/store";
import { isPC, query } from '@/utils/common'
......@@ -202,6 +202,7 @@ import TreeFile from "./TreeFile.vue";
import TreeFileRecover from "./TreeFileRecover.vue";
import breadPeeling from "./breadPeeling.vue";
import CopyFile from "./CopyFile.vue";
import { useRouter } from 'vue-router';
const props = defineProps({
currentMenu:{
......@@ -258,7 +259,7 @@ import CopyFile from "./CopyFile.vue";
const marketStore = useScreenStore();
const { userInfo } = storeToRefs(userStore())
datas.loggedder = userInfo.value.emName
const router = useRouter()
const dataList = ref([] as Array<any>);
dataList.value = props.list
const queryObj = ref({} as any);
......@@ -378,32 +379,32 @@ import CopyFile from "./CopyFile.vue";
journeyAdsDetails.value = row
isTreeFileRecover.value = true
return
try {
let queryMsg = {
Ids: row.FileId
}
deleteLoading.value = ElLoading.service({
lock: true,
text: "正在处理",
});
let dataRes = await FolderService.UpdateTripOtherStatus(queryMsg);
deleteLoading.value.close();
deleteLoading.value = null;
if (dataRes.data.resultCode == ApiResult.SUCCESS) {
ElMessage({
showClose: true,
message: `恢复${row.FileName}成功`,
type: "success",
});
emit('refreshHandler')
}else{
ElMessage({
showClose: true,
message: `恢复${row.FileName}失败`,
type: "warning",
});
}
} catch (error) {}
// try {
// let queryMsg = {
// Ids: row.FileId
// }
// deleteLoading.value = ElLoading.service({
// lock: true,
// text: "正在处理",
// });
// let dataRes = await FolderService.UpdateTripOtherStatus(queryMsg);
// deleteLoading.value.close();
// deleteLoading.value = null;
// if (dataRes.data.resultCode == ApiResult.SUCCESS) {
// ElMessage({
// showClose: true,
// message: `恢复${row.FileName}成功`,
// type: "success",
// });
// emit('refreshHandler')
// }else{
// ElMessage({
// showClose: true,
// message: `恢复${row.FileName}失败`,
// type: "warning",
// });
// }
// } catch (error) {}
}
// 收藏文件
......@@ -608,30 +609,13 @@ import CopyFile from "./CopyFile.vue";
else DeleteFile(row);
} else {
if (row.FileType) {
let list = [
{
id: "test-slide-1",
pageType: 0,
elements: [],
background: {
type: "solid",
color: "#ffffff",
},
},
];
useSlidesStore().setSlides(list);
searchData.value.sellId = row.FileId;
searchData.value.sellTempId = row.TempId;
searchData.value.TemplateType = row.FileType;
if(props.currentMenu==0&&datas.loggedder!=row.CreateName){
searchData.value.ParentFileId = 0
if(row.IsDownLoad==0) searchData.value.noExportPermission = true
else searchData.value.noExportPermission = false
if(row.IsView==0) searchData.value.noCopyPermission = true
else searchData.value.noCopyPermission = false
}else searchData.value.ParentFileId = row.ParentFileId;
SalesEditorStore.setSalesEditor(2);
marketStore.setMarket(false);
const cp =userInfo.value.emName!=row.CreateName&&row.IsView==0?0:1
const ep =userInfo.value.emName!=row.CreateName&&row.IsDownLoad==0?0:1
//@TODO:返回字段中缺少CreateBy,
const url = createSaleEditorLink(row.FileId,row.TempId,row.FileType,row.ParentFileId,ep,cp)
router.push({
path:url
})
} else {
// 2文件夹详情
if (type == 2) {
......
......@@ -49,12 +49,12 @@
>新建文件夹</el-dropdown-item
>
<el-dropdown-item
@click="(searchData.TemplateType = 1), sellAdd(1)"
@click="openMarketHandler('/trip')"
v-if="currentMenu == 3"
>新建行程</el-dropdown-item
>
<el-dropdown-item
@click="(searchData.TemplateType = 2), sellAdd(3)"
@click="openMarketHandler('/ad')"
v-if="currentMenu == 4"
>新建广告图</el-dropdown-item
>
......@@ -63,13 +63,6 @@
</el-dropdown>
</div>
</div>
<!--
<div
ref="SellTemplateRef"
class="journeyAds-container" v-if="false">
<el-scrollbar @scroll="scrollingHandler" class="q-px-md" style="height: 100%;">
</el-scrollbar>
</div> -->
<div class="col full-width q-ml-md">
<journeyAdsList
:current-menu="currentMenu"
......@@ -106,21 +99,18 @@
</template>
<script setup lang="ts">
import { ref, reactive, provide, watch, inject, onMounted, PropType } from "vue";
import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
import { MoreFilled, Edit, ArrowLeft,CopyDocument,DCaret,CaretTop,CaretBottom } from "@element-plus/icons-vue";
import ConfigService from "@/services/ConfigService";
import { ref, reactive, watch, inject, onMounted, PropType } from "vue";
import { ElMessage } from "element-plus";
import { ArrowLeft,CopyDocument } from "@element-plus/icons-vue";
import FolderService from "@/services/FolderService";
import { injectKeyTemplate } from "@/types/injectKey";
import { formatDateTimeToRead } from "@/utils/common";
import { useSellTemplateStore, useScreenStore, useSlidesStore } from "@/store";
import ShareForm from "./components/ShareForm.vue";
import { useSellTemplateStore, useScreenStore } from "@/store";
import Folder from "./components/Folder.vue";
import HistoricalVersion from "./components/HistoricalVersion.vue";
import TreeFile from "./components/TreeFile.vue";
import breadPeeling from "./components/breadPeeling.vue";
import { ApiResult } from "@/configs/axios";
import journeyAdsList from "./components/journeyAdsList.vue";
import { openNewBlank } from "@/utils/common";
const SalesEditorStore = useSellTemplateStore();
const marketStore = useScreenStore();
......@@ -135,12 +125,10 @@ const props = defineProps({
}
});
const PopoverVisibleControls = ref(false);
const journeyAdsDetails = ref('');
const isTreeFile = ref(false)
const Navigations = ref([] as Array<any>);
const dataList = ref([] as Array<any>);
const NewDataList = ref([] as Array<any>);
const searchData = ref({} as any);
searchData.value = inject(injectKeyTemplate);
const RefreshLoading = ref(false)
......@@ -157,9 +145,7 @@ const folderObj = ref<{
parentId: number;
type: number;
}>({ id: -1, name: "", parentId: 0, number: 1 });
let TemplateType = 0;
if (searchData.value.SellTemplateType)
TemplateType = searchData.value.SellTemplateType;
const emit = defineEmits<{
(event: 'destroy-position'): void
}>()
......@@ -167,7 +153,7 @@ const queryObj = reactive({
pageIndex: 1,
pageSize: 50,
pageCount: 0, //总页数
FileType: TemplateType,
FileType: props.currentMenu==3?1:2,
FileId: 0,
OrderByType: 2,//1 升序 2倒序
});
......@@ -207,11 +193,9 @@ const breadPeelingInquire = (FileId:number,index:number)=> {
queryObj.FileId = FileId
refreshHandler()
}
const sellAdd = (type:number) =>{
searchData.value.sellId = 0
searchData.value.sellTempId = 0
SalesEditorStore.setSalesEditor(type)
marketStore.setMarket(true)
const openMarketHandler = (type:string='') =>{
openNewBlank(`/market/create${type}`)
}
// 移动到文件夹
......@@ -266,20 +250,7 @@ const querySearchHandler = async () => {
RefreshLoading.value = false;
}
};
const scrollingHandler = () => {
if (SellTemplateRef.value && !loading.value) {
let maxHeight =
SellTemplateRef.value.scrollHeight - SellTemplateRef.value.offsetHeight;
let scrollTop = SellTemplateRef.value.scrollTop;
if (
(maxHeight - scrollTop == 0 || maxHeight - scrollTop < 1) &&
queryObj.pageCount > queryObj.pageIndex
) {
queryObj.pageIndex++;
querySearchHandler();
}
}
};
const refreshHandler = (obj:any) => {
currentRootDom.value.click()
if(obj){
......@@ -316,10 +287,10 @@ const checkPositionHandler = (n:any)=>{
}
watch(
() => searchData.value.SellTemplateType,
() => props.currentMenu,
(n, o) => {
datas.selectedDatas = [];
queryObj.FileType = n;
queryObj.FileType = n==3?1:2;
queryObj.FileId = 0;
refreshHandler();
}
......
......@@ -6,8 +6,9 @@ const Components = require('unplugin-vue-components/webpack')
const { ElementPlusResolver } = require('unplugin-vue-components/resolvers')
module.exports = {
publicPath: './',
publicPath: process.env.NODE_ENV === 'production' ? './' : '/',
lintOnSave: false,
css: {
loaderOptions: {
sass: {
......@@ -19,6 +20,9 @@ module.exports = {
},
},
configureWebpack: {
devServer:{
historyApiFallback:true
},
plugins: [
// new StyleLintPlugin({
// files: ['src/**/*.{vue,html,css,scss}'],
......
This diff is collapsed.
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