Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
pptist
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
viitto
pptist
Commits
3c4c15c8
Commit
3c4c15c8
authored
Nov 23, 2023
by
zhengke
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
no message
parent
7750e3ba
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
322 additions
and
168 deletions
+322
-168
App.vue
src/App.vue
+20
-11
ConfigService.ts
src/services/ConfigService.ts
+14
-0
screen.ts
src/store/screen.ts
+14
-2
index.vue
src/views/Editor/DataaSource/index.vue
+9
-12
index.vue
src/views/Editor/EditorHeader/index.vue
+47
-12
index.vue
src/views/Editor/Thumbnails/index.vue
+157
-74
ElementTemplateData.vue
src/views/Editor/Toolbar/ElementTemplateData.vue
+28
-28
index.vue
src/views/Editor/index.vue
+4
-18
Index.vue
src/views/Market/Index.vue
+29
-11
No files found.
src/App.vue
View file @
3c4c15c8
...
@@ -26,10 +26,30 @@ const searchData = ref({} as any)
...
@@ -26,10 +26,30 @@ const searchData = ref({} as any)
provide
(
injectKeyTemplate
,
searchData
)
provide
(
injectKeyTemplate
,
searchData
)
const
isFinish
=
ref
(
false
)
const
isFinish
=
ref
(
false
)
const
_isPC
=
isPC
()
const
mainStore
=
useMainStore
()
const
snapshotStore
=
useSnapshotStore
()
const
modelStore
=
useScreenStore
()
const
ConfigIdStore
=
useScreenStore
()
const
{
databaseId
}
=
storeToRefs
(
mainStore
)
const
{
screening
,
market
,
model
,
ConfigId
}
=
storeToRefs
(
useScreenStore
())
if
(
process
.
env
.
NODE_ENV
===
'production'
)
{
window
.
onbeforeunload
=
()
=>
false
}
const
userLoginHandler
=
async
()
=>
{
const
userLoginHandler
=
async
()
=>
{
let
param
=
query
()
let
param
=
query
()
let
userId
=
1
let
userId
=
1
let
ConfigId
=
9117
let
model
=
1
if
(
param
.
uid
)
userId
=
parseInt
(
param
.
uid
)
if
(
param
.
uid
)
userId
=
parseInt
(
param
.
uid
)
if
(
ConfigId
)
ConfigIdStore
.
setMarket
(
ConfigId
)
if
(
model
)
modelStore
.
setModel
(
model
)
try
{
try
{
await
userStore
().
setUserLoginAsync
(
userId
)
await
userStore
().
setUserLoginAsync
(
userId
)
}
catch
(
error
)
{
}
catch
(
error
)
{
...
@@ -39,17 +59,6 @@ const userLoginHandler = async ()=>{
...
@@ -39,17 +59,6 @@ const userLoginHandler = async ()=>{
}
}
userLoginHandler
()
userLoginHandler
()
const
_isPC
=
isPC
()
const
mainStore
=
useMainStore
()
const
snapshotStore
=
useSnapshotStore
()
const
{
databaseId
}
=
storeToRefs
(
mainStore
)
const
{
screening
,
market
}
=
storeToRefs
(
useScreenStore
())
if
(
process
.
env
.
NODE_ENV
===
'production'
)
{
window
.
onbeforeunload
=
()
=>
false
}
onMounted
(
async
()
=>
{
onMounted
(
async
()
=>
{
await
deleteDiscardedDB
()
await
deleteDiscardedDB
()
snapshotStore
.
initSnapshotDatabase
()
snapshotStore
.
initSnapshotDatabase
()
...
...
src/services/ConfigService.ts
View file @
3c4c15c8
...
@@ -4,6 +4,13 @@ import Api,{ HttpResponse, Result } from './../utils/request';
...
@@ -4,6 +4,13 @@ import Api,{ HttpResponse, Result } from './../utils/request';
* 配置相关方法
* 配置相关方法
*/
*/
class
ConfigService
{
class
ConfigService
{
/**
* 根据ConfigId获取行程配置相关数据
*/
static
async
triptemplateGetTripFiledData
(
params
:
any
):
Promise
<
HttpResponse
>
{
return
Api
.
Post
(
"triptemplate_GetTripFiledData"
,
params
)
}
/**
/**
* 根据团期配置编号获取行程详情
* 根据团期配置编号获取行程详情
*/
*/
...
@@ -14,6 +21,13 @@ class ConfigService{
...
@@ -14,6 +21,13 @@ class ConfigService{
/**
/**
* 新增修改模版数据
* 新增修改模版数据
*/
*/
static
async
SetSetTripConfig
(
params
:
any
):
Promise
<
HttpResponse
>
{
return
Api
.
Post
(
"triptemplate_SetTripConfig"
,
params
)
}
/**
* 新增修改模版
*/
static
async
SetTripTemplateSlide
(
params
:
any
):
Promise
<
HttpResponse
>
{
static
async
SetTripTemplateSlide
(
params
:
any
):
Promise
<
HttpResponse
>
{
return
Api
.
Post
(
"triptemplate_SetTripTemplate"
,
params
)
return
Api
.
Post
(
"triptemplate_SetTripTemplate"
,
params
)
}
}
...
...
src/store/screen.ts
View file @
3c4c15c8
import
{
fa
}
from
'element-plus/es/locale'
import
{
defineStore
}
from
'pinia'
import
{
defineStore
}
from
'pinia'
export
interface
ScreenState
{
export
interface
ScreenState
{
screening
:
boolean
,
screening
:
boolean
,
market
:
boolean
market
:
boolean
,
model
:
number
,
ConfigId
:
number
}
}
export
const
useScreenStore
=
defineStore
(
'screen'
,
{
export
const
useScreenStore
=
defineStore
(
'screen'
,
{
state
:
():
ScreenState
=>
({
state
:
():
ScreenState
=>
({
screening
:
false
,
// 是否进入放映状态
screening
:
false
,
// 是否进入放映状态
market
:
true
market
:
true
,
model
:
0
,
//是否有新增模版权限
ConfigId
:
0
,
}),
}),
actions
:
{
actions
:
{
...
@@ -20,6 +25,13 @@ export const useScreenStore = defineStore('screen', {
...
@@ -20,6 +25,13 @@ export const useScreenStore = defineStore('screen', {
},
},
setMarket
(
market
:
boolean
){
setMarket
(
market
:
boolean
){
this
.
market
=
market
this
.
market
=
market
},
setModel
(
model
:
number
){
console
.
log
(
model
,
'====='
)
this
.
model
=
model
},
setConfigId
(
ConfigId
:
number
){
this
.
ConfigId
=
ConfigId
}
}
},
},
})
})
\ No newline at end of file
src/views/Editor/DataaSource/index.vue
View file @
3c4c15c8
...
@@ -62,7 +62,8 @@
...
@@ -62,7 +62,8 @@
const
slidesStore
=
useSlidesStore
()
const
slidesStore
=
useSlidesStore
()
const
{
slides
,
slideIndex
}
=
storeToRefs
(
slidesStore
)
const
{
slides
,
slideIndex
}
=
storeToRefs
(
slidesStore
)
const
slidesData
=
slides
.
value
const
slidesData
=
slides
.
value
watch
(
datas
.
DataSource
,
(
n
,
o
)
=>
{
const
setNewDatas
=
()
=>
{
// 更新Slides数据
// 更新Slides数据
const
savelides
=
[]
const
savelides
=
[]
const
newSlides
=
[]
const
newSlides
=
[]
...
@@ -79,7 +80,7 @@
...
@@ -79,7 +80,7 @@
}
}
savelides
.
push
(
x
)
savelides
.
push
(
x
)
})
})
obj
.
elements
=
savelides
obj
.
elements
=
JSON
.
parse
(
JSON
.
stringify
(
savelides
))
slidesData
.
forEach
((
x
,
index
)
=>
{
slidesData
.
forEach
((
x
,
index
)
=>
{
if
(
slideIndex
.
value
==
index
){
if
(
slideIndex
.
value
==
index
){
x
.
pgaeType
=
datas
.
DataSource
.
pgaeType
x
.
pgaeType
=
datas
.
DataSource
.
pgaeType
...
@@ -87,16 +88,10 @@
...
@@ -87,16 +88,10 @@
}
}
newSlides
.
push
(
x
)
newSlides
.
push
(
x
)
})
})
if
(
obj
&&
obj
.
TemplateDataSource
&&
obj
.
TemplateDataSource
.
Id
){
console
.
log
(
newSlides
,
'=====-----'
)
slidesStore
.
setSlides
(
newSlides
)
slidesStore
.
setSlides
(
newSlides
)
}
}
}
}
})
watch
(
datas
.
DataSource
,
(
n
,
o
)
=>
{
})
// 数据源关键数据赋值
// 数据源关键数据赋值
const
setTemplateDataSource
=
(
Id
,
index
)
=>
{
const
setTemplateDataSource
=
(
Id
,
index
)
=>
{
datas
.
DataSource
.
DataSourceList
.
forEach
((
x
,
indexs
)
=>
{
datas
.
DataSource
.
DataSourceList
.
forEach
((
x
,
indexs
)
=>
{
...
@@ -108,6 +103,7 @@
...
@@ -108,6 +103,7 @@
x
.
TemplateDataSource
.
Name
=
obj
.
Name
x
.
TemplateDataSource
.
Name
=
obj
.
Name
}
}
})
})
setNewDatas
()
}
}
const
OffDataSource
=
()
=>
{
const
OffDataSource
=
()
=>
{
...
@@ -138,12 +134,13 @@
...
@@ -138,12 +134,13 @@
padding
:
40px
;
padding
:
40px
;
border-radius
:
10px
;
border-radius
:
10px
;
background
:
#fff
;
background
:
#fff
;
overflow
:
auto
;
}
}
.DataaSourceList
{
.DataaSourceList
{
height
:
100%
;
border
:
1px
solid
#ebeef5
;
border
:
1px
solid
#ebeef5
;
padding
:
20px
;
padding
:
20px
;
border-radius
:
5px
;
border-radius
:
5px
;
overflow
:
auto
;
}
}
.DataaSourceL
{
.DataaSourceL
{
font-weight
:
bold
;
font-weight
:
bold
;
...
...
src/views/Editor/EditorHeader/index.vue
View file @
3c4c15c8
<
template
>
<
template
>
<div
class=
"editor-header"
>
<div
class=
"editor-header"
>
<div
class=
"left"
>
<div
class=
"left"
>
<div
class=
"menu-item"
v-tooltip=
"'去首页'"
@
click=
"goBack()"
>
首页
</div>
<Popover
trigger=
"click"
placement=
"bottom-start"
v-model:value=
"mainMenuVisible"
>
<Popover
trigger=
"click"
placement=
"bottom-start"
v-model:value=
"mainMenuVisible"
>
<template
#
content
>
<template
#
content
>
<FileInput
accept=
".pptist"
@
change=
"files =>
{
<FileInput
accept=
".pptist"
@
change=
"files =>
{
...
@@ -54,7 +55,7 @@
...
@@ -54,7 +55,7 @@
<div class="arrow-btn"><IconDown class="arrow" /></div>
<div class="arrow-btn"><IconDown class="arrow" /></div>
</Popover>
</Popover>
</div> -->
</div> -->
<div
class=
"group-menu-item"
v-if=
"userInfo.IsEditTripTemplate==1"
>
<div
class=
"group-menu-item"
v-if=
"userInfo.IsEditTripTemplate==1
&&model
"
>
<div
class=
"menu-item"
v-tooltip=
"'导入PSD'"
@
click=
"UploadPsd()"
>
<div
class=
"menu-item"
v-tooltip=
"'导入PSD'"
@
click=
"UploadPsd()"
>
<IconUpload
class=
"icon"
/>
<IconUpload
class=
"icon"
/>
</div>
</div>
...
@@ -91,8 +92,9 @@ import useImport from '@/hooks/useImport'
...
@@ -91,8 +92,9 @@ import useImport from '@/hooks/useImport'
import
useSlideHandler
from
'@/hooks/useSlideHandler'
import
useSlideHandler
from
'@/hooks/useSlideHandler'
import
type
{
DialogForExportTypes
}
from
'@/types/export'
import
type
{
DialogForExportTypes
}
from
'@/types/export'
import
{
userStore
}
from
"@/store/user"
;
import
{
userStore
}
from
"@/store/user"
;
import
{
useScreenStore
}
from
"@/store/screen"
;
import
ConfigService
from
'@/services/ConfigService'
import
ConfigService
from
'@/services/ConfigService'
import
{
injectKeyDataSource
}
from
'@/types/injectKey'
import
{
injectKeyDataSource
,
injectKeyTemplate
}
from
'@/types/injectKey'
import
HotkeyDoc
from
'./HotkeyDoc.vue'
import
HotkeyDoc
from
'./HotkeyDoc.vue'
import
FileInput
from
'@/components/FileInput.vue'
import
FileInput
from
'@/components/FileInput.vue'
...
@@ -122,17 +124,55 @@ const datas = reactive({
...
@@ -122,17 +124,55 @@ const datas = reactive({
loading
:
false
loading
:
false
})
})
const
queryObj
=
ref
({}
as
any
)
const
queryObj
=
ref
({}
as
any
)
const
searchData
=
ref
({}
as
any
)
datas
.
DataSource
=
inject
(
injectKeyDataSource
)
datas
.
DataSource
=
inject
(
injectKeyDataSource
)
queryObj
.
value
=
inject
(
injectKeyDataSource
).
queryObj
queryObj
.
value
=
inject
(
injectKeyDataSource
).
queryObj
searchData
.
value
=
inject
(
injectKeyTemplate
)
const
marketStore
=
useScreenStore
()
const
{
market
,
model
,
ConfigId
}
=
storeToRefs
(
useScreenStore
())
const
goBack
=
()
=>
{
marketStore
.
setMarket
(
true
)
}
// 导入PSD
// 导入PSD
const
UploadPsd
=
()
=>
{
const
UploadPsd
=
()
=>
{
}
}
// 保存
// 保存
// 新增修改模版
const
SetTripTemplateSlide
=
async
()
=>
{
try
{
let
TemplateRes
=
await
ConfigService
.
SetTripTemplateSlide
(
queryObj
.
value
);
if
(
TemplateRes
.
data
.
resultCode
==
1
)
{
}
datas
.
loading
=
false
}
catch
(
error
)
{
datas
.
loading
=
false
console
.
log
(
"TemplateGetTripFiled"
,
error
);
}
}
// 用户新增修改数据
const
SetTripTemplateConfig
=
async
()
=>
{
try
{
let
queryMsg
=
{
ConfigId
:
ConfigId
,
TempId
:
queryObj
.
value
.
TempId
,
}
let
TemplateRes
=
await
ConfigService
.
SetSetTripConfig
(
queryMsg
);
if
(
TemplateRes
.
data
.
resultCode
==
1
)
{
}
datas
.
loading
=
false
}
catch
(
error
)
{
datas
.
loading
=
false
console
.
log
(
"TemplateGetTripFiled"
,
error
);
}
}
const
setTemplate
=
async
()
=>
{
const
setTemplate
=
async
()
=>
{
// console.log(JSON.stringify(slides.value),'----保存接口',queryObj.value)
// console.log(JSON.stringify(slides.value),'----保存接口',queryObj.value)
console
.
log
(
slides
.
value
,
'-------'
)
if
(
queryObj
.
value
.
Title
==
''
||!
queryObj
.
value
.
LineId
||!
queryObj
.
value
.
LtId
if
(
queryObj
.
value
.
Title
==
''
||!
queryObj
.
value
.
LineId
||!
queryObj
.
value
.
LtId
// ||queryObj.value.CoverImg==''
// ||queryObj.value.CoverImg==''
||
queryObj
.
value
.
CountryName
==
''
||
queryObj
.
value
.
SeasonName
==
''
||
queryObj
.
value
.
CountryName
==
''
||
queryObj
.
value
.
SeasonName
==
''
...
@@ -165,20 +205,15 @@ const setTemplate = async () =>{
...
@@ -165,20 +205,15 @@ const setTemplate = async () =>{
}
}
}
}
queryObj
.
value
.
TempData
=
JSON
.
stringify
(
slides
.
value
)
queryObj
.
value
.
TempData
=
JSON
.
stringify
(
slides
.
value
)
return
datas
.
loading
=
true
datas
.
loading
=
true
try
{
if
(
model
&&
userInfo
.
IsEditTripTemplate
==
1
){
let
TemplateRes
=
await
ConfigService
.
SetTripTemplateSlide
(
queryObj
.
value
);
await
SetTripTemplateSlide
()
if
(
TemplateRes
.
data
.
resultCode
==
1
)
{
}
else
{
await
SetTripTemplateConfig
()
}
datas
.
loading
=
false
}
catch
(
error
)
{
datas
.
loading
=
false
console
.
log
(
"TemplateGetTripFiled"
,
error
);
}
}
}
}
const
startEditTitle
=
()
=>
{
const
startEditTitle
=
()
=>
{
titleValue
.
value
=
title
.
value
titleValue
.
value
=
title
.
value
editingTitle
.
value
=
true
editingTitle
.
value
=
true
...
...
src/views/Editor/Thumbnails/index.vue
View file @
3c4c15c8
...
@@ -56,7 +56,7 @@ import type { ContextmenuItem } from '@/components/Contextmenu/types'
...
@@ -56,7 +56,7 @@ import type { ContextmenuItem } from '@/components/Contextmenu/types'
import
useSlideHandler
from
'@/hooks/useSlideHandler'
import
useSlideHandler
from
'@/hooks/useSlideHandler'
import
useScreening
from
'@/hooks/useScreening'
import
useScreening
from
'@/hooks/useScreening'
import
useLoadSlides
from
'@/hooks/useLoadSlides'
import
useLoadSlides
from
'@/hooks/useLoadSlides'
import
{
injectKeyDataSource
}
from
'@/types/injectKey'
import
{
injectKeyDataSource
,
injectKeyTemplate
}
from
'@/types/injectKey'
import
ConfigService
from
'@/services/ConfigService'
import
ConfigService
from
'@/services/ConfigService'
import
ThumbnailSlide
from
'@/views/components/ThumbnailSlide/index.vue'
import
ThumbnailSlide
from
'@/views/components/ThumbnailSlide/index.vue'
...
@@ -93,26 +93,142 @@ const datas = reactive({
...
@@ -93,26 +93,142 @@ const datas = reactive({
DataSource
:{}
DataSource
:{}
})
})
const
queryObj
=
ref
({}
as
any
)
const
queryObj
=
ref
({}
as
any
)
const
searchData
=
ref
({}
as
any
)
datas
.
DataSource
=
inject
(
injectKeyDataSource
)
datas
.
DataSource
=
inject
(
injectKeyDataSource
)
searchData
.
value
=
inject
(
injectKeyTemplate
)
// 模版市场分页数据
const
SearchqueryObj
=
reactive
({
pageIndex
:
1
,
pageSize
:
10
,
LineId
:
0
,
//线路Id
Title
:
''
,
//模板名称
CountryName
:
''
,
//国家名称
SeasonName
:
''
,
//季节名称
ColorName
:
''
,
//颜色名称
totalCount
:
0
,
//总调试
pageCount
:
0
,
//总页数
})
watch
(()
=>
slideIndex
.
value
,
()
=>
{
// 清除多选状态的幻灯片
if
(
selectedSlidesIndex
.
value
.
length
)
{
mainStore
.
updateSelectedSlidesIndex
([])
}
// 检查当前页缩略图是否在可视范围,不在的话需要滚动到对应的位置
nextTick
(()
=>
{
const
activeThumbnailRef
:
HTMLElement
=
thumbnailsRef
.
value
?.
$el
?.
querySelector
(
'.thumbnail-item.active'
)
if
(
thumbnailsRef
.
value
&&
activeThumbnailRef
&&
!
isElementInViewport
(
activeThumbnailRef
,
thumbnailsRef
.
value
.
$el
))
{
setTimeout
(()
=>
{
activeThumbnailRef
.
scrollIntoView
({
behavior
:
'smooth'
})
},
100
)
}
})
})
//提取字符串中的文字
const
getHtmlPlainText
=
(
html_str
)
=>
{
let
re
=
new
RegExp
(
'<[^<>]+>'
,
'g'
)
if
(
html_str
)
{
let
text
=
html_str
.
replace
(
re
,
''
)
return
text
}
else
{
return
''
}
}
queryObj
.
value
=
inject
(
injectKeyDataSource
).
queryObj
/***
* 获取模板市场分页列表
*/
const
queryTemplateBySearchHandler
=
async
()
=>
{
try
{
let
pageRes
=
await
ConfigService
.
GetTemplagePageAsync
(
SearchqueryObj
);
console
.
log
(
"queryTemplateBySearchHandler"
,
pageRes
);
if
(
pageRes
.
data
.
resultCode
==
1
)
{
datas
.
DataSource
.
dataList
=
pageRes
.
data
.
data
.
pageData
;
SearchqueryObj
.
totalCount
=
pageRes
.
data
.
data
.
count
;
SearchqueryObj
.
pageCount
=
pageRes
.
data
.
data
.
pageCount
;
}
}
catch
(
error
)
{
console
.
log
(
"queryTemplateBySearchHandler"
,
error
);
}
}
// 获取行程团数据
const
GetTripFiledData
=
async
()
=>
{
if
(
queryObj
.
value
.
TempId
)
return
const
slidesData
=
slides
.
value
try
{
let
queryMsg
=
{
ConfigId
:
datas
.
DataSource
.
ConfigId
}
let
dataRes
=
await
ConfigService
.
triptemplateGetTripFiledData
(
queryMsg
);
if
(
dataRes
.
data
.
resultCode
==
1
)
{
if
(
!
dataRes
.
data
.
data
)
return
const
travel
=
dataRes
.
data
.
data
const
cursors
=
[]
as
Array
<
any
>
slidesData
.
forEach
((
x
,
index
)
=>
{
x
.
elements
.
forEach
(
y
=>
{
if
(
y
.
TemplateDataSource
&&
y
.
TemplateDataSource
.
Content
){
let
dataPath
=
y
.
TemplateDataSource
.
Content
.
split
(
'.'
)
let
value
=
JSON
.
parse
(
JSON
.
stringify
(
travel
));
dataPath
.
forEach
((
oo
,
i
)
=>
{
if
(
value
&&
value
[
oo
]){
if
(
i
==
0
&&
Array
.
isArray
(
value
[
oo
])){
let
temp
=
cursors
.
find
(
item
=>
item
.
key
==
oo
)
if
(
temp
){
temp
.
index
++
}
else
{
temp
=
{
key
:
oo
,
index
:
0
}
cursors
.
push
(
temp
)
}
if
(
value
[
oo
].
length
>
temp
.
index
)
value
=
value
[
oo
][
temp
.
index
]
else
value
=
value
[
oo
]
}
else
{
value
=
value
[
oo
]
}
}
else
{
value
=
null
}
})
if
(
value
&&
typeof
(
value
)
==
'string'
){
//替换
y
.
content
=
y
.
content
.
replace
(
getHtmlPlainText
(
y
.
content
),
value
)
}
else
if
(
value
&&
Array
.
isArray
(
value
)){
//替换
y
.
content
=
value
[
0
]
}
}
})
})
slidesStore
.
setSlides
(
slidesData
)
}
}
catch
(
error
)
{
console
.
log
(
"triptemplateGetTripFiledData"
,
error
);
}
}
// 获取行程模版数据
// 获取行程模版数据
const
GetTripTemplate
=
async
()
=>
{
const
GetTripTemplate
=
async
()
=>
{
// if(!datas.DataSource.queryObj
.TempId) {
if
(
!
queryObj
.
value
.
TempId
)
{
//
let list = [
let
list
=
[
//
{
{
//
id: 'test-slide-1',
id
:
'test-slide-1'
,
//
pageType: 1,
pageType
:
1
,
//
elements: [],
elements
:
[],
//
background: {
background
:
{
//
type: 'solid',
type
:
'solid'
,
//
color: '#ffffff',
color
:
'#ffffff'
,
//
},
},
//
}
}
//
]
]
//
return slidesStore.setSlides(list)
return
slidesStore
.
setSlides
(
list
)
//
}
}
try
{
try
{
let
queryMsg
=
{
let
queryMsg
=
{
TempId
:
datas
.
DataSource
.
queryObj
.
TempId
TempId
:
queryObj
.
value
.
TempId
}
}
let
dataRes
=
await
ConfigService
.
GetTripTemplateSlide
(
queryMsg
);
let
dataRes
=
await
ConfigService
.
GetTripTemplateSlide
(
queryMsg
);
if
(
dataRes
.
data
.
resultCode
==
1
)
{
if
(
dataRes
.
data
.
resultCode
==
1
)
{
...
@@ -141,48 +257,17 @@ const GetTripTemplate = async () =>{
...
@@ -141,48 +257,17 @@ const GetTripTemplate = async () =>{
queryObj
.
value
.
ColorName
=
dataRes
.
data
.
data
.
ColorName
queryObj
.
value
.
ColorName
=
dataRes
.
data
.
data
.
ColorName
queryObj
.
value
.
ColorStr
=
dataRes
.
data
.
data
.
ColorStr
queryObj
.
value
.
ColorStr
=
dataRes
.
data
.
data
.
ColorStr
queryObj
.
value
.
TempType
=
dataRes
.
data
.
data
.
TempType
queryObj
.
value
.
TempType
=
dataRes
.
data
.
data
.
TempType
await
GetTripFiledData
()
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
log
(
"GetTripTemplateSlide"
,
error
);
console
.
log
(
"GetTripTemplateSlide"
,
error
);
}
}
}
}
GetTripTemplate
()
// 页面被切换时
// 页面被切换时
const
thumbnailsRef
=
ref
<
InstanceType
<
typeof
Draggable
>>
()
const
thumbnailsRef
=
ref
<
InstanceType
<
typeof
Draggable
>>
()
watch
(()
=>
slideIndex
.
value
,
()
=>
{
// 清除多选状态的幻灯片
if
(
selectedSlidesIndex
.
value
.
length
)
{
mainStore
.
updateSelectedSlidesIndex
([])
}
// 检查当前页缩略图是否在可视范围,不在的话需要滚动到对应的位置
nextTick
(()
=>
{
const
activeThumbnailRef
:
HTMLElement
=
thumbnailsRef
.
value
?.
$el
?.
querySelector
(
'.thumbnail-item.active'
)
if
(
thumbnailsRef
.
value
&&
activeThumbnailRef
&&
!
isElementInViewport
(
activeThumbnailRef
,
thumbnailsRef
.
value
.
$el
))
{
setTimeout
(()
=>
{
activeThumbnailRef
.
scrollIntoView
({
behavior
:
'smooth'
})
},
100
)
}
})
})
//提取字符串中的文字
const
getHtmlPlainText
=
(
html_str
)
=>
{
let
re
=
new
RegExp
(
'<[^<>]+>'
,
'g'
)
if
(
html_str
)
{
let
text
=
html_str
.
replace
(
re
,
''
)
return
text
}
else
{
return
''
}
}
queryObj
.
value
=
inject
(
injectKeyDataSource
).
queryObj
let
pageObj
=
slides
.
value
.
find
((
slide
,
indexs
)
=>
{
return
slideIndex
.
value
==
indexs
})
// pageType.value = pageObj.pageType
// 切换页面
// 切换页面
const
changeSlideIndex
=
(
index
:
number
)
=>
{
const
changeSlideIndex
=
(
index
:
number
)
=>
{
mainStore
.
setActiveElementIdList
([])
mainStore
.
setActiveElementIdList
([])
...
@@ -191,37 +276,31 @@ const changeSlideIndex = (index: number) => {
...
@@ -191,37 +276,31 @@ const changeSlideIndex = (index: number) => {
return
index
==
indexs
return
index
==
indexs
})
})
datas
.
DataSource
.
pageType
=
newElements
.
pageType
datas
.
DataSource
.
pageType
=
newElements
.
pageType
let
TemplateList
let
TemplateList
=
datas
.
DataSource
.
TemplateDataSource
.
filter
(
x
=>
{
if
(
newElements
.
pageType
==
1
)
TemplateList
=
datas
.
DataSource
.
jc
return
x
.
FiledType
==
newElements
.
pageType
else
if
(
newElements
.
pageType
==
2
)
TemplateList
=
datas
.
DataSource
.
jd
})
else
if
(
newElements
.
pageType
==
3
)
TemplateList
=
datas
.
DataSource
.
jq
else
if
(
newElements
.
pageType
==
4
)
TemplateList
=
datas
.
DataSource
.
cs
datas
.
DataSource
.
DataSourceList
=
[]
datas
.
DataSource
.
DataSourceList
=
[]
newElements
&&
newElements
.
elements
&&
newElements
.
elements
.
forEach
(
slide
=>
{
newElements
&&
newElements
.
elements
&&
newElements
.
elements
.
forEach
(
slide
=>
{
if
(
slide
.
type
!=
"text"
&&
slide
.
type
!=
"image"
)
return
if
(
slide
.
type
==
"text"
||
slide
.
type
==
"image"
)
{
let
FiledTypeStr
let
FiledTypeStr
if
(
slide
.
type
==
"text"
)
FiledTypeStr
=
getHtmlPlainText
(
slide
.
content
)
if
(
slide
.
type
==
"text"
)
FiledTypeStr
=
getHtmlPlainText
(
slide
.
content
)
if
(
slide
.
type
==
"image"
)
FiledTypeStr
=
slide
.
src
if
(
slide
.
type
==
"image"
)
FiledTypeStr
=
slide
.
src
let
Obj
=
{}
let
Obj
=
{}
if
(
slide
.
FiledTypeStr
){
Obj
=
{
...
slide
,
}
}
else
{
Obj
=
{
Obj
=
{
...
slide
,
...
slide
,
FiledTypeStr
:
FiledTypeStr
,
FiledTypeStr
:
FiledTypeStr
,
TemplateList
:
TemplateList
,
TemplateList
:
TemplateList
,
TemplateDataSource
:
{
TemplateDataSource
:
{
Content
:
''
,
Content
:
slide
.
TemplateDataSource
.
Content
?
slide
.
TemplateDataSource
.
Content
:
''
,
Name
:
''
,
Name
:
slide
.
TemplateDataSource
.
Name
?
slide
.
TemplateDataSource
.
Name
:
''
,
Id
:
null
as
Number
Id
:
slide
.
TemplateDataSource
.
Id
?
slide
.
TemplateDataSource
.
Id
:
null
as
Number
},
}
}
}
}
if
(
Obj
){
if
(
Obj
){
datas
.
DataSource
.
DataSourceList
.
push
(
Obj
)
datas
.
DataSource
.
DataSourceList
.
push
(
Obj
)
}
}
}
})
})
if
(
slideIndex
.
value
===
index
)
return
if
(
slideIndex
.
value
===
index
)
return
slidesStore
.
updateSlideIndex
(
index
)
slidesStore
.
updateSlideIndex
(
index
)
...
@@ -366,6 +445,10 @@ const contextmenusThumbnailItem = (): ContextmenuItem[] => {
...
@@ -366,6 +445,10 @@ const contextmenusThumbnailItem = (): ContextmenuItem[] => {
},
},
]
]
}
}
queryTemplateBySearchHandler
()
GetTripTemplate
()
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
...
...
src/views/Editor/Toolbar/ElementTemplateData.vue
View file @
3c4c15c8
...
@@ -10,9 +10,9 @@
...
@@ -10,9 +10,9 @@
placeholder=
"请页面类型"
>
placeholder=
"请页面类型"
>
<el-option
<el-option
v-for=
"item in pageTypesList"
v-for=
"item in pageTypesList"
:key=
"item.
key
"
:key=
"item.
FiledType
"
:label=
"item.
label
"
:label=
"item.
Name
"
:value=
"item.
key
"
:value=
"item.
FiledType
"
/>
/>
</el-select>
</el-select>
</div>
</div>
...
@@ -104,13 +104,18 @@
...
@@ -104,13 +104,18 @@
const
lines
=
ref
([]
as
Array
<
any
>
)
//线路
const
lines
=
ref
([]
as
Array
<
any
>
)
//线路
const
Series
=
ref
([]
as
Array
<
any
>
)
//系列
const
Series
=
ref
([]
as
Array
<
any
>
)
//系列
const
pageTypesList
=
ref
([
const
cursors
=
[]
as
Array
<
any
>
{
label
:
'基础'
,
key
:
1
},
{
label
:
'酒店'
,
key
:
2
},
{
label
:
'景'
,
key
:
3
},
{
label
:
'餐'
,
key
:
4
},
])
const
pageTypesList
=
ref
([]
as
any
)
let
TemplateList
=
datas
.
DataSource
.
TemplateDataSource
.
filter
(
x
=>
{
let
obj
=
pageTypesList
.
value
.
findIndex
(
z
=>
{
return
z
.
FiledType
==
x
.
FiledType
})
if
(
obj
==-
1
){
pageTypesList
.
value
.
push
(
x
)
}
})
const
slidesStore
=
useSlidesStore
()
const
slidesStore
=
useSlidesStore
()
const
{
slides
,
slideIndex
}
=
storeToRefs
(
slidesStore
)
const
{
slides
,
slideIndex
}
=
storeToRefs
(
slidesStore
)
const
setCountryValue
=
()
=>
{
const
setCountryValue
=
()
=>
{
...
@@ -157,35 +162,30 @@
...
@@ -157,35 +162,30 @@
return
slideIndex
.
value
==
indexs
return
slideIndex
.
value
==
indexs
})
})
datas
.
DataSource
.
DataSourceOverlay
=
!
datas
.
DataSource
.
DataSourceOverlay
datas
.
DataSource
.
DataSourceOverlay
=
!
datas
.
DataSource
.
DataSourceOverlay
let
TemplateList
let
TemplateList
=
datas
.
DataSource
.
TemplateDataSource
.
filter
(
x
=>
{
if
(
newElements
.
pageType
==
1
)
TemplateList
=
datas
.
DataSource
.
jc
return
x
.
FiledType
==
newElements
.
pageType
else
if
(
newElements
.
pageType
==
2
)
TemplateList
=
datas
.
DataSource
.
jd
})
else
if
(
newElements
.
pageType
==
3
)
TemplateList
=
datas
.
DataSource
.
jq
else
if
(
newElements
.
pageType
==
4
)
TemplateList
=
datas
.
DataSource
.
cs
datas
.
DataSource
.
DataSourceList
=
[]
datas
.
DataSource
.
DataSourceList
=
[]
newElements
.
elements
.
forEach
(
slide
=>
{
newElements
.
elements
.
forEach
(
slide
=>
{
if
(
slide
.
type
!=
"text"
&&
slide
.
type
!=
"image"
)
return
if
(
slide
.
type
==
"text"
||
slide
.
type
==
"image"
)
{
let
FiledTypeStr
let
FiledTypeStr
if
(
slide
.
type
==
"text"
)
FiledTypeStr
=
getHtmlPlainText
(
slide
.
content
)
if
(
slide
.
type
==
"text"
)
FiledTypeStr
=
getHtmlPlainText
(
slide
.
content
)
if
(
slide
.
type
==
"image"
)
FiledTypeStr
=
slide
.
src
if
(
slide
.
type
==
"image"
)
FiledTypeStr
=
slide
.
src
let
Obj
=
{}
let
Obj
=
{}
if
(
slide
.
FiledTypeStr
){
Obj
=
{
...
slide
,
}
}
else
{
Obj
=
{
Obj
=
{
...
slide
,
...
slide
,
FiledTypeStr
:
FiledTypeStr
,
FiledTypeStr
:
FiledTypeStr
,
TemplateList
:
TemplateList
,
TemplateList
:
TemplateList
,
TemplateDataSource
:
{
TemplateDataSource
:
{
Content
:
''
,
Content
:
slide
.
TemplateDataSource
.
Content
?
slide
.
TemplateDataSource
.
Content
:
''
,
Name
:
''
,
Name
:
slide
.
TemplateDataSource
.
Name
?
slide
.
TemplateDataSource
.
Name
:
''
,
Id
:
null
as
Number
Id
:
slide
.
TemplateDataSource
.
Id
?
slide
.
TemplateDataSource
.
Id
:
null
as
Number
},
},
}
}
}
if
(
Obj
){
datas
.
DataSource
.
DataSourceList
.
push
(
Obj
)
datas
.
DataSource
.
DataSourceList
.
push
(
Obj
)
}
}
})
})
}
}
...
...
src/views/Editor/index.vue
View file @
3c4c15c8
...
@@ -52,17 +52,14 @@ import Modal from '@/components/Modal.vue'
...
@@ -52,17 +52,14 @@ import Modal from '@/components/Modal.vue'
import
DataaSource
from
'./DataaSource/index.vue'
import
DataaSource
from
'./DataaSource/index.vue'
import
ConfigService
from
'@/services/ConfigService'
import
ConfigService
from
'@/services/ConfigService'
// inject(injectKeyTemplate).TempId?inject(injectKeyTemplate).TempId:
const
datas
=
reactive
({
const
datas
=
reactive
({
DataSource
:{
DataSource
:{
dataList
:
[],
ConfigId
:
inject
(
injectKeyTemplate
).
ConfigId
?
inject
(
injectKeyTemplate
).
ConfigId
:
0
,
pageType
:
1
,
//1基础 2酒店 3景 4餐
pageType
:
1
,
//1基础 2酒店 3景 4餐
DataSourceOverlay
:
false
,
DataSourceOverlay
:
false
,
DataSourceList
:[],
DataSourceList
:[],
TemplateDataSource
:[],
TemplateDataSource
:[],
// 所有模版类型 1基础 2酒店 3景 4餐
jc
:[],
//基础
jd
:[],
//酒店
jq
:[],
//景区
cs
:[],
//餐食
queryObj
:{
queryObj
:{
TempId
:
inject
(
injectKeyTemplate
).
TempId
?
inject
(
injectKeyTemplate
).
TempId
:
0
,
//编号(新增传0) 是 [int]
TempId
:
inject
(
injectKeyTemplate
).
TempId
?
inject
(
injectKeyTemplate
).
TempId
:
0
,
//编号(新增传0) 是 [int]
LineId
:
null
,
//线路Id 是 [int]
LineId
:
null
,
//线路Id 是 [int]
...
@@ -94,18 +91,6 @@ const GetTripFiled = async () =>{
...
@@ -94,18 +91,6 @@ const GetTripFiled = async () =>{
let
TemplateRes
=
await
ConfigService
.
TemplateGetTripFiled
();
let
TemplateRes
=
await
ConfigService
.
TemplateGetTripFiled
();
if
(
TemplateRes
.
data
.
resultCode
==
1
)
{
if
(
TemplateRes
.
data
.
resultCode
==
1
)
{
datas
.
DataSource
.
TemplateDataSource
=
TemplateRes
.
data
.
data
datas
.
DataSource
.
TemplateDataSource
=
TemplateRes
.
data
.
data
datas
.
DataSource
.
jc
=
datas
.
DataSource
.
TemplateDataSource
.
filter
(
x
=>
{
return
x
.
FiledType
==
1
})
datas
.
DataSource
.
jd
=
datas
.
DataSource
.
TemplateDataSource
.
filter
(
x
=>
{
return
x
.
FiledType
==
2
})
datas
.
DataSource
.
jq
=
datas
.
DataSource
.
TemplateDataSource
.
filter
(
x
=>
{
return
x
.
FiledType
==
3
})
datas
.
DataSource
.
cs
=
datas
.
DataSource
.
TemplateDataSource
.
filter
(
x
=>
{
return
x
.
FiledType
==
4
})
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
log
(
"TemplateGetTripFiled"
,
error
);
console
.
log
(
"TemplateGetTripFiled"
,
error
);
...
@@ -124,6 +109,7 @@ useGlobalHotkey()
...
@@ -124,6 +109,7 @@ useGlobalHotkey()
usePasteEvent
()
usePasteEvent
()
provide
(
injectKeyDataSource
,
datas
.
DataSource
)
provide
(
injectKeyDataSource
,
datas
.
DataSource
)
</
script
>
</
script
>
<
style
lang=
"scss"
scoped
>
<
style
lang=
"scss"
scoped
>
...
...
src/views/Market/Index.vue
View file @
3c4c15c8
...
@@ -64,7 +64,7 @@
...
@@ -64,7 +64,7 @@
</div>
</div>
</div>
</div>
</div>
</div>
<div
class=
"q-mt-lg row wrap bg-white rounded"
style=
"padding: 30px 10px;"
>
<div
class=
"q-mt-lg row wrap bg-white rounded"
style=
"padding: 30px 10px
0 10px
;"
>
<
template
v-for=
"(item,index) in dataList"
>
<
template
v-for=
"(item,index) in dataList"
>
<div
class=
"MarketIndexListBox"
>
<div
class=
"MarketIndexListBox"
>
<div
class=
"MarketIndexList bg-white rounded"
@
click=
"goToTemplate(item)"
>
<div
class=
"MarketIndexList bg-white rounded"
@
click=
"goToTemplate(item)"
>
...
@@ -76,6 +76,20 @@
...
@@ -76,6 +76,20 @@
</div>
</div>
</
template
>
</
template
>
</div>
</div>
<div
class=
"q-mt-lg row"
style=
"justify-content: center;"
>
<el-pagination
background
v-model:current-page=
"currentPage"
v-model:page-size=
"queryObj.pageSize"
:page-sizes=
"[10, 20, 30, 40, 50, 100]"
:small=
"small"
layout=
"sizes, prev, pager, next"
:total=
"queryObj.totalCount"
@
size-change=
"handleSizeChange"
@
current-change=
"handleCurrentChange"
hide-on-single-page
/>
</div>
</div>
</div>
</div>
</div>
...
@@ -98,6 +112,8 @@
...
@@ -98,6 +112,8 @@
const
colorArr
=
ref
([]
as
Array
<
any
>
);
//颜色
const
colorArr
=
ref
([]
as
Array
<
any
>
);
//颜色
const
seasonArr
=
ref
([]
as
Array
<
any
>
);
//季节
const
seasonArr
=
ref
([]
as
Array
<
any
>
);
//季节
const
dataList
=
ref
([]
as
Array
<
any
>
);
//模板数据列表
const
dataList
=
ref
([]
as
Array
<
any
>
);
//模板数据列表
const
currentPage
=
ref
(
1
as
Number
);
const
queryObj
=
reactive
({
const
queryObj
=
reactive
({
pageIndex
:
1
,
pageIndex
:
1
,
pageSize
:
10
,
pageSize
:
10
,
...
@@ -113,7 +129,7 @@
...
@@ -113,7 +129,7 @@
const
searchData
=
ref
({}
as
any
)
const
searchData
=
ref
({}
as
any
)
searchData
.
value
=
inject
(
injectKeyTemplate
)
searchData
.
value
=
inject
(
injectKeyTemplate
)
const
marketStore
=
useScreenStore
()
const
marketStore
=
useScreenStore
()
const
{
screening
,
market
}
=
storeToRefs
(
useScreenStore
())
const
{
screening
,
market
,
model
,
ConfigId
}
=
storeToRefs
(
useScreenStore
())
const
addTemplate
=
()
=>
{
const
addTemplate
=
()
=>
{
marketStore
.
setMarket
(
!
market
)
marketStore
.
setMarket
(
!
market
)
...
@@ -124,18 +140,14 @@
...
@@ -124,18 +140,14 @@
*/
*/
const
GetTripConfig
=
async
()
=>
{
const
GetTripConfig
=
async
()
=>
{
try
{
try
{
// console.log('','-----http://localhost:8080?ConfigId=11')
if
(
!
ConfigId
)
return
let
locations
=
window
.
location
.
search
.
split
(
'?'
)
let
ConfigId
=
locations
[
1
].
split
(
'='
)[
1
]
console
.
log
(
ConfigId
,
'====='
)
let
queryMsg
=
{
let
queryMsg
=
{
ConfigId
:
0
ConfigId
:
ConfigId
}
}
if
(
!
queryMsg
.
ConfigId
)
return
let
datasRes
=
await
ConfigService
.
triptemplateGetTripConfig
(
queryMsg
);
let
datasRes
=
await
ConfigService
.
triptemplateGetTripConfig
(
queryMsg
);
if
(
datasRes
.
data
.
resultCode
==
1
)
{
if
(
datasRes
.
data
.
resultCode
==
1
)
{
if
(
datasRes
.
data
.
data
&&
datasRes
.
data
.
data
.
length
>
0
&&
datasRes
.
data
.
data
[
0
].
TempId
){
if
(
datasRes
.
data
.
data
&&
datasRes
.
data
.
data
.
length
>
0
&&
datasRes
.
data
.
data
[
0
].
TempId
){
searchData
.
value
.
TempId
=
item
.
TempId
searchData
.
value
.
TempId
=
datasRes
.
data
.
data
[
0
]
.
TempId
marketStore
.
setMarket
(
!
market
)
marketStore
.
setMarket
(
!
market
)
}
}
}
}
...
@@ -160,16 +172,22 @@
...
@@ -160,16 +172,22 @@
const
queryTemplateBySearchHandler
=
async
()
=>
{
const
queryTemplateBySearchHandler
=
async
()
=>
{
try
{
try
{
let
pageRes
=
await
ConfigService
.
GetTemplagePageAsync
(
queryObj
);
let
pageRes
=
await
ConfigService
.
GetTemplagePageAsync
(
queryObj
);
console
.
log
(
"queryTemplateBySearchHandler"
,
pageRes
);
if
(
pageRes
.
data
.
resultCode
==
1
)
{
if
(
pageRes
.
data
.
resultCode
==
1
)
{
dataList
.
value
=
pageRes
.
data
.
data
.
pageData
;
dataList
.
value
=
pageRes
.
data
.
data
.
pageData
;
queryObj
.
totalCount
=
pageRes
.
data
.
data
.
count
;
queryObj
.
totalCount
=
pageRes
.
data
.
data
.
count
;
queryObj
.
pageCount
=
pageRes
.
data
.
data
.
pageCount
;
queryObj
.
pageCount
=
pageRes
.
data
.
data
.
pageCount
;
}
}
}
catch
(
error
)
{
}
catch
(
error
)
{
console
.
log
(
"queryTemplateBySearchHandler"
,
error
);
}
}
}
}
const
handleSizeChange
=
(
val
:
number
)
=>
{
queryObj
.
pageSize
=
val
queryTemplateBySearchHandler
()
}
const
handleCurrentChange
=
(
val
:
number
)
=>
{
queryObj
.
pageIndex
=
val
queryTemplateBySearchHandler
()
}
//线路切换
//线路切换
const
onLineChangeHandler
=
(
lineId
:
number
)
=>
{
const
onLineChangeHandler
=
(
lineId
:
number
)
=>
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment