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
4a302fb1
Commit
4a302fb1
authored
Dec 06, 2023
by
罗超
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
http://gitlab.oytour.com/viitto/pptist
parents
4fb2d184
0052a0a9
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
436 additions
and
24 deletions
+436
-24
App.vue
src/App.vue
+10
-0
ConfigService.ts
src/services/ConfigService.ts
+7
-0
screen.ts
src/store/screen.ts
+15
-1
UploadPicture.vue
src/views/Editor/CanvasTool/UploadPicture.vue
+329
-0
index.vue
src/views/Editor/CanvasTool/index.vue
+18
-5
index.vue
src/views/Editor/DataaSource/index.vue
+3
-2
index.vue
src/views/Editor/EditorHeader/index.vue
+5
-4
index.vue
src/views/Editor/Thumbnails/index.vue
+4
-2
ImageStylePanel.vue
...iews/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue
+16
-4
ElementTemplateData.vue
src/views/Editor/Toolbar/ElementTemplateData.vue
+7
-4
index.vue
src/views/Editor/index.vue
+22
-2
No files found.
src/App.vue
View file @
4a302fb1
...
...
@@ -40,6 +40,7 @@ const ConfigIdStore = useScreenStore()
const
marketStore
=
useScreenStore
()
const
isModelStore
=
useScreenStore
()
const
TempIdStore
=
useScreenStore
()
const
pageIndexStore
=
useScreenStore
()
const
{
databaseId
}
=
storeToRefs
(
mainStore
)
const
{
screening
,
market
,
model
,
ConfigId
}
=
storeToRefs
(
useScreenStore
())
const
{
userInfo
}
=
storeToRefs
(
userStore
())
...
...
@@ -52,9 +53,18 @@ const userLoginHandler = async ()=>{
let
userId
=
1
let
ConfigId
=
0
// 9117
let
model
=
0
let
TempId
=
1
let
pageIndex
=
0
if
(
param
.
uid
)
userId
=
parseInt
(
param
.
uid
)
if
(
param
.
ConfigId
)
ConfigId
=
parseInt
(
param
.
ConfigId
)
if
(
param
.
model
)
model
=
parseInt
(
param
.
model
)
if
(
param
.
TempId
)
{
TempId
=
parseInt
(
param
.
TempId
)
pageIndex
=
parseInt
(
param
.
pageIndex
)
TempIdStore
.
setTempId
(
TempId
)
pageIndexStore
.
setPageIndex
(
pageIndex
)
marketStore
.
setMarket
(
!
market
)
}
ConfigIdStore
.
setConfigId
(
ConfigId
)
modelStore
.
setModel
(
model
)
if
(
!
userInfo
.
value
.
EmployeeId
){
...
...
src/services/ConfigService.ts
View file @
4a302fb1
...
...
@@ -60,5 +60,12 @@ class ConfigService{
static
async
GetTemplagePageAsync
(
params
:
any
):
Promise
<
HttpResponse
>
{
return
Api
.
Post
(
"triptemplate_GetTripTemplatePage"
,
params
)
}
/**
* 图片素材分页列表
*/
static
async
GetPicList
(
params
:
any
):
Promise
<
HttpResponse
>
{
return
Api
.
Post
(
"hotel_post_GetPicList"
,
params
)
}
}
export
default
ConfigService
;
\ No newline at end of file
src/store/screen.ts
View file @
4a302fb1
...
...
@@ -15,7 +15,9 @@ export interface ScreenState {
dataLoading
:
number
,
FeatureImg
:
any
,
SourceLoading
:
boolean
,
pageIndex
:
number
,
imgPoolVisible
:
boolean
,
imgReplaceVisible
:
boolean
,
}
export
const
useScreenStore
=
defineStore
(
'screen'
,
{
...
...
@@ -33,6 +35,9 @@ export const useScreenStore = defineStore('screen', {
dataLoading
:
0
,
// 记录保存是否成功
FeatureImg
:
[],
// 行程特色图
SourceLoading
:
false
,
// 记录数据源是否更改
pageIndex
:
0
,
//需要生成图的行程特色
imgPoolVisible
:
false
,
//新增上传图片弹窗
imgReplaceVisible
:
false
,
//替换图片弹窗
}),
actions
:
{
...
...
@@ -77,6 +82,15 @@ export const useScreenStore = defineStore('screen', {
},
setSourceLoading
(
SourceLoading
:
boolean
)
{
this
.
SourceLoading
=
SourceLoading
},
setPageIndex
(
pageIndex
:
number
){
this
.
pageIndex
=
pageIndex
},
setImgPoolVisible
(
imgPoolVisible
:
boolean
)
{
this
.
imgPoolVisible
=
imgPoolVisible
},
setImgReplaceVisible
(
imgReplaceVisible
:
boolean
)
{
this
.
imgReplaceVisible
=
imgReplaceVisible
}
},
})
\ No newline at end of file
src/views/Editor/CanvasTool/UploadPicture.vue
0 → 100644
View file @
4a302fb1
This diff is collapsed.
Click to expand it.
src/views/Editor/CanvasTool/index.vue
View file @
4a302fb1
...
...
@@ -20,9 +20,10 @@
<IconDown
class=
"arrow"
/>
</Popover>
</div>
<FileInput
@
change=
"files => insertImageElement(files)"
>
<IconPicture
class=
"handler-item"
v-tooltip=
"'插入图片'"
/>
</FileInput>
<!-- <FileInput @change="files => insertImageElement(files)">
<IconPicture class="handler-item" v-tooltip="'插入图片'" />
</FileInput> imgPoolVisible-->
<IconPicture
class=
"handler-item"
v-tooltip=
"'插入图片'"
@
click=
"getImgVis()"
/>
<Popover
trigger=
"click"
v-model:value=
"shapePoolVisible"
>
<
template
#
content
>
<ShapePool
@
select=
"shape => drawShape(shape)"
/>
...
...
@@ -89,13 +90,16 @@
@
update=
"data => { createLatexElement(data); latexEditorVisible = false }"
/>
</Modal>
<!-- 上传图片 -->
<UploadPicture
v-if=
"imgPoolVisible"
></UploadPicture>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
ref
}
from
'vue'
import
{
ref
,
provide
}
from
'vue'
import
{
storeToRefs
}
from
'pinia'
import
{
useMainStore
,
useSnapshotStore
}
from
'@/store'
import
{
useMainStore
,
useSnapshotStore
,
useScreenStore
}
from
'@/store'
import
{
getImageDataURL
}
from
'@/utils/image'
import
type
{
ShapePoolItem
}
from
'@/configs/shapes'
import
type
{
LinePoolItem
}
from
'@/configs/lines'
...
...
@@ -114,6 +118,7 @@ import Modal from '@/components/Modal.vue'
import
Divider
from
'@/components/Divider.vue'
import
Popover
from
'@/components/Popover.vue'
import
PopoverMenuItem
from
'@/components/PopoverMenuItem.vue'
import
UploadPicture
from
'./UploadPicture.vue'
const
mainStore
=
useMainStore
()
const
{
creatingElement
,
creatingCustomShape
,
showSelectPanel
,
showSearchPanel
}
=
storeToRefs
(
mainStore
)
...
...
@@ -121,6 +126,8 @@ const { canUndo, canRedo } = storeToRefs(useSnapshotStore())
const
{
redo
,
undo
}
=
useHistorySnapshot
()
const
{
imgPoolVisible
}
=
storeToRefs
(
useScreenStore
())
const
{
scaleCanvas
,
setCanvasScalePercentage
,
...
...
@@ -145,6 +152,8 @@ const {
createAudioElement
,
}
=
useCreateElement
()
provide
(
'imgType'
,
1
)
const
insertImageElement
=
(
files
:
FileList
)
=>
{
const
imageFile
=
files
[
0
]
if
(
!
imageFile
)
return
...
...
@@ -159,6 +168,10 @@ const mediaInputVisible = ref(false)
const
latexEditorVisible
=
ref
(
false
)
const
textTypeSelectVisible
=
ref
(
false
)
const
getImgVis
=
()
=>
{
imgPoolVisible
.
value
=
true
}
// 绘制文字范围
const
drawText
=
(
vertical
=
false
)
=>
{
mainStore
.
setCreatingElement
({
...
...
src/views/Editor/DataaSource/index.vue
View file @
4a302fb1
...
...
@@ -93,8 +93,8 @@
datas
.
loading
=
false
sourceLoadingStore
.
setSourceLoading
(
false
)
}
if
(
!
n
&&
datas
.
loading
){
setNewDatasList
(
datas
.
DataSource
)
if
(
!
n
){
}
})
const
setType
=
(
x
)
=>
{
...
...
@@ -132,6 +132,7 @@
const
OffDataSource
=
()
=>
{
datas
.
DataSource
.
DataSourceOverlay
=
!
datas
.
DataSource
.
DataSourceOverlay
setNewDatasList
(
datas
.
DataSource
)
}
...
...
src/views/Editor/EditorHeader/index.vue
View file @
4a302fb1
...
...
@@ -104,7 +104,8 @@
<FullscreenSpin
:loading=
"exporting"
tip=
"正在导入..."
/>
<Psd-Upload
:visible=
"psdVisibleStatus"
@
closed=
"psdVisibleStatus=false"
></Psd-Upload>
</div>
<div
v-if=
"ConfigId"
style=
"opacity: 0;position: absolute;left: 100px;top: 0;bottom: 0;overflow: auto;z-index: -1;"
>
<!--
<div v-if="!model&&ConfigId" style="opacity: 0;position: absolute;left: 100px;top: 0;bottom: 0;overflow: auto;z-index: -1;">
<div class="export-img-dialog">
<div class="thumbnails-view">
<div class="thumbnails" v-for="slide in slides" ref="FeatureImgRef">
...
...
@@ -117,7 +118,7 @@
</div>
</div>
</div>
</div>
</div>
-->
</template>
...
...
@@ -331,7 +332,7 @@ const SetTripTemplateConfig = async () => {
ConfigId
:
ConfigId
.
value
,
TempId
:
queryObj
.
value
.
TempId
,
TempData
:
queryObj
.
value
.
TempData
,
FeatureImg
:
datas
.
FeatureImgList
//
FeatureImg: datas.FeatureImgList
}
let
TemplateRes
=
await
ConfigService
.
SetSetTripConfig
(
queryMsg
);
if
(
TemplateRes
.
data
.
resultCode
==
1
)
{
...
...
@@ -432,7 +433,7 @@ const setTemplate = async () =>{
await
SetTripTemplateSlide
()
}
if
(
ConfigId
.
value
){
await
testHandler
()
await
SetTripTemplateConfig
()
}
}
...
...
src/views/Editor/Thumbnails/index.vue
View file @
4a302fb1
<
template
>
<div
<div
class=
"thumbnails"
@
mousedown=
"() => setThumbnailsFocus(true)"
v-click-outside=
"() => setThumbnailsFocus(false)"
...
...
@@ -44,6 +45,7 @@
<div
class=
"page-number"
>
幻灯片 {{slideIndex + 1}} / {{slides.length}}
</div>
</div>
</template>
<
script
lang=
"ts"
setup
>
...
...
@@ -81,7 +83,7 @@ const { slidesLoadLimit } = useLoadSlides()
const
TemplateTypeStore
=
useScreenStore
()
const
CoverImgStore
=
useScreenStore
()
const
dataLoadingStore
=
useScreenStore
()
const
{
ConfigId
,
TemplateDataSource
,
TemplateType
,
dataLoading
,
TempId
,
SourceLoading
}
=
storeToRefs
(
TemplateTypeStore
)
const
{
model
,
ConfigId
,
TemplateDataSource
,
TemplateType
,
dataLoading
,
TempId
,
SourceLoading
}
=
storeToRefs
(
TemplateTypeStore
)
const
selectedSlidesIndex
=
computed
(()
=>
[...
_selectedSlidesIndex
.
value
,
slideIndex
.
value
])
const
{
setNewDatasList
}
=
useEditor
()
...
...
src/views/Editor/Toolbar/ElementStylePanel/ImageStylePanel.vue
View file @
4a302fb1
...
...
@@ -52,19 +52,22 @@
<Divider
/>
<ElementShadow
/>
<Divider
/>
<!--
<FileInput @change="files => replaceImage(files)">
<Button class="full-width-btn"><IconTransform class="btn-icon" /> 替换图片</Button>
</FileInput>
</FileInput> -->
<Button
class=
"full-width-btn"
@
click=
"getImgVis()"
><IconTransform
class=
"btn-icon"
/>
替换图片
</Button>
<Button
class=
"full-width-btn"
@
click=
"resetImage()"
><IconUndo
class=
"btn-icon"
/>
重置样式
</Button>
<Button
class=
"full-width-btn"
@
click=
"setBackgroundImage()"
><IconTheme
class=
"btn-icon"
/>
设为背景
</Button>
<!-- 上传图片 -->
<UploadPicture
v-if=
"imgReplaceVisible"
></UploadPicture>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
type
Ref
,
ref
}
from
'vue'
import
{
type
Ref
,
ref
,
provide
}
from
'vue'
import
{
storeToRefs
}
from
'pinia'
import
{
useMainStore
,
useSlidesStore
}
from
'@/store'
import
{
useMainStore
,
useSlidesStore
,
useScreenStore
}
from
'@/store'
import
type
{
PPTImageElement
,
SlideBackground
}
from
'@/types/slides'
import
{
CLIPPATHS
}
from
'@/configs/imageClip'
import
{
getImageDataURL
}
from
'@/utils/image'
...
...
@@ -81,6 +84,7 @@ import Divider from '@/components/Divider.vue'
import
Button
from
'@/components/Button.vue'
import
ButtonGroup
from
'@/components/ButtonGroup.vue'
import
Popover
from
'@/components/Popover.vue'
import
UploadPicture
from
'../../CanvasTool/UploadPicture.vue'
const
shapeClipPathOptions
=
CLIPPATHS
const
ratioClipOptions
=
[
...
...
@@ -127,6 +131,14 @@ const clipPanelVisible = ref(false)
const
{
addHistorySnapshot
}
=
useHistorySnapshot
()
const
{
imgReplaceVisible
}
=
storeToRefs
(
useScreenStore
())
provide
(
'imgType'
,
2
)
const
getImgVis
=
()
=>
{
imgReplaceVisible
.
value
=
true
}
// 打开自由裁剪
const
clipImage
=
()
=>
{
mainStore
.
setClipingImageElementId
(
handleElementId
.
value
)
...
...
src/views/Editor/Toolbar/ElementTemplateData.vue
View file @
4a302fb1
...
...
@@ -129,7 +129,7 @@
<!-- 生成封面图 -->
<div
style=
"opacity: 0;position: absolute;left: 100px;top: 0;bottom: 0;z-index: -1;"
v-if=
"model&&slides.length>0&&slideIndex>=0"
>
v-if=
"model&&
model==1&&
slides.length>0&&slideIndex>=0"
>
<div
class=
"export-img-dialog"
>
<div
class=
"thumbnails-view"
>
<div
class=
"thumbnails"
ref=
"FeatureImgRef"
>
...
...
@@ -158,6 +158,7 @@
import
useExport
from
'@/hooks/useExport'
import
ThumbnailSlide
from
'@/views/components/ThumbnailSlide/index.vue'
import
AliyunUpload
from
'@/utils/upload/aliyun'
import
useEditor
from
'@/utils/Editor/index'
const
datas
=
reactive
({
DataSource
:{},
...
...
@@ -192,6 +193,7 @@
const
FeatureImgRef
=
ref
(
null
)
const
{
exportFeatureImg
}
=
useExport
()
const
{
setNewDatasList
}
=
useEditor
()
watch
(()
=>
datas
.
DataSource
.
pageType
,
(
n
,
o
)
=>
{
...
...
@@ -211,9 +213,9 @@
if
(
item
.
type
==
"text"
||
item
.
type
==
"image"
)
{
item
.
TemplateList
=
JSON
.
parse
(
JSON
.
stringify
(
TemplateList
))
item
.
TemplateDataSource
=
{
Content
:
''
,
Name
:
''
,
Id
:
null
,
Content
:
item
.
TemplateDataSource
.
Content
,
Name
:
item
.
TemplateDataSource
.
Name
,
Id
:
item
.
TemplateDataSource
.
Id
,
}
if
(
datas
.
DataSource
.
pageType
!=
1
){
let
index
=
item
.
TemplateDataSource
&&
item
.
TemplateDataSource
.
index
>=
0
?
item
.
TemplateDataSource
.
index
:
null
as
Number
...
...
@@ -309,6 +311,7 @@
// 所有数据源
const
AllDataSource
=
()
=>
{
setNewDatasList
(
datas
.
DataSource
)
getPageType
()
datas
.
DataSource
.
DataSourceOverlay
=
!
datas
.
DataSource
.
DataSourceOverlay
return
...
...
src/views/Editor/index.vue
View file @
4a302fb1
<
template
>
<div
class=
"pptist-editor"
>
<EditorHeader
class=
"layout-header"
/>
<div
class=
"layout-content"
>
...
...
@@ -28,6 +29,23 @@
>
<ExportDialog
/>
</Modal>
<div
v-if=
"model&&model==3"
style=
"opacity: 1;position: fixed;left: 0;right: 0; top: 0;bottom: 0;overflow: auto;z-index: 99999999;"
>
<div
class=
"export-img-dialog"
>
<div
class=
"thumbnails-view"
>
<div
class=
"thumbnails"
v-for=
"slide in slides"
>
<ThumbnailSlide
class=
"thumbnail"
:key=
"slide.id"
:slide=
"slide"
:size=
"viewportRatio==0.7069?1754:1240"
/>
</div>
</div>
</div>
</div>
</
template
>
<
script
lang=
"ts"
setup
>
...
...
@@ -51,11 +69,13 @@ import Modal from '@/components/Modal.vue'
import
DataaSource
from
'./DataaSource/index.vue'
import
ConfigService
from
'@/services/ConfigService'
import
ThumbnailSlide
from
'@/views/components/ThumbnailSlide/index.vue'
const
slidesStore
=
useSlidesStore
()
const
TemplateTypeStore
=
useScreenStore
()
const
TempDataSourceStore
=
useScreenStore
()
const
{
slides
,
slideIndex
}
=
storeToRefs
(
slidesStore
)
const
{
TemplateType
,
ConfigId
,
TempId
}
=
storeToRefs
(
TemplateTypeStore
)
const
{
slides
,
slideIndex
,
viewportRatio
}
=
storeToRefs
(
slidesStore
)
const
{
model
,
TemplateType
,
ConfigId
,
TempId
}
=
storeToRefs
(
TemplateTypeStore
)
const
pageTypesList
=
ref
([]
as
any
)
const
searchData
=
ref
({}
as
any
)
searchData
.
value
=
inject
(
injectKeyTemplate
)
...
...
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