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
4d0d9ec2
Commit
4d0d9ec2
authored
Jun 25, 2025
by
罗超
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
临时提交
parent
3e0854f4
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
631 additions
and
7 deletions
+631
-7
package.json
package.json
+13
-1
common.css
src/assets/styles/common.css
+54
-0
main.ts
src/main.ts
+1
-0
京都双宿~双温泉+双京都+独家安排:京都夜游+京都和服体验+绝景氛围 (百万湛藍粉蝶花+梦幻海洋紫藤花+富士山芝樱庆典)+独家祕境:京都三千院+世外桃源:美秀美术馆+世界唯一:榻榻米星巴克+东京浅草寺(川航 阪东7日) 【6个正餐+夜游京都】.txt
...院+世外桃源:美秀美术馆+世界唯一:榻榻米星巴克+东京浅草寺(川航 阪东7日) 【6个正餐+夜游京都】.txt
+2
-0
icon.ts
src/plugins/icon.ts
+17
-1
router.ts
src/router/router.ts
+10
-3
common.ts
src/utils/common.ts
+5
-0
Index.vue
src/views/project/Editor/Index.vue
+31
-0
Editor.vue
src/views/project/components/Editor/Editor.vue
+266
-0
EditorDayList.vue
src/views/project/components/Editor/EditorDayList.vue
+92
-0
EditorHeader.vue
src/views/project/components/Editor/EditorHeader.vue
+55
-0
TextEditor.vue
src/views/project/components/Editor/TextEditor.vue
+54
-0
TourItinerary.vue
src/views/project/components/Editor/TourItinerary.vue
+23
-0
vue.config.js
vue.config.js
+8
-2
No files found.
package.json
View file @
4d0d9ec2
...
@@ -15,6 +15,18 @@
...
@@ -15,6 +15,18 @@
"
@hcaptcha/vue3-hcaptcha
"
:
"^1.3.0"
,
"
@hcaptcha/vue3-hcaptcha
"
:
"^1.3.0"
,
"
@icon-park/vue-next
"
:
"^1.4.2"
,
"
@icon-park/vue-next
"
:
"^1.4.2"
,
"
@mapbox/mapbox-gl-language
"
:
"^1.0.1"
,
"
@mapbox/mapbox-gl-language
"
:
"^1.0.1"
,
"
@tiptap/extension-blockquote
"
:
"^2.8.0"
,
"
@tiptap/extension-bubble-menu
"
:
"^2.9.1"
,
"
@tiptap/extension-heading
"
:
"^2.8.0"
,
"
@tiptap/extension-highlight
"
:
"^2.8.0"
,
"
@tiptap/extension-horizontal-rule
"
:
"^2.8.0"
,
"
@tiptap/extension-link
"
:
"^2.9.1"
,
"
@tiptap/extension-text-align
"
:
"^2.8.0"
,
"
@tiptap/extension-typography
"
:
"^2.7.4"
,
"
@tiptap/extension-underline
"
:
"^2.8.0"
,
"
@tiptap/pm
"
:
"^2.7.4"
,
"
@tiptap/starter-kit
"
:
"^2.7.4"
,
"
@tiptap/vue-3
"
:
"^2.7.4"
,
"
@types/ali-oss
"
:
"^6.16.11"
,
"
@types/ali-oss
"
:
"^6.16.11"
,
"
@types/opentype.js
"
:
"^1.3.8"
,
"
@types/opentype.js
"
:
"^1.3.8"
,
"
@types/psd
"
:
"^3.4.3"
,
"
@types/psd
"
:
"^3.4.3"
,
...
@@ -64,7 +76,7 @@
...
@@ -64,7 +76,7 @@
"
svg-pathdata
"
:
"^6.0.3"
,
"
svg-pathdata
"
:
"^6.0.3"
,
"
tinycolor2
"
:
"^1.6.0"
,
"
tinycolor2
"
:
"^1.6.0"
,
"
tippy.js
"
:
"^6.3.7"
,
"
tippy.js
"
:
"^6.3.7"
,
"
vue
"
:
"^3.
4.21
"
,
"
vue
"
:
"^3.
5.9
"
,
"
vue-konva
"
:
"^3.0.2"
,
"
vue-konva
"
:
"^3.0.2"
,
"
vue-picture-cropper
"
:
"^0.7.0"
,
"
vue-picture-cropper
"
:
"^0.7.0"
,
"
vue-router
"
:
"^4.0.13"
,
"
vue-router
"
:
"^4.0.13"
,
...
...
src/assets/styles/common.css
View file @
4d0d9ec2
...
@@ -75,6 +75,21 @@ page {
...
@@ -75,6 +75,21 @@ page {
line-height
:
1.375rem
;
line-height
:
1.375rem
;
letter-spacing
:
0.00714em
;
letter-spacing
:
0.00714em
;
}
}
h3
{
font-size
:
18px
!important
;
}
hr
{
border
:
none
;
border-top
:
1px
solid
#e0e0e0
!important
;
}
blockquote
{
border-left
:
5px
solid
#e6e7e8
!important
;
padding-left
:
30px
!important
;
margin
:
16px
0
!important
;
font-size
:
14px
!important
;
color
:
#999
!important
;
font-style
:
normal
!important
;
}
.text-success
{
.text-success
{
color
:
#20af6e
!important
;
color
:
#20af6e
!important
;
}
}
...
@@ -202,6 +217,38 @@ page {
...
@@ -202,6 +217,38 @@ page {
.borders-light
{
.borders-light
{
border
:
1px
solid
#F1f2f4
;
border
:
1px
solid
#F1f2f4
;
}
}
.card-h2
{
margin
:
0
;
color
:
#000E1A
;
font-weight
:
700
;
font-size
:
24px
;
line-height
:
32px
;
}
.draw-close
{
position
:
absolute
;
width
:
54px
;
height
:
54px
;
line-height
:
54px
;
text-align
:
center
;
cursor
:
pointer
;
border-top-left-radius
:
8px
;
border-bottom-left-radius
:
8px
;
background-color
:
var
(
--el-color-primary
);
left
:
-54px
;
top
:
100px
;
font-size
:
30px
;
color
:
#f1f2f4
;
}
.customer-drawer
{
overflow
:
unset
!important
;
}
.customer-drawer
.el-drawer__header
{
margin
:
0
;
padding
:
20px
;
}
.customer-drawer
.el-drawer__body
{
padding
:
0px
;
}
.transparent-borders
{
.transparent-borders
{
border
:
1px
solid
transparent
;
border
:
1px
solid
transparent
;
}
}
...
@@ -313,6 +360,10 @@ page {
...
@@ -313,6 +360,10 @@ page {
.q-pa-xl
{
.q-pa-xl
{
padding
:
30px
;
padding
:
30px
;
}
}
.q-pa-none
{
padding
:
0px
!important
;
}
.display-none
{
.display-none
{
display
:
none
;
display
:
none
;
}
}
...
@@ -371,6 +422,9 @@ page {
...
@@ -371,6 +422,9 @@ page {
.q-ma-no
{
.q-ma-no
{
padding
:
0
!important
padding
:
0
!important
}
}
.q-ma-none
{
margin
:
0
!important
;
}
.q-ma-md
{
.q-ma-md
{
margin
:
10px
margin
:
10px
}
}
...
...
src/main.ts
View file @
4d0d9ec2
...
@@ -22,6 +22,7 @@ import router from './router'
...
@@ -22,6 +22,7 @@ import router from './router'
import
ElementPlus
from
'element-plus'
import
ElementPlus
from
'element-plus'
import
zhCn
from
'element-plus/es/locale/lang/zh-cn'
import
zhCn
from
'element-plus/es/locale/lang/zh-cn'
const
app
=
createApp
(
App
)
const
app
=
createApp
(
App
)
app
.
use
(
router
)
app
.
use
(
router
)
const
pinia
=
createPinia
()
const
pinia
=
createPinia
()
...
...
src/mocks/京都双宿~双温泉+双京都+独家安排:京都夜游+京都和服体验+绝景氛围 (百万湛藍粉蝶花+梦幻海洋紫藤花+富士山芝樱庆典)+独家祕境:京都三千院+世外桃源:美秀美术馆+世界唯一:榻榻米星巴克+东京浅草寺(川航 阪东7日) 【6个正餐+夜游京都】.txt
0 → 100644
View file @
4d0d9ec2
[{"id":"import-slide-47","pageType":1,"elements":[{"id":"img_1973","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171025246.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":-45,"width":1344,"top":-36,"height":1790,"rotate":0,"lock":false,"layerName":"editor_1","groupId":""},{"id":"img_1974","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171025615.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":57,"width":364,"top":1436,"height":185,"rotate":0,"lock":false,"layerName":"editor_2","groupId":""},{"id":"img_1976","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171025923.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":827,"width":366,"top":1435,"height":187,"rotate":0,"lock":false,"layerName":"editor_4","groupId":""},{"type":"image","id":"vmQd0-iHiK","src":"https://im.oytour.com/pptist/desgin/1709032073245.png","width":1293.5032729111272,"height":1651.0132052851748,"left":-5.75163645556354,"top":-9.337076739833236,"fixedRatio":true,"rotate":0},{"type":"image","id":"W9PZ6KVTEA","src":"https://imgfile.oytour.com/Upload/DMC/KaTTQEQEGkT3S55RTFT4xcBKJ7PANHCw.png","width":365.97321401869647,"height":217.78774085775188,"left":62.96685383699166,"top":1419.606129571124,"fixedRatio":true,"rotate":0},{"type":"image","id":"HfWTgA5iaQ","src":"https://imgfile.oytour.com/Upload/DMC/20190504104619430.jpg","width":370.2733197209461,"height":231.9317452214849,"left":835.8589926833419,"top":1416.6123589132776,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[0,8.256880733944955],[100,100]]}},{"type":"image","id":"yiPn-S6HG6","src":"https://imgfile.oytour.com/Upload/DMC/M3szSQeJ4Xwm6Mfh44CiihjmFDr6ACPd.jpg","width":389.7179853666837,"height":209.09373263002672,"left":446.14100731665815,"top":1423.9531336849866,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[0,19.354838709677416],[100,100]]}},{"id":"img_1977","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171026002.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":-5.499999999999956,"width":1265,"top":1166.1491577335375,"height":587.8508422664625,"rotate":0,"lock":false,"layerName":"bg","groupId":"","flipH":false,"flipV":false},{"id":"img_1982","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171026166.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":311,"width":640,"top":659,"height":5,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"img_1983","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171026189.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":311,"width":640,"top":720,"height":5,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"img_1984","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171026224.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":436,"width":410,"top":1659,"height":60,"rotate":0,"lock":true,"layerName":"logo","groupId":""},{"id":"img_1985","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171026251.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":327.41077441077437,"width":213.50000000000003,"top":659,"height":61.00000000000001,"rotate":0,"lock":false,"layerName":"bg","groupId":""},{"id":"text_1988","type":"text","left":170,"width":227,"top":435,"height":198,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 178px;\">京</span></p>","defaultFontName":"SourceHanSerifCN-Regular,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(55,3,3,1.00)","fill":"","lineHeight":1,"wordSpace":9,"vertical":false,"contentStr":"心","layerName":"心","groupId":"","clip":false,"stroke":""},{"id":"text_1989","type":"text","left":589,"width":213.99999999999994,"top":450,"height":198,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 178px;\">双</span></p>","defaultFontName":"SourceHanSerifCN-Regular,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(228,56,56,1.00)","fill":"","lineHeight":1,"wordSpace":9,"vertical":false,"contentStr":"新","layerName":"新","groupId":"","clip":false,"stroke":""},{"id":"text_1992","type":"text","left":768,"width":186.6672504708098,"top":485.505,"height":164.984375,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 144.01px;\">宿</span></p>","defaultFontName":"SourceHanSerifCN-Regular,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(55,3,3,1.00)","fill":"","lineHeight":1.0067803575097596,"wordSpace":7.3004999999999995,"vertical":false,"contentStr":"西","layerName":"西","groupId":"","clip":false,"stroke":""},{"id":"text_1994","type":"text","left":343,"width":278.5216572504708,"top":367,"height":263,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 243px;\">都</span></p>","defaultFontName":"SourceHanSerifCN-Bold,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(55,3,3,1.00)","fill":"","lineHeight":1,"wordSpace":12.25,"vertical":false,"contentStr":"悦","layerName":"悦","groupId":"","clip":false,"stroke":""},{"id":"text_1995","type":"text","left":155.04410413476265,"width":879.5912880721456,"top":737.0058873574953,"height":70.390625,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 42px;\">双温泉+双京都+独家安排:京都古街夜游</span></p>","defaultFontName":"SourceHanSerifCN-SemiBold,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(255,255,255,1.00)","fill":"","lineHeight":1.2,"wordSpace":6,"vertical":false,"contentStr":"基督城·后镇·但尼丁·罗托鲁阿·奥克兰","layerName":"基督城·后镇·但尼丁·罗托鲁阿·奥克兰","groupId":"","clip":false,"stroke":""},{"id":"text_1998","type":"text","left":303.1163427865363,"width":754.618487909397,"top":795.8125,"height":63.1875,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 24px;\">绝景氛围 (百万湛藍粉蝶花+梦幻海洋紫藤花+富士山芝樱庆典)</span></p>","defaultFontName":"SourceHanSerifCN-ExtraLight,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(255,255,255,1.00)","fill":"","lineHeight":1.8,"wordSpace":2,"vertical":false,"contentStr":"Professional small package group to enjoy the vacation time","layerName":"Professional small package group to enjoy the vacation time","groupId":"","clip":false,"stroke":""},{"type":"text","id":"ucjUS7lhJA","left":385.27122742577285,"top":648.0078125,"width":155.63954698500152,"height":83,"content":"<p style=\"\"><span style=\"font-size: 42px;\"><span style=\"color: #ffffff;\">7日游</span></span></p>","rotate":0,"defaultFontName":"Microsoft Yahei","defaultColor":"#333","vertical":false}],"background":{"type":"solid","color":"#ffffff"},"isTripItems":false},{"id":"import-slide-28","pageType":1,"elements":[{"id":"img_1927","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171026821.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":810,"width":384,"top":116,"height":316,"rotate":0,"lock":false,"layerName":"editor_2","groupId":""},{"id":"img_1928","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171026881.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":57,"width":385,"top":118,"height":310,"rotate":0,"lock":false,"layerName":"editor_1","groupId":""},{"id":"img_1929","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171026948.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":433,"width":381,"top":420,"height":310,"rotate":0,"lock":false,"layerName":"editor_3","groupId":""},{"id":"img_1930","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171026994.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":93,"width":527,"top":1056,"height":540,"rotate":0,"lock":false,"layerName":"editor_4","groupId":""},{"type":"image","id":"p8kUvw0ImC","src":"https://imgfile.oytour.com/Upload/DMC/202211220629368950000000072.jpg","width":562.5522538109676,"height":315.2466736331992,"left":352.9307696462404,"top":420,"fixedRatio":true,"rotate":0},{"id":"img_1931","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027065.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":628,"width":530,"top":1055,"height":540,"rotate":0,"lock":false,"layerName":"editor_5","groupId":""},{"type":"image","id":"ic-DQtai00","src":"https://imgfile.oytour.com/Upload/DMC/zPSFeKDhBFSABaDNknzdGwRr6DSSjahk.jpg","width":1075,"height":640.6565656565656,"left":82.5,"top":988.3418506274869,"fixedRatio":true,"rotate":0},{"type":"image","id":"Hbqb0hwyuQ","src":"https://imgfile.oytour.com/Upload/DMC/S7mXzaT6AweBhSQPx2dD4NYKdTMZcX8G.png","width":413.7872340425531,"height":312,"left":815.473951637588,"top":116,"fixedRatio":true,"rotate":0},{"type":"image","id":"WA6HEzvyXC","src":"https://imgfile.oytour.com/Upload/DMC/20200225044709684.jpg","width":455.77745241581255,"height":304,"left":47.8579795021962,"top":116,"fixedRatio":true,"rotate":0},{"id":"img_1932","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027146.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":-78,"width":1344,"top":-18,"height":1790,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"img_1933","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027269.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":634,"width":534,"top":1059,"height":521,"rotate":0,"lock":true,"layerName":"editor_5_before_1","groupId":""},{"id":"img_1934","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027286.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":82,"width":535,"top":1059,"height":521,"rotate":0,"lock":true,"layerName":"editor_4_before_1","groupId":""},{"id":"img_1935","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027309.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":433,"width":381,"top":417,"height":313,"rotate":0,"lock":true,"layerName":"editor_3_before_1","groupId":""},{"id":"img_1936","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027336.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":807,"width":390,"top":109,"height":317,"rotate":0,"lock":true,"layerName":"editor_2_before_1","groupId":""},{"id":"img_1937","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027363.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":54,"width":388,"top":113,"height":323,"rotate":0,"lock":true,"layerName":"editor_1_before_1","groupId":""},{"id":"img_1938","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027381.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":442,"width":410,"top":1655,"height":60,"rotate":0,"lock":true,"layerName":"logo","groupId":""},{"id":"img_1939","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027414.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":600,"width":51,"top":176,"height":51,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"img_1940","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027437.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":62,"width":1125,"top":748,"height":4,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"img_1941","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027456.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":607,"width":36,"top":182,"height":33,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"img_1942","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027476.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":218,"width":51,"top":471,"height":51,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"img_1943","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027498.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":225,"width":36,"top":477,"height":33,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"img_1944","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027520.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":980,"width":51,"top":471,"height":51,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"img_1945","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027538.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":987,"width":36,"top":477,"height":33,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"img_1946","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027560.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":275,"width":713,"top":926,"height":5,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"text_1947","type":"text","left":230,"width":870,"top":794,"height":89.59375,"rotate":0,"opacity":1,"content":"<p><span style=\"text-align:left; font-size:58px; font-weight:normal;text-decoration:none ;\">温馨酒店·奢华与舒适并存</span></p>","defaultFontName":"SourceHanSerifCN-Heavy,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(77,58,65,1.00)","fill":"","lineHeight":1.2,"wordSpace":12,"vertical":false,"contentStr":"温馨酒店·奢华与舒适并存","layerName":"温馨酒店·奢华与舒适并存","groupId":"","clip":false,"stroke":""},{"id":"text_1949","type":"text","left":510.2068965517242,"width":247.99999999999997,"top":283.8490358126722,"height":119.140625,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 22px;\">京都二条Urban高级酒店或京都地区酒店或</span><span style=\"font-size: 20px;\">同级</span></p>","defaultFontName":"SourceHanSerifCN-Regular,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(58,20,40,1.00)","fill":"","lineHeight":1.5,"wordSpace":1.8,"vertical":false,"contentStr":"四星酒店Copthorne或 HolidayInn 同级","layerName":"四星酒店Copthorne或 HolidayInn 同级","groupId":"","clip":false,"stroke":""},{"id":"text_1951","type":"text","left":886,"width":289.9438078784766,"top":522,"height":53.046875,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 22px;\">成田希尔顿/日航酒店</span></p>","defaultFontName":"SourceHanSerifCN-Heavy,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(77,58,65,1.00)","fill":"","lineHeight":1.5,"wordSpace":4.800000000000001,"vertical":false,"contentStr":"享受五星特有的集\r“宿、食、行、餐”","layerName":"享受五星特有的集 “宿、食、行、餐”","groupId":"","clip":false,"stroke":""},{"id":"text_1952","type":"text","left":140,"width":232,"top":524,"height":53.046875,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 22px;\">富士山温泉酒店</span></p>","defaultFontName":"SourceHanSerifCN-Heavy,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(58,20,40,1.00)","fill":"","lineHeight":1.5,"wordSpace":2.4000000000000004,"vertical":false,"contentStr":"让您尽享温馨舒适\r享安全的住宿环境","layerName":"让您尽享温馨舒适 享安全的住宿环境","groupId":"","clip":false,"stroke":""},{"id":"text_1953","type":"text","left":118.34858757062148,"width":262.30282485875705,"top":577.6233368165996,"height":110,"rotate":0,"opacity":1,"content":"<p style=\"text-align: center;\"><span style=\"font-size: 20px;\">富士山石和本栖酒店或富士山春日局温泉酒店或富士山地区温泉酒店或同级</span></p>","defaultFontName":"SourceHanSerifCN-Regular,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(58,20,40,1.00)","fill":"","lineHeight":1.5,"wordSpace":1.8,"vertical":false,"contentStr":"四星酒店AucklandCity Hotel或同级","layerName":"四星酒店AucklandCity Hotel或同级","groupId":"","clip":false,"stroke":""},{"id":"text_1954","type":"text","left":873,"width":284.9999999999999,"top":595,"height":86.65625,"rotate":0,"opacity":1,"content":"<p style=\"text-align: center;\"><span style=\"font-size: 20px;\">四成田日航酒店或成田希尔顿酒店或成田地区酒店 或同级</span></p>","defaultFontName":"SourceHanSerifCN-Regular,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(77,58,65,1.00)","fill":"","lineHeight":1.6666666666666667,"wordSpace":0,"vertical":false,"contentStr":"四星酒店CopthorneHotel\rRotorua 或同级","layerName":"四星酒店CopthorneHotel Rotorua 或同级","groupId":"","clip":false,"stroke":""},{"id":"text_1955","type":"text","left":369.00000000000006,"width":556,"top":917.5827976737068,"height":64.796875,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 28px;\">日式四-五星酒店+2晚温泉酒店</span></p>","defaultFontName":"SourceHanSerifCN-SemiBold,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(77,58,65,1.00)","fill":"","lineHeight":1.6,"wordSpace":6,"vertical":false,"contentStr":"品质三星&四星酒店,2 晚皇后镇\r尽享温馨舒适安全的住宿环境","layerName":"品质三星&四星酒店,2 晚皇后镇 尽享温馨舒适安全的住宿环境","groupId":"","clip":false,"stroke":""},{"type":"text","id":"6ECy0jAh7S","left":373.9400367309458,"top":867.7337618610346,"width":499.11992653810836,"height":74,"content":"<p style=\"\"><span style=\"font-size: 36px;\"><span style=\"font-family: Microsoft Yahei;\"><span style=\"color: #333;\">印象独家安排:2晚京都酒店</span></span></span></p>","rotate":0,"defaultFontName":"Microsoft Yahei","defaultColor":"#333","vertical":false},{"type":"text","id":"4ptzxJ32Rd","left":551.5819807268084,"top":230.5,"width":206.62491582491583,"height":68.75,"content":"<p style=\"\"><span style=\"font-size: 32px;\"><span style=\"font-family: SourceHanSerifCN-Heavy,AdobeInvisFont,AdobeHeitiStd-Regular;\"><span style=\"color: rgba(58,20,40,1.00);\">京都酒店</span></span></span></p>","rotate":0,"defaultFontName":"Microsoft Yahei","defaultColor":"#333","vertical":false}],"background":{"type":"solid","color":"#ffffff"},"isTripItems":false},{"id":"import-slide-54","pageType":1,"elements":[{"type":"image","id":"FbwaXRkvZX","src":"https://imgfile.oytour.com/Upload/DMC/weHP5T6ky4WQpRsSGEt4znHPkrb72hcz.jpg","width":1250.1566862344735,"height":936.1547728432873,"left":-1.0082380659528498,"top":-33.68511145142074,"fixedRatio":true,"rotate":0},{"id":"img_1896","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171028119.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":-1.0082380659528498,"width":1228.5992738056125,"top":1005.7424979293471,"height":751.1388188410915,"rotate":0,"lock":false,"layerName":"editor_1_before_1","groupId":""},{"id":"img_1892","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027869.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":623,"width":540,"top":775,"height":467,"rotate":0,"lock":false,"layerName":"editor_4","groupId":""},{"id":"img_1893","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171027954.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":82,"width":551,"top":1284,"height":372,"rotate":0,"lock":false,"layerName":"editor_5","groupId":""},{"id":"img_1897","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171028143.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":80,"width":548,"top":1274,"height":330,"rotate":0,"lock":true,"layerName":"editor_5_before_1","groupId":""},{"id":"img_1898","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171028171.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":629,"width":544,"top":774,"height":482,"rotate":0,"lock":true,"layerName":"editor_4_before_1","groupId":""},{"id":"img_1899","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171028200.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":80,"width":548,"top":484,"height":447,"rotate":0,"lock":true,"layerName":"editor_3_before_1","groupId":""},{"type":"shape","id":"PZn11z-BVn","left":-6.500000000000009,"top":161.14999999999995,"width":1259,"height":781.7,"viewBox":[200,200],"path":"M 0 0 L 200 0 L 200 200 L 0 200 Z","fill":"#ffffff","fixedRatio":false,"rotate":0},{"type":"image","id":"yYImMyrNkF","src":"https://imgfile.oytour.com/Upload/DMC/20191108065758663.jpg","width":608.8477271672596,"height":605.7706304322148,"left":14.152272832740415,"top":190.72415731621047,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[0,0],[66.66666666666666,100]]}},{"type":"image","id":"vTNaeI6M2O","src":"https://imgfile.oytour.com/Upload/DMC/ahjytsj2ETSENYZTG7QyAb667kPyyDHK.jpg","width":568.3999999999999,"height":382,"left":64.60000000000014,"top":1274,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[0,0],[95.23809523809523,100]]}},{"id":"img_1901","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171028241.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":439,"width":410,"top":1661,"height":60,"rotate":0,"lock":true,"layerName":"logo","groupId":""},{"type":"image","id":"mqTaKeCGoc","src":"https://imgfile.oytour.com/Upload/DMC/202309200427055240000000240.jpg","width":540.0375003861241,"height":482.9999999999999,"left":623,"top":785.7337618610346,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[5.042016806722689,0],[89.07563025210084,100]]}},{"id":"img_1902","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171028272.png","fixedRatio":true,"filters":{"opacity":"0.50"},"left":80.29139883685339,"width":533,"top":807,"height":74,"rotate":0,"lock":false,"layerName":"bg","groupId":""},{"id":"img_1903","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171028293.png","fixedRatio":true,"filters":{"opacity":"0.50"},"left":631,"width":533,"top":1164,"height":79,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"img_1904","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171028325.png","fixedRatio":true,"filters":{"opacity":"0.50"},"left":88,"width":533,"top":1549,"height":57,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"img_1905","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171028350.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":82,"width":540,"top":361,"height":4,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"text_1909","type":"text","left":-1.0082380659528498,"width":364,"top":11.375565764846044,"height":60,"rotate":0,"opacity":1,"content":"<p><span style=\"text-align:left; font-size:16px; font-weight:normal;text-decoration:none ;\">ACFEAST FOR YOUR TASTE BUDS</span></p>","defaultFontName":"SourceHanSerifCN-Light,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(77,58,65,1.00)","fill":"","lineHeight":2,"wordSpace":1.8,"vertical":false,"contentStr":"ACFEAST FOR YOUR TASTE BUDS","layerName":"ACFEAST FOR YOUR TASTE BUDS","groupId":"","clip":false,"stroke":""},{"id":"text_1910","type":"text","left":623,"width":573.3867959843458,"top":217.41432703760427,"height":95,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 60px;\"><span style=\"color: #ffffff;\"><span style=\"background-color: rgba(101,78,87,1);\">属于你的味蕾盛宴</span></span></span></p>","defaultFontName":"SourceHanSerifCN-SemiBold,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(77,58,65,1.00)","fill":"","lineHeight":1.25,"wordSpace":4.800000000000001,"vertical":false,"contentStr":"属于你的味蕾盛宴","layerName":"属于你的味蕾盛宴","groupId":"","clip":false,"stroke":""},{"id":"text_1913","type":"text","left":170.63075604530155,"width":391.618487909397,"top":817.203125,"height":53.59375,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 28px;\">温泉百汇料理/迎宾料理</span></p>","defaultFontName":"SourceHanSerifCN-Medium,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(255,255,255,1.00)","fill":"","lineHeight":1.2,"wordSpace":6,"vertical":false,"contentStr":"南岛的风景尊滴很美","layerName":"南岛的风景尊滴很美","groupId":"","clip":false,"stroke":""},{"id":"img_1916","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171028435.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":669,"width":40,"top":519,"height":33,"rotate":0,"lock":true,"layerName":"美食","groupId":""},{"id":"img_1917","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171028452.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":720,"width":40,"top":1310,"height":33,"rotate":0,"lock":true,"layerName":"美食 拷贝 2","groupId":""},{"id":"img_1918","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171028473.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":117,"width":40,"top":940,"height":33,"rotate":0,"lock":true,"layerName":"美食 拷贝","groupId":""},{"id":"text_1919","type":"text","left":169.94000000000005,"width":393,"top":931,"height":82.59375,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 28px;\">正统京风汤豆腐迎宾料理</span></p><p style=\"\"><span style=\"font-size: 28px;\"> </span></p>","defaultFontName":"SourceHanSerifCN-Bold,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(77,58,65,1.00)","fill":"","lineHeight":1.2,"wordSpace":3,"vertical":false,"contentStr":"SKYLINE 山顶自助晚餐","layerName":"SKYLINE 山顶自助晚餐","groupId":"","clip":false,"stroke":""},{"id":"text_1921","type":"text","left":48.1214905564064,"width":525.2376382508082,"top":995.9999999999999,"height":212,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 24px;\">到了京都不得不提的就是京都名物「湯豆腐」。自江户时代起,豆腐就已闻名全国。当时的在江户上演的歌舞伎甚至也有提及南禅寺汤豆腐的场面,而与其相关的浮世绘也流传至今。</span></p>","defaultFontName":"SourceHanSerifCN-Light,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(77,58,65,1.00)","fill":"","lineHeight":2,"wordSpace":null,"vertical":false,"contentStr":"晚餐部分 强烈建议 2点半之后上山 这样可以看到山顶由白天转成夜晚 而且在山上看落日 简直不敢相信。5次 luge+ 缆车+dinner是137 但是只要30块 就可以升级成靠窗边的位置 并且送一杯鸡尾酒","layerName":"晚餐部分 强烈建议 2点半之后上山 这样可以看到山顶由白天转成夜晚 而且在山上看落日 简直不敢相信。5次 luge+ 缆车+d","groupId":"","clip":false,"stroke":""},{"id":"text_1922","type":"text","left":736,"width":381.58568738229775,"top":1182,"height":53.59375,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 28px;\">山梨~河口湖餺飥套餐</span></p>","defaultFontName":"SourceHanSerifCN-Medium,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(255,255,255,1.00)","fill":"","lineHeight":1.2,"wordSpace":6,"vertical":false,"contentStr":"吃着晚餐看落日余辉","layerName":"吃着晚餐看落日余辉","groupId":"","clip":false,"stroke":""},{"id":"text_1923","type":"text","left":774.0000000000001,"width":343.5856873822977,"top":1299.703125,"height":53.59375,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 28px;\">山梨~河口湖餺飥套餐</span></p>","defaultFontName":"SourceHanSerifCN-Bold,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(77,58,65,1.00)","fill":"","lineHeight":1.2,"wordSpace":3,"vertical":false,"contentStr":"绿龙酒馆自助餐","layerName":"绿龙酒馆自助餐","groupId":"","clip":false,"stroke":""},{"id":"text_1924","type":"text","left":150,"width":423,"top":1549,"height":53.59375,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 28px;\">正统京风汤豆腐迎宾料理</span></p>","defaultFontName":"SourceHanSerifCN-Medium,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(255,255,255,1.00)","fill":"","lineHeight":1.2,"wordSpace":3,"vertical":false,"contentStr":"龙虾鲍鱼是凯库拉当天打捞","layerName":"龙虾鲍鱼是凯库拉当天打捞","groupId":"","clip":false,"stroke":""},{"id":"text_1925","type":"text","left":710.2071563088513,"width":381.58568738229764,"top":1366.3947727574136,"height":260,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 24px;\">富士山餺飥面(ほうとう)绝对就是当地美食尝鲜的首选。餺飥面这个山梨县、河口湖最具代表性的乡土料理,究竟有什么独特魅力吸引人手一碗</span></p>","defaultFontName":"SourceHanSerifCN-Regular,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(77,58,65,1.00)","fill":"","lineHeight":2,"wordSpace":1.8,"vertical":false,"contentStr":"绿龙酒馆marquee的午餐是自助餐的形式,一般是有supervisor依次去每桌介绍用餐规则和其他事项,然后一桌一桌前往取餐区。","layerName":"绿龙酒馆marquee的午餐是自助餐的形式,一般是有supervisor依次去每桌介绍用餐规则和其他事项,然后一桌一桌前往取餐","groupId":"","clip":false,"stroke":""},{"type":"image","id":"ItHYHxIO3k","src":"https://imgfile.oytour.com/Upload/DMC/w8kwNTxbxA46MRsbNskRfdW8d8WpnTX8.png","width":530,"height":388.6809237593054,"left":633,"top":361,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[0.9090909090909091,0],[91.81818181818181,100]]}}],"background":{"type":"solid","color":"#ffffff"},"isTripItems":false},{"id":"import-slide-51","pageType":1,"elements":[{"id":"img_1810","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171029321.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":80,"width":652,"top":1301.6851114514209,"height":370,"rotate":0,"lock":false,"layerName":"editor_6","groupId":""},{"id":"img_1811","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171029391.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":417,"width":343,"top":712,"height":242,"rotate":0,"lock":false,"layerName":"editor_3","groupId":""},{"id":"img_1812","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171029436.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":57,"width":349,"top":712,"height":245,"rotate":0,"lock":false,"layerName":"editor_2","groupId":""},{"id":"img_1813","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171029487.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":827,"width":365,"top":965,"height":249,"rotate":0,"lock":false,"layerName":"editor_5","groupId":""},{"id":"img_1814","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171029527.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":503,"width":417,"top":405,"height":221,"rotate":0,"lock":false,"layerName":"editor_1","groupId":""},{"id":"img_1815","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171029571.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":478,"width":349,"top":998,"height":247,"rotate":0,"lock":false,"layerName":"editor_4","groupId":""},{"id":"img_1816","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171029615.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":718,"width":470,"top":1236,"height":375,"rotate":0,"lock":false,"layerName":"editor_7","groupId":""},{"id":"img_1817","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171029682.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":-41.10064279155189,"width":1327,"top":-520.5,"height":2273,"rotate":0,"lock":false,"layerName":"bg","groupId":""},{"id":"img_1818","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171029953.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":711,"width":470,"top":1245,"height":362,"rotate":0,"lock":true,"layerName":"editor_7_before_1","groupId":""},{"type":"image","id":"WnlALXLtvn","src":"https://im.oytour.com/pptist/desgin/1709033848116.png","width":1371.9506932369743,"height":1760.6700563207837,"left":-109.719461916956,"top":0,"fixedRatio":true,"rotate":0},{"type":"image","id":"D3kJQxd2bM","src":"https://imgfile.oytour.com/Upload/DMC/202309260358343530000000208.jpg","width":1386.418564795662,"height":1780.3127637825514,"left":-55.57030418341858,"top":-19.642707461767728,"fixedRatio":true,"rotate":0},{"type":"shape","id":"sbYEcqdkeo","left":3.433707673983201,"top":164.99945550450923,"width":1232.155317338778,"height":1270.939867279224,"viewBox":[1232.155317338778,1270.939867279224],"path":"M 0 154.01941466734726 Q 0 0 154.01941466734726 0 L 1078.1359026714308 0 Q 1232.155317338778 0 1232.155317338778 154.01941466734726 L 1232.155317338778 1270.939867279224 L 0 1270.939867279224 Z","fill":"#ffffff","fixedRatio":false,"rotate":0,"pathFormula":"roundRectSameSide","keypoint":0.125},{"id":"img_1821","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030021.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":474,"width":353,"top":998,"height":249,"rotate":0,"lock":false,"layerName":"editor_4_before_1","groupId":""},{"id":"img_1822","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030047.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":416,"width":351,"top":703,"height":253,"rotate":0,"lock":true,"layerName":"editor_3_before_1","groupId":""},{"id":"img_1823","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030079.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":62,"width":352,"top":705,"height":253,"rotate":0,"lock":true,"layerName":"editor_2_before_1","groupId":""},{"id":"img_1824","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030109.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":521,"width":402,"top":401,"height":221,"rotate":0,"lock":true,"layerName":"editor_1_before_1","groupId":""},{"id":"img_1826","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030165.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":798,"width":25,"top":737,"height":40,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"img_1827","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030188.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":95,"width":25,"top":992,"height":40,"rotate":0,"lock":true,"layerName":"bg","groupId":""},{"id":"img_1830","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030297.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":423,"width":410,"top":1657,"height":60,"rotate":0,"lock":true,"layerName":"logo","groupId":""},{"id":"text_1832","type":"text","left":718,"width":459,"top":273.0747883699166,"height":92,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 30px;\"><span style=\"color: rgb(128, 74, 72);\">【人气秘密景点】:大阪舞洲seaside park」</span></span></p>","defaultFontName":"SourceHanSansCN-Heavy,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(255,255,255,1.00)","fill":"","lineHeight":1.2,"wordSpace":6,"vertical":false,"contentStr":"走进新西兰 当一回欢乐旅行人","layerName":"走进新西兰 当一回欢乐旅行人","groupId":"","clip":false,"stroke":""},{"type":"shape","id":"gyTvVuHFUX","left":516,"top":401,"width":404,"height":225,"viewBox":[200,200],"path":"M 0 0 L 200 0 L 200 200 L 0 200 Z","fill":"#ffffff","fixedRatio":false,"rotate":0},{"type":"shape","id":"BgVVlvlihO","left":794.5504669454281,"top":689.5267923793562,"width":340.1106687085247,"height":226.74044580568315,"viewBox":[200,200],"path":"M 0 0 L 200 0 L 200 200 L 0 200 Z","fill":"#ffffff","fixedRatio":false,"rotate":0},{"id":"text_1834","type":"text","left":711.5,"width":524.5890250127615,"top":359,"height":212,"rotate":0,"opacity":1,"content":"<p style=\"text-align: center;\"><span style=\"font-size: 24px;\"><span style=\"background-color: #00000000;\">大阪的舞洲地区“大阪舞洲SeaSide公园”,每到时期,公园内面朝大阪湾的广阔地面上100万株淡蓝色的粉蝶花争相开放。除了在花海里散步,还可以搭乘直升机、滑翔伞从高空俯瞰。</span></span></p>","defaultFontName":"SourceHanSerifCN-Medium,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(101,78,87,1.00)","fill":"","lineHeight":2,"wordSpace":0,"vertical":false,"contentStr":"纯净的空气、湛蓝无垠的大海、牛羊点缀的苍茫草原、皎月深邃的星空、色彩斑斓植被中的城市和乡村……\r新西兰这个不缺蓝天与绿草的国度,会带给你无比的热情和生命力。","layerName":"纯净的空气、湛蓝无垠的大海、牛羊点缀的苍茫草原、皎月深邃的星空、色彩斑斓植被中的城市和乡村…… 新西兰这个不缺蓝天与绿草的国度","groupId":"","clip":false,"stroke":""},{"type":"shape","id":"79zWctwza3","left":51.7,"top":970,"width":411.7,"height":307.3,"viewBox":[200,200],"path":"M 0 0 L 200 0 L 200 200 L 0 200 Z","fill":"#ffffff","fixedRatio":false,"rotate":0},{"id":"text_1839","type":"text","left":774.1325846520333,"width":448.0381997617832,"top":578.4765625,"height":95.046875,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 30px;\"><span style=\"font-family: SourceHanSansCN-Heavy,AdobeInvisFont,AdobeHeitiStd-Regular;\"><span style=\"color: rgb(128, 74, 72);\">【世界唯一】Starbucks·京都二宁板弥荣茶屋店</span></span></span></p>","defaultFontName":"SourceHanSerifCN-Heavy,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(101,78,87,1.00)","fill":"","lineHeight":1.2,"wordSpace":3,"vertical":false,"contentStr":"第一大教堂","layerName":"第一大教堂","groupId":"","clip":false,"stroke":""},{"id":"text_1842","type":"text","left":34.84726048362413,"width":459.5084226646248,"top":1148.2098929822512,"height":83.046875,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 30px;\"><span style=\"font-family: SourceHanSansCN-Heavy,AdobeInvisFont,AdobeHeitiStd-Regular;\"><span style=\"color: rgb(128, 74, 72);\">贝聿铭大作~MIHO美秀美术馆(《桃花源记》照进现实)</span></span></span></p>","defaultFontName":"SourceHanSerifCN-Heavy,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(101,78,87,1.00)","fill":"","lineHeight":1,"wordSpace":3,"vertical":false,"contentStr":"瓦卡蒂普湖","layerName":"瓦卡蒂普湖","groupId":"","clip":false,"stroke":""},{"id":"text_1844","type":"text","left":3.433707673983201,"width":502.9488769780502,"top":1207.5249957461288,"height":236,"rotate":0,"opacity":1,"content":"<p style=\"text-align: center;\"><span style=\"font-size: 24px;\"><span style=\"font-family: SourceHanSerifCN-Medium,AdobeInvisFont,AdobeHeitiStd-Regular;\"><span style=\"color: rgba(101,78,87,1.00);\"><span style=\"background-color: #00000000;\">是世界级建筑大师贝聿铭融合自然与建筑的佳作,光是看建筑,这里就值得您到此走一回!出身纺织世家的小山美秀子本身就是一位收藏家,为了将毕生丰富的收藏与大众分享,便在1990年聘请建筑大师贝聿铭在静谧的山林中兴建美秀美术馆。</span></span></span></span></p>","defaultFontName":"SourceHanSerifCN-Light,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(101,78,87,1.00)","fill":"","lineHeight":1.5,"wordSpace":1.8,"vertical":false,"contentStr":"聆听山与湖与人和谐共处的美好时光。瓦卡蒂普湖由于形状不寻常,而形成了独特“潮汐”","layerName":"聆听山与湖与人和谐共处的美好时光。瓦卡蒂普湖由于形状不寻常,而形成了独特“潮汐”","groupId":"","clip":false,"stroke":""},{"type":"image","id":"e052BwOY9f","src":"https://imgfile.oytour.com/Upload/DMC/2hhJjw6fT8y7wn6ansFXaZY65TrTjZEY.jpg","width":371.15273951637585,"height":268.00820324456686,"left":34.84726048362413,"top":577.9958983777166,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[0,0],[83.33333333333334,90.09009009009009]]}},{"type":"image","id":"PsEXth___R","src":"https://imgfile.oytour.com/Upload/DMC/77hraai8DGEMkcHkT5mj4hYtTrEejxBM.jpg","width":343.5269360269361,"height":270.1640444852567,"left":417,"top":576.9179777573717,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[1.550387596899225,6.422018348623854],[79.06976744186048,98.1651376146789]]}},{"type":"image","id":"wPsXbaMutX","src":"https://im.oytour.com/pptist/desgin/1709042183910.png","width":302.9935199486701,"height":288.9182535608789,"left":42.78408325681053,"top":250.7102202999011,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[0,0],[62.893081761006286,100]]}},{"type":"image","id":"02Pc4QIoDN","src":"https://imgfile.oytour.com/Upload/DMC/y4Y242H7eihSnheRxPQ7PQeHFEadxHRZ.jpg","width":714.1706639267034,"height":535.7497296437188,"left":502.40927972009786,"top":880.3350281603919,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[17.355371900826448,0],[100,85.47008547008546]]}},{"type":"image","id":"GgxGd6mnT6","src":"https://imgfile.oytour.com/Upload/DMC/a227eBsxizWzfBsPNCeQWjtCAH4eMMb6.jpg","width":417.7447448584956,"height":275.67434258573695,"left":35.84331916436537,"top":880.3350281603919,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[0,35.26970954356847],[94.33962264150944,76.76348547717842]]}},{"type":"image","id":"RkQ7OwqdbS","src":"https://im.oytour.com/pptist/desgin/1709044397604.png","width":358.0326016675175,"height":288.91825356087895,"left":353.4673983324825,"top":250.7102202999011,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[14.0625,0],[92.1875,100]]}},{"type":"text","id":"Y0D1ZxKIGZ","left":767,"top":665.953125,"width":444.23616641143445,"height":167.046875,"content":"<p style=\"text-align: center;\"><span style=\"font-size: 24px;\"><span style=\"font-family: SourceHanSerifCN-Medium,AdobeInvisFont,AdobeHeitiStd-Regular;\"><span style=\"color: rgba(101,78,87,1.00);\"><span style=\"background-color: #00000000;\">全球仅此一间,能够体验坐在榻榻米上享用咖啡的新鲜与冲突感,感受一下古色古香的京都二宁坂与求新求变的starbucks咖啡能迸出怎样的新滋味!</span></span></span></span></p>","rotate":0,"defaultFontName":"Microsoft Yahei","defaultColor":"#333","vertical":false},{"type":"text","id":"mNGPGagkZy","left":0,"top":0,"width":600,"height":50,"content":"<div>馆</div>","rotate":0,"defaultFontName":"Microsoft Yahei","defaultColor":"#333","vertical":false}],"background":{"type":"solid","color":"#ffffff"},"isTripItems":false},{"id":"import-slide-87","pageType":1,"elements":[{"id":"img_1777","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030341.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":80,"width":534,"top":332,"height":434,"rotate":0,"lock":false,"layerName":"editor_1","groupId":""},{"id":"img_1778","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030414.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":667.8011230219499,"width":547,"top":359.90056151097497,"height":420,"rotate":0,"lock":false,"layerName":"editor_2","groupId":""},{"id":"img_1779","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030483.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":440,"width":364,"top":1193,"height":393,"rotate":0,"lock":false,"layerName":"editor_4","groupId":""},{"id":"img_1780","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030530.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":69,"width":368,"top":1193,"height":393,"rotate":0,"lock":false,"layerName":"editor_3","groupId":""},{"id":"img_1781","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030577.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":807,"width":369,"top":1196,"height":386,"rotate":0,"lock":false,"layerName":"editor_5","groupId":""},{"id":"img_1782","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030628.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":-59.54129657988787,"width":1328,"top":-1.9999999999999583,"height":1918,"rotate":0,"lock":false,"layerName":"bg","groupId":""},{"id":"img_1783","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030745.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":807,"width":365,"top":1189,"height":397,"rotate":0,"lock":true,"layerName":"editor_5_before_1","groupId":""},{"type":"image","id":"M6EYklfbBH","src":"https://im.oytour.com/pptist/desgin/1709043707203.png","width":1256.8004506638908,"height":1619.3725640315597,"left":0,"top":-1.9999999999999583,"fixedRatio":true,"rotate":0},{"id":"img_1784","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030767.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":442,"width":359,"top":1189,"height":396,"rotate":0,"lock":true,"layerName":"editor_4_before_1","groupId":""},{"id":"img_1785","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030784.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":67,"width":365,"top":1192,"height":394,"rotate":0,"lock":true,"layerName":"editor_3_before_1","groupId":""},{"id":"img_1786","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030807.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":630,"width":539,"top":334,"height":424,"rotate":0,"lock":true,"layerName":"editor_2_before_1","groupId":""},{"type":"shape","id":"K8ynI37ReE","left":67.00000000000003,"top":119.69225094665245,"width":1120.5910158244003,"height":1466.3077490533476,"viewBox":[200,200],"path":"M 0 0 L 200 0 L 200 200 L 0 200 Z","fill":"#ffffff","fixedRatio":false,"rotate":0},{"id":"img_1787","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171030831.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":71,"width":540,"top":332,"height":430,"rotate":0,"lock":true,"layerName":"editor_1_before_1","groupId":""},{"id":"img_1797","type":"image","src":"https://im.oytour.com/pptist/desgin/1706171031049.png","fixedRatio":true,"filters":{"opacity":"1.00"},"left":431,"width":410,"top":1650,"height":60,"rotate":0,"lock":true,"layerName":"logo 拷贝 4","groupId":""},{"id":"text_1799","type":"text","left":416,"width":440,"top":795.5303386081334,"height":66,"rotate":0,"opacity":1,"content":"<p style=\"text-align: center;\"><span style=\"font-size: 46px;\">京都和服体验</span></p>","defaultFontName":"SourceHanSerifCN-Bold,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(83,65,72,1.00)","fill":"","lineHeight":1,"wordSpace":9.600000000000001,"vertical":false,"contentStr":"皇后镇空中缆车","layerName":"皇后镇空中缆车","groupId":"","clip":false,"stroke":""},{"id":"text_1800","type":"text","left":475.16025182916457,"width":335,"top":861.5303386081334,"height":53.046875,"rotate":0,"opacity":1,"content":"<p><span style=\"text-align:left; font-size:22px; font-weight:normal;text-decoration:none ;\">置身于梦幻般的绝美意境</span></p>","defaultFontName":"SourceHanSerifCN-SemiBold,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(77,58,65,1.00)","fill":"","lineHeight":1.5,"wordSpace":4.800000000000001,"vertical":false,"contentStr":"置身于梦幻般的绝美意境","layerName":"置身于梦幻般的绝美意境","groupId":"","clip":false,"stroke":""},{"id":"text_1801","type":"text","left":227.83426918495823,"width":868,"top":906.4640462821168,"height":164,"rotate":0,"opacity":1,"content":"<p style=\"text-align: center;\"><span style=\"font-size: 24px;\">和服可分为公家着物和武家着物。现今所谓和服实即古时之小袖, 小袖的表着化始自室町时代 ,贵族的下着白小袖逐渐成为庶民的表衣。 “着物”除了包括“吴服\"之外还包括肩衣袴、源自平安时代的狩衣等等,这些都非源自吴服,而是源自本土的传统服饰。特别安排穿和服体验,在京都留下美好的回忆。</span></p>","defaultFontName":"SourceHanSerifCN-SemiBold,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(77,58,65,1.00)","fill":"","lineHeight":1.5,"wordSpace":0,"vertical":false,"contentStr":"新西兰的皇后镇Queenstown拥有世间稀缺的仙境美景,因而取名皇后镇位于新西兰南岛南阿尔卑斯山脚下,瓦卡蒂普湖畔的小镇,被列入全世界最美小镇Top5","layerName":"新西兰的皇后镇Queenstown拥有世间稀缺的仙境美景,因而取名皇后镇位于新西兰南岛南阿尔卑斯山脚下,瓦卡蒂普湖畔的小镇,被","groupId":"","clip":false,"stroke":""},{"id":"text_1808","type":"text","left":437,"width":399,"top":122,"height":68,"rotate":0,"opacity":1,"content":"<p><span style=\"text-align:left; font-size:48px; font-weight:normal;text-decoration:none ;\">打卡绝美景色</span></p>","defaultFontName":"SourceHanSerifCN-Bold,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(77,58,65,1.00)","fill":"","lineHeight":1,"wordSpace":10,"vertical":false,"contentStr":"打卡绝美景色","layerName":"打卡绝美景色","groupId":"","clip":false,"stroke":""},{"id":"text_1809","type":"text","left":180.35899268334174,"width":1055.2820146333163,"top":184,"height":48,"rotate":0,"opacity":1,"content":"<p style=\"\"><span style=\"font-size: 28px;\">富士山芝樱名所首都圈最大 80 万株芝樱群【富士芝樱庆典】</span></p>","defaultFontName":"SourceHanSerifCN-Light,AdobeInvisFont,AdobeHeitiStd-Regular","defaultColor":"rgba(77,58,65,1.00)","fill":"","lineHeight":1,"wordSpace":6,"vertical":false,"contentStr":"Take in the stunning views","layerName":"Take in the stunning views","groupId":"","clip":false,"stroke":""},{"type":"image","id":"agy4MnPudN","src":"https://imgfile.oytour.com/Upload/DMC/20200201112104433.png","width":528.4860983494981,"height":415.9705064942431,"left":80,"top":341.01474675287847,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[0,0],[84.7457627118644,100]]}},{"type":"image","id":"CocC9DHEZA","src":"https://imgfile.oytour.com/Upload/DMC/202304030358080710000000117.jpg","width":513.679496341671,"height":406.09943848902503,"left":642.6602518291645,"top":342.9502807554875,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[15.254237288135592,0],[100,100]]}},{"type":"text","id":"-OSSQhBI-L","left":67,"top":221.12876617551072,"width":1140.2468086163487,"height":105.515625,"content":"<p style=\"\"><span style=\"font-size: 28px;\"><span style=\"font-family: SourceHanSerifCN-Light,AdobeInvisFont,AdobeHeitiStd-Regular;\"><span style=\"color: rgba(77,58,65,1.00);\">会场位于富士山麓靠近本栖湖附近,拥有80万株的芝樱,是东京近郊区域栽培芝樱规模最大的一个景点,每年都吸引海内外大批游客前往观赏。然除了能欣赏到如诗般的美景。</span></span></span></p>","rotate":0,"defaultFontName":"Microsoft Yahei","defaultColor":"#333","vertical":false},{"type":"image","id":"IHhYEBDme1","src":"https://imgfile.oytour.com/Upload/DMC/rG8YMzyxjppc7sKk5rC6fDtx2NFnTFZs.jpg","width":364.444123882928,"height":424.9652700782714,"left":447.77793805853594,"top":1104.8977539561001,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[20.833333333333332,0],[80.35714285714286,100]]}},{"type":"image","id":"BwPN4Tz_ES","src":"https://imgfile.oytour.com/Upload/DMC/Miy8N2EEjBTbJ5Qet8QhtPRsNME4PWin.png","width":357.4855553908825,"height":424.9652700782711,"left":812.5807369351342,"top":1104.8977539561001,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[40.78212290502793,10.619469026548673],[96.64804469273743,99.11504424778761]]}},{"type":"image","id":"Y1R71foOnq","src":"https://imgfile.oytour.com/Upload/DMC/20190504104701775.jpg","width":371.52472349838354,"height":424.96527007827143,"left":80,"top":1104.8977539561001,"fixedRatio":true,"rotate":0,"clip":{"shape":"rect","range":[[39.884393063583815,0],[97.6878612716763,100]]}}],"background":{"type":"solid","color":"#ffffff"},"isTripItems":false}]
\ No newline at end of file
src/plugins/icon.ts
View file @
4d0d9ec2
...
@@ -154,7 +154,15 @@ import {
...
@@ -154,7 +154,15 @@ import {
WaterfallsH
,
WaterfallsH
,
ListCheckbox
,
ListCheckbox
,
DocAdd
,
DocAdd
,
FileConversion
FileConversion
,
Switch
,
Mark
,
TitleLevel
,
CenterAlignment
,
LinkTwo
,
Unlink
,
DividingLine
,
DeleteFour
}
from
'@icon-park/vue-next'
}
from
'@icon-park/vue-next'
export
interface
Icons
{
export
interface
Icons
{
...
@@ -162,6 +170,13 @@ export interface Icons {
...
@@ -162,6 +170,13 @@ export interface Icons {
}
}
export
const
icons
:
Icons
=
{
export
const
icons
:
Icons
=
{
IconMark
:
Mark
,
IconDividingLine
:
DividingLine
,
IconUnlink
:
Unlink
,
IconLinkTwo
:
LinkTwo
,
IconCenterAlignment
:
CenterAlignment
,
IconTitleLevel
:
TitleLevel
,
IconSwitch
:
Switch
,
IconFileConversion
:
FileConversion
,
IconFileConversion
:
FileConversion
,
IconDocAdd
:
DocAdd
,
IconDocAdd
:
DocAdd
,
IconPlayOne
:
PlayOne
,
IconPlayOne
:
PlayOne
,
...
@@ -314,6 +329,7 @@ export const icons: Icons = {
...
@@ -314,6 +329,7 @@ export const icons: Icons = {
IconGridFour
:
GridFour
,
IconGridFour
:
GridFour
,
IconWaterfallsH
:
WaterfallsH
,
IconWaterfallsH
:
WaterfallsH
,
IconListCheckbox
:
ListCheckbox
,
IconListCheckbox
:
ListCheckbox
,
IconDeleteFour
:
DeleteFour
}
}
export
default
{
export
default
{
...
...
src/router/router.ts
View file @
4d0d9ec2
...
@@ -399,27 +399,34 @@ const routes: RouteRecordRaw[] = [
...
@@ -399,27 +399,34 @@ const routes: RouteRecordRaw[] = [
},
},
{
{
path
:
'/project'
,
path
:
'/project'
,
component
:
()
=>
import
(
'@/views/
p
roject/Layout.vue'
),
component
:
()
=>
import
(
'@/views/
P
roject/Layout.vue'
),
meta
:{
meta
:{
title
:
'工作台'
title
:
'工作台'
},
},
children
:[
children
:[
{
{
path
:
'/project'
,
path
:
'/project'
,
component
:
()
=>
import
(
'@/views/
p
roject/Index.vue'
),
component
:
()
=>
import
(
'@/views/
P
roject/Index.vue'
),
meta
:{
meta
:{
title
:
'概览'
title
:
'概览'
}
}
},
},
{
{
path
:
'/project/create/trip'
,
path
:
'/project/create/trip'
,
component
:
()
=>
import
(
'@/views/
p
roject/trip.vue'
),
component
:
()
=>
import
(
'@/views/
P
roject/trip.vue'
),
meta
:{
meta
:{
title
:
'行程制作'
title
:
'行程制作'
}
}
},
},
]
]
},
},
{
path
:
"/proj/e/:projectid"
,
component
:()
=>
import
(
'@/views/Project/Editor/Index.vue'
),
meta
:{
title
:
'编辑行程'
}
},
{
{
path
:
'/p/show'
,
path
:
'/p/show'
,
component
:
()
=>
import
(
'@/views/Product/Show.vue'
),
component
:
()
=>
import
(
'@/views/Product/Show.vue'
),
...
...
src/utils/common.ts
View file @
4d0d9ec2
...
@@ -196,6 +196,7 @@ export const getHtmlPlainText = (html_str:string) => {
...
@@ -196,6 +196,7 @@ export const getHtmlPlainText = (html_str:string) => {
}
}
export
const
dateFormat
=
(
value
:
number
|
string
|
Date
=
Date
.
now
(),
format
=
'YYYY-MM-DD HH:mm:ss'
):
string
=>
{
export
const
dateFormat
=
(
value
:
number
|
string
|
Date
=
Date
.
now
(),
format
=
'YYYY-MM-DD HH:mm:ss'
):
string
=>
{
const
week
=
[
'日'
,
'一'
,
'二'
,
'三'
,
'四'
,
'五'
,
'六'
];
if
(
typeof
value
===
'number'
||
typeof
value
===
'string'
)
{
if
(
typeof
value
===
'number'
||
typeof
value
===
'string'
)
{
var
date
=
new
Date
(
value
)
var
date
=
new
Date
(
value
)
}
else
{
}
else
{
...
@@ -230,6 +231,10 @@ export const dateFormat = (value: number|string|Date = Date.now(), format = 'YYY
...
@@ -230,6 +231,10 @@ export const dateFormat = (value: number|string|Date = Date.now(), format = 'YYY
const
s
=
String
(
date
.
getSeconds
())
const
s
=
String
(
date
.
getSeconds
())
showTime
=
showTime
.
includes
(
'ss'
)
?
showTime
.
replace
(
'ss'
,
s
.
padStart
(
2
,
'0'
))
:
showTime
.
replace
(
's'
,
s
)
showTime
=
showTime
.
includes
(
'ss'
)
?
showTime
.
replace
(
'ss'
,
s
.
padStart
(
2
,
'0'
))
:
showTime
.
replace
(
's'
,
s
)
}
}
if
(
showTime
.
includes
(
'w'
))
{
const
w
=
`
${
week
[
date
.
getDay
()]}
`
showTime
=
showTime
.
includes
(
'ww'
)
?
showTime
.
replace
(
'ww'
,
`周
${
w
}
`
)
:
showTime
.
replace
(
's'
,
w
)
}
return
showTime
return
showTime
}
}
...
...
src/views/project/Editor/Index.vue
0 → 100644
View file @
4d0d9ec2
<
template
>
<div
class=
"window-width window-height project-full-wrap column"
>
<editor-header></editor-header>
<div
class=
"col full-wdith row"
>
<editor-day-list
v-model:value=
"activeTab"
></editor-day-list>
<div
class=
"q-pa-lg row col"
>
<tour-itinerary
v-if=
"activeTab==-1"
></tour-itinerary>
<div
class=
"col"
v-if=
"activeTab==-1 || activeTab==-2"
></div>
</div>
</div>
</div>
</
template
>
<
script
lang=
"ts"
setup
>
import
EditorHeader
from
'../components/Editor/EditorHeader.vue'
import
EditorDayList
from
'../components/Editor/EditorDayList.vue'
;
import
TourItinerary
from
'../components/Editor/TourItinerary.vue'
;
import
{
ref
}
from
'vue'
;
const
activeTab
=
ref
(
-
1
)
const
setActiveTabHandle
=
(
playload
:
number
)
=>
{
activeTab
.
value
=
playload
}
</
script
>
<
style
>
.project-full-wrap
{
background-color
:
#f7f8f8
;
}
</
style
>
\ No newline at end of file
src/views/project/components/Editor/Editor.vue
0 → 100644
View file @
4d0d9ec2
<
template
>
<div
class=
"full-height column full-width"
>
{{
editor
.
isActive
(
'bold'
)
}}
<div
class=
"row items-center q-my-sm"
>
<div
class=
"editor-item"
@
click=
"setBold"
:class=
"
{'active':editor.isActive('bold')}">
<IconTextBold></IconTextBold>
</div>
<div
class=
"editor-item"
@
click=
"setItalic"
:class=
"
{'active':editor.isActive('italic')}">
<IconTextItalic></IconTextItalic>
</div>
<div
class=
"editor-item"
@
click=
"setUnderline"
:class=
"
{'active':editor.isActive('underline')}">
<IconTextUnderline></IconTextUnderline>
</div>
<el-divider
style=
"height: 100%; margin: 0 16px;"
direction=
"vertical"
/>
<div
class=
"editor-item"
@
click=
"setHeaderTitle"
:class=
"
{'active':editor.isActive('heading', { level: 3 })}">
<IconTitleLevel></IconTitleLevel>
</div>
<div
class=
"editor-item"
@
click=
"setBlockquote"
:class=
"
{'active':editor.isActive('blockquote')}">
<IconQuote></IconQuote>
</div>
<div
class=
"editor-item"
@
click=
"setTextCenter"
:class=
"
{'active':editor.isActive({ textAlign: 'center' })}">
<IconCenterAlignment></IconCenterAlignment>
</div>
<el-divider
style=
"height: 100%; margin: 0 16px;"
direction=
"vertical"
/>
<div
class=
"editor-item"
ref=
"buttonRef"
@
click=
"openLinkHandle"
>
<IconLinkTwo></IconLinkTwo>
</div>
<div
class=
"editor-item"
>
<IconPicture></IconPicture>
</div>
<div
class=
"editor-item"
@
click=
"setDiver"
>
<IconDividingLine></IconDividingLine>
</div>
</div>
<el-divider
class=
"q-ma-none"
/>
<el-scrollbar
class=
"q-pa-lg full-width col editor-text-content"
style=
"padding-bottom: 0;"
>
<bubble-menu
:editor=
"editor"
:tippy-options=
"
{ duration: 100 }" :should-show="shouldShowHandler" v-if="editor">
<div
class=
"bubble-menu row items-center"
v-if=
"!showEditorLink"
>
<span
class=
"link cusor-pointer"
@
click=
"openLink(currentLink?.href)"
>
{{
currentLink
?.
href
}}
</span>
<el-divider
style=
"height: 30px; margin: 0 8px 0 16px;background-color: #e5e5e5;"
direction=
"vertical"
/>
<div
class=
"editor-item"
@
click=
"editorLinkHandle"
>
<IconEdit></IconEdit>
</div>
<div
class=
"editor-item"
@
click=
"removeLink"
>
<IconDeleteFour></IconDeleteFour>
</div>
</div>
<div
class=
"bubble-menu"
style=
"width: 330px;"
v-else
>
<div
class=
"row items-center"
>
<el-input
class=
"link-box"
v-model=
"linkText"
prefix-icon=
"Link"
@
input=
"linkUrlChangeHandler"
></el-input>
<el-button
class=
"q-ml-md"
@
click=
"setLink"
:disabled=
"!validatorUrl"
>
确认
</el-button>
</div>
<div
class=
"q-mt-md"
>
<el-switch
v-model=
"isBlank"
class=
"short-switch"
/>
在新窗口打开
</div>
</div>
</bubble-menu>
<editor-content
:editor=
"editor"
/>
</el-scrollbar>
</div>
<el-popover
ref=
"popoverRef"
placement=
"bottom"
width=
"330px"
:virtual-ref=
"buttonRef"
:visible=
"linkVisible"
virtual-triggering
popper-style=
"border-radius:6px !important;"
>
<div
v-click-outside=
"onClickOutside"
>
<div
class=
"row items-center"
>
<el-input
class=
"link-box"
v-model=
"linkText"
prefix-icon=
"Link"
@
input=
"linkUrlChangeHandler"
></el-input>
<el-button
class=
"q-ml-md"
@
click=
"setLink"
:disabled=
"!validatorUrl"
>
确认
</el-button>
</div>
<div
class=
"q-mt-md"
>
<el-switch
v-model=
"isBlank"
class=
"short-switch"
/>
在新窗口打开
</div>
</div>
</el-popover>
</
template
>
<
script
setup
>
import
{
EditorContent
,
BubbleMenu
}
from
'@tiptap/vue-3'
import
{
Editor
}
from
'@tiptap/core'
import
StarterKit
from
'@tiptap/starter-kit'
import
Document
from
'@tiptap/extension-document'
import
Paragraph
from
'@tiptap/extension-paragraph'
import
Text
from
'@tiptap/extension-text'
import
Highlight
from
'@tiptap/extension-highlight'
import
Underline
from
'@tiptap/extension-underline'
import
Heading
from
'@tiptap/extension-heading'
import
Blockquote
from
'@tiptap/extension-blockquote'
import
HorizontalRule
from
'@tiptap/extension-horizontal-rule'
import
TextAlign
from
'@tiptap/extension-text-align'
import
Link
from
'@tiptap/extension-link'
import
{
ref
}
from
'vue'
import
{
ClickOutside
as
vClickOutside
}
from
'element-plus'
import
{
openNewBlank
}
from
'@/utils/common'
// import BubbleMenu from '@tiptap/extension-bubble-menu'
const
textalign
=
TextAlign
.
configure
({
types
:
[
'heading'
,
'paragraph'
],
alignments
:
[
'left'
,
'right'
,
'center'
,
'justify'
],
})
const
link
=
Link
.
configure
({
openOnClick
:
false
,
defaultProtocol
:
'https'
,
})
const
linkText
=
ref
(
''
)
const
isBlank
=
ref
(
false
)
const
buttonRef
=
ref
()
const
popoverRef
=
ref
()
const
linkVisible
=
ref
(
false
)
const
validatorUrl
=
ref
(
false
)
const
showEditorLink
=
ref
(
false
)
const
currentLink
=
ref
()
const
regex
=
/^
(
https
?
|ftp
)
:
\/\/([
a-zA-Z0-9.-
]
+
(\:[
0-9
]
+
)?)(\/[
a-zA-Z0-9%_.~+-
]
+
)
*
\/?(\?[
a-zA-Z0-9%_.,~+-=&
]
*
)?(
#
[
a-zA-Z0-9_-
]
+
)?
$/
;
const
statusList
=
ref
({
isBold
:
false
,
isItalic
:
false
,
isUnderline
:
false
,
isHeading
:
false
,
isBlockquote
:
false
,
isCenter
:
false
,
})
const
editor
=
new
Editor
({
// register extensions
extensions
:
[
StarterKit
,
Highlight
,
Text
,
Document
,
Paragraph
,
Underline
,
Heading
,
Blockquote
,
textalign
,
HorizontalRule
,
link
],
// set the initial content
content
:
'<p>Example Text</p>'
,
// place the cursor in the editor after initialization
autofocus
:
true
,
// make the text editable (but that’s the default anyway)
editable
:
true
,
// disable the loading of the default CSS (which is not much anyway)
injectCSS
:
true
,
})
const
setBold
=
()
=>
{
editor
.
chain
().
focus
().
toggleBold
().
run
()
}
const
setItalic
=
()
=>
{
editor
.
chain
().
focus
().
toggleItalic
().
run
()
}
const
setUnderline
=
()
=>
{
editor
.
chain
().
focus
().
toggleUnderline
().
run
()
}
const
setHeaderTitle
=
()
=>
{
editor
.
chain
().
focus
().
toggleHeading
({
level
:
3
}).
run
()
}
const
setBlockquote
=
()
=>
{
editor
.
chain
().
focus
().
toggleBlockquote
().
run
()
}
const
setTextCenter
=
()
=>
{
if
(
!
editor
.
isActive
({
textAlign
:
'center'
}))
editor
.
chain
().
focus
().
setTextAlign
(
'center'
).
run
()
else
editor
.
chain
().
focus
().
unsetTextAlign
().
run
()
}
const
setDiver
=
()
=>
{
editor
.
chain
().
focus
().
setHorizontalRule
().
run
()
}
const
onClickOutside
=
()
=>
{
if
(
linkVisible
.
value
)
{
linkVisible
.
value
=
false
editor
.
chain
().
focus
()
}
}
const
openLink
=
(
url
)
=>
{
openNewBlank
(
url
)
}
const
linkUrlChangeHandler
=
()
=>
{
validatorUrl
.
value
=
regex
.
test
(
linkText
.
value
)
}
const
setLink
=
()
=>
{
if
(
editor
.
isActive
(
'link'
)){
const
r
=
editor
.
chain
().
focus
().
extendMarkRange
(
'link'
).
setLink
({
href
:
linkText
.
value
,
target
:
isBlank
.
value
?
'_blank'
:
'_self'
}).
run
()
showEditorLink
.
value
=
false
currentLink
.
value
=
editor
.
getAttributes
(
'link'
)
}
else
{
editor
.
commands
.
setLink
({
href
:
linkText
.
value
,
target
:
isBlank
.
value
?
'_blank'
:
'_self'
})
}
onClickOutside
()
}
const
removeLink
=
()
=>
{
if
(
editor
.
isActive
(
'link'
)){
editor
.
chain
().
focus
().
extendMarkRange
(
'link'
).
unsetLink
().
run
()
}
}
const
openLinkHandle
=
()
=>
{
editor
.
chain
().
focus
()
const
{
from
,
to
}
=
editor
.
state
.
selection
;
linkVisible
.
value
=
from
!=
to
if
(
linkVisible
.
value
)
{
linkText
.
value
=
''
validatorUrl
.
value
=
false
}
}
const
editorLinkHandle
=
()
=>
{
linkText
.
value
=
currentLink
.
value
.
href
showEditorLink
.
value
=
true
isBlank
.
value
=
currentLink
.
value
.
target
==
'_blank'
}
const
shouldShowHandler
=
({
editor
,
view
,
state
,
oldState
,
from
,
to
})
=>
{
if
(
editor
.
isActive
(
'link'
)){
showEditorLink
.
value
=
false
currentLink
.
value
=
editor
.
getAttributes
(
'link'
)
}
return
editor
.
isActive
(
'link'
)
}
</
script
>
<
style
>
.editor-item
{
font-size
:
18px
;
padding
:
5px
10px
;
color
:
#000
;
border-radius
:
4px
;
background-color
:
transparent
;
cursor
:
pointer
;
margin-left
:
5px
;
}
.editor-item
:hover
,
.editor-item.active
{
background-color
:
rgba
(
0
,
0
,
255
,
0.05
);
}
.editor-item.active
{
color
:
var
(
--el-color-primary
);
}
.editor-text-content
.ProseMirror
,
.editor-text-content
.ProseMirror-static
{
font-size
:
14px
!important
;
font-family
:
"Helvetica Neue"
,
Helvetica
,
"PingFang SC"
,
"Hiragino Sans GB"
,
"Microsoft YaHei"
,
"微软雅黑"
,
Arial
,
sans-serif
!important
;
}
.link-box
.el-input__wrapper
{
background-color
:
#f5f5f5
!important
;
color
:
#000
!important
;
border-radius
:
6px
!important
;
box-shadow
:
none
!important
;
}
.link-box
.el-input__prefix
{
color
:
#000
!important
;
}
.tiptap
*
{
line-height
:
1.5
!important
;
}
.el-switch.short-switch
.el-switch__core
{
min-width
:
35px
;
}
.bubble-menu
{
background-color
:
#FFF
;
border
:
1px
solid
#e5e5e5
;
border-radius
:
8px
;
box-shadow
:
0
1px
2px
0
rgba
(
0
,
0
,
0
,
.05
);
padding
:
8px
;
}
.bubble-menu
.link
{
font-size
:
14px
;
color
:
#000
;
text-decoration
:
underline
;
}
</
style
>
\ No newline at end of file
src/views/project/components/Editor/EditorDayList.vue
0 → 100644
View file @
4d0d9ec2
<
template
>
<div
class=
"proj-editor-left full-height column"
>
<div
class=
"q-pa-lg row items-center"
>
<div
class=
"col text-info"
>
行程总览
</div>
<el-link
:underline=
"false"
>
<IconEdit></IconEdit>
<span
style=
"margin-left: 5px;"
class=
"text-small"
>
编辑
</span>
</el-link>
</div>
<el-divider
class=
"q-ma-none"
/>
<el-scrollbar
class=
"full-width col"
>
<div
class=
"day-item"
:class=
"
{'active':activeDayItem==-1}" @click="setCurrentDayItemHandle(-1)">
<span
class=
"day-title"
>
行程总览
</span>
</div>
<div
class=
"day-item"
v-for=
"(x,i) in days"
:key=
"i"
:class=
"
{'active':activeDayItem==i}" @click="setCurrentDayItemHandle(i)">
<div
class=
"row"
>
<span
class=
"day-title col"
>
{{
x
.
day
}}
</span>
<span
class=
"text-info"
>
{{
x
.
dateStr
}}
</span>
</div>
<div
style=
"margin-top: 8px;"
v-for=
"(city,index) in x.cities"
:key=
"index"
>
<IconMark
class=
"q-mr-md"
v-if=
"city==startCity || city==endCity"
></IconMark>
<span>
{{
city
}}
</span>
</div>
</div>
<div
class=
"day-item"
:class=
"
{'active':activeDayItem==-2}" @click="setCurrentDayItemHandle(-2)">
<span
class=
"day-title"
>
行程备注
</span>
</div>
</el-scrollbar>
</div>
</
template
>
<
script
lang=
"ts"
setup
>
import
{
dateFormat
}
from
'@/utils/common'
;
import
{
ref
}
from
'vue'
;
const
emit
=
defineEmits
<
{
(
event
:
'update:value'
,
payload
:
number
):
void
}
>
()
const
days
=
ref
<
any
[]
>
()
const
startCity
=
'北京'
const
endCity
=
'北京'
const
cities
=
[[
'北京'
,
'巴黎'
],[
'巴黎'
],[
'巴黎'
],[
'巴黎'
,
'尼斯'
],[
'尼斯'
,
'威尼斯'
],[
'威尼斯'
],[
'威尼斯'
],[
'威尼斯'
,
'佛罗伦萨'
],[
'佛罗伦萨'
],[
'佛罗伦萨'
,
'罗马'
],[
'罗马'
],[
'罗马'
,
'伊斯坦布尔'
],[
'伊斯坦布尔'
,
'北京'
]]
const
activeDayItem
=
ref
(
-
1
)
const
startDate
=
new
Date
(
'2024/11/11'
)
days
.
value
=
cities
.
map
((
x
,
i
)
=>
{
const
newDate
=
new
Date
(
startDate
)
newDate
.
setDate
(
newDate
.
getDate
()
+
i
)
const
formatDate
=
dateFormat
(
newDate
,
'M月D日 ww'
)
return
{
day
:
`D
${
i
+
1
}
`
,
dateStr
:
formatDate
,
dayNum
:
i
,
cities
:
x
}
})
const
setCurrentDayItemHandle
=
(
i
:
number
)
=>
{
activeDayItem
.
value
=
i
emit
(
'update:value'
,
i
)
}
</
script
>
<
style
>
.proj-editor-left
{
width
:
184px
;
font-size
:
13px
;
}
.proj-editor-left
.day-item
{
padding
:
15px
12px
;
font-size
:
12px
;
position
:
relative
;
cursor
:
pointer
;
}
.proj-editor-left
.day-item.active
{
color
:
var
(
--el-color-primary
);
}
.proj-editor-left
.day-item
:hover
{
color
:
var
(
--el-color-primary
);
}
.proj-editor-left
.day-item.active
::before
{
display
:
block
;
content
:
' '
;
width
:
4px
;
height
:
16px
;
background-color
:
var
(
--el-color-primary
);
position
:
absolute
;
top
:
17px
;
left
:
0
;
}
.proj-editor-left
.day-item
.day-title
{
font-size
:
14px
;
font-weight
:
bold
;
}
</
style
>
\ No newline at end of file
src/views/project/components/Editor/EditorHeader.vue
0 → 100644
View file @
4d0d9ec2
<
template
>
<div
class=
"peditor-head-box row items-center"
>
<el-breadcrumb
:separator-icon=
"ArrowRight"
>
<el-breadcrumb-item
:to=
"
{ path: '/w' }">我参与的项目
</el-breadcrumb-item>
<el-breadcrumb-item>
2024/09/23-18:49 黄奎创建
</el-breadcrumb-item>
<el-breadcrumb-item>
行程编辑
</el-breadcrumb-item>
</el-breadcrumb>
<div
class=
"col"
></div>
<el-link
:underline=
"false"
>
<IconSettingOne></IconSettingOne>
<span
style=
"margin-left: 5px;"
class=
"text-small"
>
行程信息设置
</span>
</el-link>
<el-popover
placement=
"bottom"
trigger=
"click"
class=
"pa-none"
>
<template
#
reference
>
<el-link
:underline=
"false"
class=
"q-mx-lg"
>
<IconSwitch></IconSwitch>
<span
style=
"margin-left: 5px;"
class=
"text-small"
>
导入导出
</span>
</el-link>
</
template
>
<el-menu
mode=
"vertical"
class=
"min-menu none-border"
style=
"width: 100%;"
>
<el-menu-item
index=
"1"
>
导入行程路线
</el-menu-item>
<el-menu-item
index=
"2"
>
导出到行程库
</el-menu-item>
</el-menu>
</el-popover>
<el-button
color=
"#626aef"
style=
"height: 100%;border-radius: 0;"
>
返回
</el-button>
<div></div>
</div>
</template>
<
script
lang=
"ts"
setup
>
import
{
ArrowRight
}
from
'@element-plus/icons-vue'
</
script
>
<
style
>
.peditor-head-box
{
background-color
:
#000e1a
;
height
:
48px
;
padding-left
:
40px
;
}
.peditor-head-box
.el-breadcrumb__inner
{
color
:
#8c9398
;
}
.peditor-head-box
.el-breadcrumb__item
:last-child
.el-breadcrumb__inner
,
.peditor-head-box
.el-link
{
color
:
#D9DBDC
;
}
.peditor-head-box
.el-link
:hover
{
color
:
var
(
--el-link-hover-text-color
);
}
.none-border
{
border-right
:
none
;
}
.min-menu
.el-menu-item
{
height
:
40px
;
line-height
:
40px
;
}
</
style
>
\ No newline at end of file
src/views/project/components/Editor/TextEditor.vue
0 → 100644
View file @
4d0d9ec2
<
template
>
<el-drawer
v-model=
"editorVisible"
:show-close=
"false"
class=
"customer-drawer"
size=
"960px"
>
<template
#
header=
"
{ close, titleId, titleClass }">
<div
class=
"card-h2"
>
{{
title
}}
</div>
</
template
>
<div
class=
"full-height column"
>
<el-divider
class=
"q-ma-none"
/>
<div
class=
"draw-close"
@
click=
"closeHandle"
>
<IconCloseSmall></IconCloseSmall>
</div>
<div
class=
"col full-width row"
>
<div
class=
"col"
>
<Editor
/>
</div>
<el-divider
class=
"q-ma-none"
style=
"height: 100%;"
direction=
"vertical"
/>
<div
class=
"col q-pa-lg"
></div>
</div>
</div>
</el-drawer>
</template>
<
script
setup
lang=
"ts"
>
import
{
ref
,
watch
}
from
'vue'
import
Editor
from
'./Editor.vue'
const
props
=
withDefaults
(
defineProps
<
{
value
:
string
title
:
string
,
visible
:
boolean
}
>
(),
{
title
:
''
})
const
emit
=
defineEmits
<
{
(
event
:
'update:value'
,
payload
:
string
):
void
,
(
event
:
'update:visible'
,
payload
:
boolean
):
void
}
>
()
const
editorVisible
=
ref
(
props
.
visible
)
const
content
=
ref
(
props
.
value
)
const
closeHandle
=
()
=>
{
emit
(
'update:visible'
,
false
)
}
const
getContent
=
(
val
:
any
)
=>
{
console
.
log
(
val
)
}
watch
(()
=>
props
.
visible
,()
=>
{
editorVisible
.
value
=
props
.
visible
})
watch
(()
=>
props
.
value
,()
=>
{
content
.
value
=
props
.
value
})
</
script
>
\ No newline at end of file
src/views/project/components/Editor/TourItinerary.vue
0 → 100644
View file @
4d0d9ec2
<
template
>
<div
class=
"rounded q-pa-lg bg-white border-light col full-height"
>
<div
class=
"row"
>
<div
class=
"card-h2 col"
>
行程介绍
</div>
<el-button
color=
"#626aef"
style=
"border-radius: 3px;"
size=
"small"
@
click=
"()=>editorVisible=true"
>
编辑
</el-button>
</div>
<div
class=
"q-mt-lg"
>
<div
v-html=
"itinerary"
v-if=
"itinerary!=''"
></div>
<el-empty
description=
"请点击右上角“编辑”按钮进行添加 ~"
/>
</div>
</div>
<text-editor
v-model:value=
"itinerary"
v-model:visible=
"editorVisible"
title=
"编辑行程介绍"
></text-editor>
</
template
>
<
script
setup
lang=
"ts"
>
import
{
ref
}
from
'vue'
;
import
TextEditor
from
'./TextEditor.vue'
;
const
itinerary
=
ref
(
''
)
const
editorVisible
=
ref
(
false
)
</
script
>
<
style
>
</
style
>
\ No newline at end of file
vue.config.js
View file @
4d0d9ec2
...
@@ -33,11 +33,17 @@ module.exports = {
...
@@ -33,11 +33,17 @@ module.exports = {
// cache: false,
// cache: false,
// fix: false,
// fix: false,
// }),
// }),
// AutoImport({
// resolvers: [ElementPlusResolver()],
// }),
// Components({
// resolvers: [ElementPlusResolver()],
// })
AutoImport
({
AutoImport
({
resolvers
:
[
ElementPlusResolver
()],
resolvers
:
[
ElementPlusResolver
(
{
importStyle
:
false
}
)],
}),
}),
Components
({
Components
({
resolvers
:
[
ElementPlusResolver
()],
resolvers
:
[
ElementPlusResolver
(
{
importStyle
:
false
}
)],
})
})
],
],
},
},
...
...
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