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
38e1bb2b
Commit
38e1bb2b
authored
Feb 22, 2024
by
罗超
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch '1.2.0' of
http://gitlab.oytour.com/viitto/pptist
into 1.2.0
parents
46e39564
118c4915
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
757 additions
and
285 deletions
+757
-285
ConfigService.ts
src/services/ConfigService.ts
+14
-0
index.vue
src/views/Editor/Thumbnails/index.vue
+17
-0
Workspace.vue
src/views/SellTemplate/Workspace.vue
+2
-3
BrowsingHistory.vue
src/views/SellTemplate/components/BrowsingHistory.vue
+722
-0
Example.vue
src/views/SellTemplate/components/Example.vue
+0
-280
journeyAds.vue
src/views/SellTemplate/components/journeyAds.vue
+2
-2
No files found.
src/services/ConfigService.ts
View file @
38e1bb2b
...
...
@@ -5,6 +5,20 @@ import Api,{ HttpResponse, Result } from './../utils/request';
*/
class
ConfigService
{
/**
* 获取行程广告最近版本
*/
static
async
GetTripBrowsePage
(
params
:
any
):
Promise
<
HttpResponse
>
{
return
Api
.
Post
(
"triptemplate_GetTripBrowsePage"
,
params
)
}
/**
* 新增修改最近浏览
*/
static
async
SetTripBrowse
(
params
:
any
):
Promise
<
HttpResponse
>
{
return
Api
.
Post
(
"triptemplate_SetTripBrowse"
,
params
)
}
/**
* 获取行程广告历史版本
*/
...
...
src/views/Editor/Thumbnails/index.vue
View file @
38e1bb2b
...
...
@@ -507,6 +507,7 @@ const sellGetTripTemplate = async () =>{
}
let
dataRes
=
await
ConfigService
.
sellGetTemplateDetails
(
queryMsg
);
if
(
dataRes
.
data
.
resultCode
==
1
)
{
RecordBrowsing
()
if
(
searchData
.
value
.
TempId
)
queryObj
.
value
.
TempId
=
searchData
.
value
.
TempId
else
if
(
searchData
.
value
.
TempId2
&&!
searchData
.
value
.
TempId
)
queryObj
.
value
.
TempId
=
searchData
.
value
.
TempId2
else
if
(
searchData
.
value
.
sellTempId
)
queryObj
.
value
.
TempId
=
searchData
.
value
.
sellTempId
...
...
@@ -550,6 +551,22 @@ const sellGetTripTemplate = async () =>{
}
}
/**
* 行程广告浏览记录
*/
const
RecordBrowsing
=
async
()
=>
{
try
{
let
queryMsg
=
{
FileId
:
searchData
.
value
.
sellId
}
let
datasRes
=
await
ConfigService
.
SetTripBrowse
(
queryMsg
);
if
(
datasRes
.
data
.
resultCode
==
1
&&
datasRes
.
data
.
data
&&
datasRes
.
data
.
data
.
TempId
)
{
}
}
catch
(
error
)
{
}
}
// 页面被切换时
const
thumbnailsRef
=
ref
<
InstanceType
<
typeof
Draggable
>>
()
...
...
src/views/SellTemplate/Workspace.vue
View file @
38e1bb2b
...
...
@@ -76,7 +76,7 @@
</div>
</div>
<div
class=
"col"
>
<
!-- <Example></Example> --
>
<
BrowsingHistory
:current-menu=
"currentMenu"
v-if=
"currentMenu==0"
></BrowsingHistory
>
<journeyAds
:current-menu=
"currentMenu"
v-if=
"currentMenu==3||currentMenu==4"
></journeyAds>
</div>
</div>
...
...
@@ -88,7 +88,7 @@ import { userStore } from '@/store/user';
import
{
storeToRefs
}
from
'pinia'
;
import
{
ref
,
reactive
,
provide
,
inject
}
from
'vue'
;
import
SearchDocument
from
'./components/SearchDocument.vue'
import
Example
from
'./components/Example
.vue'
import
BrowsingHistory
from
'./components/BrowsingHistory
.vue'
import
journeyAds
from
'./components/journeyAds.vue'
import
{
Plus
,
ArrowDown
,
Clock
,
Star
,
Share
,
Picture
,
Management
,
Delete
,
RefreshRight
,
Refresh
,
Loading
}
from
'@element-plus/icons-vue'
;
...
...
@@ -107,7 +107,6 @@ const currentMenu = ref<number>(0)
const
searchData
=
ref
({}
as
any
)
searchData
.
value
=
inject
(
injectKeyTemplate
)
searchData
.
value
.
currentMenu
=
currentMenu
.
value
if
(
searchData
.
value
.
SellTemplateType
){
let
current
=
0
if
(
searchData
.
value
.
SellTemplateType
==
1
)
current
=
3
...
...
src/views/SellTemplate/components/BrowsingHistory.vue
0 → 100644
View file @
38e1bb2b
<
template
>
<div
class=
"q-px-md q-pt-lg"
>
<div
class=
"q-pl-lg row q-mb-lg"
>
<div
class=
"col row items-center q-pl-md"
>
<h5
class=
"row items-center"
>
<span
class=
"pointer"
@
click=
"BackInquire"
><el-icon
class=
"q-pt-md"
v-if=
"queryObj.FileId > 0"
size=
"20"
><ArrowLeft
/></el-icon
></span>
<span
class=
"q-pl-md"
:class=
"[queryObj.FileId == 0?'':'row items-center']"
>
<span
class=
"pointer"
@
click=
"queryObj.FileId=0,refreshHandler()"
>
<template
v-if=
"currentMenu == 0"
>
最近
</
template
>
</span>
<breadPeeling
v-if=
"queryObj.FileId"
:navigations=
"Navigations"
@
Inquire=
"breadPeelingInquire"
></breadPeeling>
</span>
</h5>
<div
class=
"select-btn q-pl-lg pointer q-mt-sm"
>
<el-icon>
<RefreshRight
v-if=
"!datas.journeyAds.RefreshLoading"
@
click=
"() => refreshHandler()"
/>
<Refresh
v-else
/>
</el-icon>
</div>
</div>
<div>
<el-dropdown
v-if=
"datas.selectedDatas.length>0"
trigger=
"click"
class=
"q-px-md"
>
<el-button>
<el-icon><CopyDocument
/></el-icon>
<span
class=
""
>
批量操作
</span>
</el-button>
<
template
#
dropdown
>
<el-dropdown-menu>
<el-dropdown-item
icon=
"Expand"
@
click=
"MoveFile(0)"
>
移动至
</el-dropdown-item>
</el-dropdown-menu>
</
template
>
</el-dropdown>
</div>
</div>
</div>
<div
ref=
"SellTemplateRef"
class=
"journeyAds-container"
style=
"height: 100%; overflow: auto"
>
<el-scrollbar
@
scroll=
"scrollingHandler"
class=
"q-px-md"
style=
"height: 100%;"
>
<div
style=
"min-width: '700px';height: 100%;"
>
<table
class=
"text-small"
style=
"width: 100%"
>
<tr
@
click=
"OffEdit"
>
<th
class=
"text-left"
style=
"width: 20px;"
>
<el-checkbox
size=
"sm"
class=
"SelectAllBox"
v-model=
"datas.selectAll"
@
click=
"clickSelectAll"
:indeterminate=
"isIndeterminate"
/>
</th>
<th
colspan=
"2"
class=
"text-light"
>
<div
class=
"text-left q-pl-md"
>
文档名称
</div>
</th>
<th
class=
"text-light"
style=
"min-width: 150px; width: 150px"
>
<div
class=
"row items-center just-center pointer"
@
click
.
stop=
"clickSort"
>
<span>
最近浏览
</span>
<span
class=
"column"
>
<el-icon
class=
"reactive"
style=
"top: 3px"
:class=
"[datas.Sort==2?'active':'']"
><CaretTop
/></el-icon>
<el-icon
class=
"reactive"
style=
"top:-3px"
:class=
"[datas.Sort==1?'active':'']"
><CaretBottom
/></el-icon>
</span>
</div>
</th>
<th
class=
"text-light"
style=
"min-width: 100px; width: 100px"
>
创建者
</th>
<th
class=
"text-light"
style=
"min-width: 120px; width: 120px"
>
操作
</th>
</tr>
<
template
v-for=
"(item,index) in dataList"
>
<tr
class=
"text-5B5D62 journeyAdsple-table pointer"
>
<td
@
click
.
stop=
"item.FileType?OffEdit():editDelete(item,2)"
><div
class=
"row items-center hoverShow"
:style=
"
{'opacity':item.singleChoice?1:''}">
<el-checkbox
size=
"sm"
class=
"SelectAllBox"
v-model=
"item.singleChoice"
@
click
.
stop=
"singleChoice(item)"
/></div></td>
<td
style=
"width: 30px;"
@
click
.
stop=
"item.FileType?OffEdit():editDelete(item,2)"
>
<img
v-if=
"item.FileType"
class=
"q-px-md"
:src=
"item.FileType==1?datas.pdfImg:datas.adsImg"
style=
"height: 25px;"
/>
<img
v-else
class=
"q-px-md"
src=
"@/assets/img/file.png"
style=
"height: 23px;"
/>
</td>
<td
class=
"journeyAds-title wrap row"
>
<div
class=
"col"
v-if=
"!item.editTitle"
@
click
.
stop=
"item.FileType?OffEdit():editDelete(item,2)"
>
<div
class=
"row flex-center"
>
<el-tooltip
placement=
"top-start"
>
<template
#
content
><div
style=
"max-width: 600px;"
>
{{
item
.
FileName
}}
</div></
template
>
<div
class=
"journeyAds-TitleCenter"
>
{{item.FileName}}
<span
v-if=
"item.FileName.length>70"
>
...
</span>
</div>
</el-tooltip>
</div>
</div>
<el-input
class=
"journeyAds-Input"
v-model=
"item.FileName"
autosize
type=
"textarea"
placeholder=
"Please input"
maxlength=
"500"
size=
"small"
v-if=
"item.editTitle"
@
blur=
"handleUpdateTitle(item)"
/></td>
<td
class=
"text-center"
@
click
.
stop=
"item.FileType?OffEdit():editDelete(item,2)"
><span>
{{item.Day?item.Day+'天前':item.UpdateTime}}
</span></td>
<td
class=
"text-center"
@
click
.
stop=
"item.FileType?OffEdit():editDelete(item,2)"
><span>
{{item.CreateName}}
</span></td>
<td
class=
"text-center"
>
<div
class=
"hoverShow row items-center just-center q-pt-sm"
>
<el-button
type=
"primary"
:icon=
"Edit"
size=
"small"
@
click
.
stop=
"editDelete(item)"
>
编辑
</el-button>
<el-dropdown
class=
"q-pl-md"
trigger=
"click"
>
<el-icon
size=
"16"
color=
"#b1b7cf"
><MoreFilled
/></el-icon>
<
template
#
dropdown
>
<el-dropdown-menu
class=
"q-pa-md"
@
click
.
stop=
"OffEdit"
>
<el-dropdown-item
v-if=
"item.FileType"
icon=
"EditPen"
@
click
.
stop=
"startEditTitle(item)"
>
重命名
</el-dropdown-item>
<el-dropdown-item
v-if=
"item.FileType"
icon=
"Clock"
@
click
.
stop=
"history(item)"
>
历史版本
</el-dropdown-item>
<el-dropdown-item
v-if=
"item.FileType"
icon=
"Position"
@
click
.
stop=
"()=>shareId=item.FileId"
>
分享
</el-dropdown-item>
<el-dropdown-item
icon=
"Expand"
@
click
.
stop=
"MoveFile(item)"
>
移动至
</el-dropdown-item>
<el-dropdown-item
icon=
"Delete"
@
click=
"editDelete(item,1)"
>
删除
</el-dropdown-item>
</el-dropdown-menu>
</
template
>
</el-dropdown>
</div>
</td>
</tr>
</template>
</table>
</div>
<div
v-if=
"dataList.length == 0 && !loading"
class=
"q-mt-lg bg-white rounded"
style=
"padding: 30px 10px 30px 10px"
>
<el-empty
description=
"暂无数据"
/>
</div>
<el-divider
class=
"no-bg q-mt-lg"
v-if=
"queryObj.pageCount == queryObj.pageIndex && !loading"
>
<span
class=
"text-small bg-white"
style=
"padding: 0 10px; color: #a3a3a3"
>
已加载完成所有数据
</span
>
</el-divider>
<div
style=
"height: 40px"
class=
"q-mt-md no-bg"
background=
"transparent"
v-loading=
"loading"
element-loading-text=
"正在加载中"
></div>
</el-scrollbar>
</div>
<ShareForm
:id=
"shareId"
v-if=
"shareId > 0"
@
close=
"() => (shareId = 0)"
></ShareForm>
<Folder
:folder-id=
"folderObj?.id"
:folder-name=
"folderObj?.name"
:parent-id=
"folderObj.parentId"
:folder-type=
"folderObj?.type"
v-if=
"folderObj.id > -1"
@
close=
"() => (folderObj.id = -1)"
@
success=
"refreshHandler()"
></Folder>
<HistoricalVersion
:details=
"journeyAdsDetails"
v-if=
"isHistoricalVersion"
@
close=
"() => {journeyAdsDetails = '';isHistoricalVersion=false}"
></HistoricalVersion>
<TreeFile
v-if=
"isTreeFile"
:details=
"journeyAdsDetails"
:selected-datas=
"datas.selectedDatas"
:set-file-list=
"datas.setFileList"
:file-type=
"queryObj.FileType"
@
close=
"() => {journeyAdsDetails = '';isTreeFile=false}"
@
success=
"() => {
journeyAdsDetails = '';
isTreeFile=false;
datas.selectAll = false;
datas.selectedDatas = [];
refreshHandler()}"
></TreeFile>
</template>
<
script
setup
lang=
"ts"
>
import
{
ref
,
reactive
,
provide
,
watch
,
inject
,
onMounted
}
from
"vue"
;
import
{
ElLoading
,
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
{
MoreFilled
,
Edit
,
ArrowLeft
,
CopyDocument
,
DCaret
,
CaretTop
,
CaretBottom
}
from
"@element-plus/icons-vue"
;
import
ConfigService
from
"@/services/ConfigService"
;
import
FolderService
from
"@/services/FolderService"
;
import
{
injectKeyTemplate
}
from
"@/types/injectKey"
;
import
{
getDaysBetween
}
from
"@/utils/common"
;
import
{
useSellTemplateStore
,
useScreenStore
,
useSlidesStore
}
from
"@/store"
;
import
ShareForm
from
"./ShareForm.vue"
;
import
Folder
from
"./Folder.vue"
;
import
HistoricalVersion
from
"./HistoricalVersion.vue"
;
import
TreeFile
from
"./TreeFile.vue"
;
import
breadPeeling
from
"./breadPeeling.vue"
;
const
SalesEditorStore
=
useSellTemplateStore
();
const
marketStore
=
useScreenStore
();
const
props
=
defineProps
({
currentMenu
:
{
type
:
Number
,
default
:
3
,
},
});
const
PopoverVisibleControls
=
ref
(
false
);
const
shareId
=
ref
(
0
);
const
journeyAdsDetails
=
ref
(
''
);
const
isHistoricalVersion
=
ref
(
false
);
const
isTreeFile
=
ref
(
false
)
const
Navigations
=
ref
([]
as
Array
<
any
>
);
const
showHistory
=
ref
(
true
);
const
isIndeterminate
=
ref
(
false
);
const
dataList
=
ref
([]
as
Array
<
any
>
);
const
copyDataList
=
ref
([]
as
Array
<
any
>
);
const
NewDataList
=
ref
([]
as
Array
<
any
>
);
const
searchData
=
ref
({}
as
any
);
searchData
.
value
=
inject
(
injectKeyTemplate
);
const
deleteLoading
=
ref
<
any
>
(
null
);
const
datas
=
reactive
({
Sort
:
0
,
selectedDatas
:
[]
as
Array
,
selectAll
:
false
as
any
,
journeyAds
:
{
RefreshLoading
:
false
}
as
any
,
fileList
:
[]
as
any
,
setFileList
:
[]
as
any
,
pdfImg
:
"https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1708337830000_43.png"
,
adsImg
:
"https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1708250377000_777.png"
,
folderImg
:
"https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1708250377000_777.png"
,
});
const
folderObj
=
ref
<
{
id
:
number
;
name
:
string
;
parentId
:
number
;
type
:
number
;
}
>
({
id
:
-
1
,
name
:
""
,
parentId
:
0
,
number
:
1
});
const
queryObj
=
reactive
({
pageIndex
:
1
,
pageSize
:
50
,
pageCount
:
0
,
//总页数
FileType
:
0
,
});
const
editObj
=
reactive
({});
//datas.journeyAds = inject('journeyAds')
const
loading
=
ref
(
false
as
any
);
const
SellTemplateRef
=
ref
<
any
>
();
const
clickSort
=
(
type
:
any
)
=>
{
if
(
datas
.
Sort
==
0
)
copyDataList
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
dataList
.
value
))
// 1降序 2升序
if
(
datas
.
Sort
==
2
)
datas
.
Sort
=
0
else
datas
.
Sort
++
getSort
()
}
const
getSort
=
()
=>
{
let
list
=
JSON
.
parse
(
JSON
.
stringify
(
dataList
.
value
))
for
(
let
i
=
0
;
i
<
list
.
length
;
i
++
){
for
(
let
j
=
i
;
j
<
list
.
length
;
j
++
){
let
time
if
(
datas
.
Sort
==
1
)
time
=
new
Date
(
list
[
i
].
UpdateTime
.
replace
(
/-/
,
'/'
))
-
new
Date
(
list
[
j
].
UpdateTime
.
replace
(
/-/
,
'/'
))
if
(
datas
.
Sort
==
2
)
time
=
new
Date
(
list
[
j
].
UpdateTime
.
replace
(
/-/
,
'/'
))
-
new
Date
(
list
[
i
].
UpdateTime
.
replace
(
/-/
,
'/'
))
if
(
time
>
0
){
let
listObj
=
list
[
i
];
list
[
i
]
=
list
[
j
];
list
[
j
]
=
listObj
;
}
}
}
dataList
.
value
=
datas
.
Sort
?
list
:
JSON
.
parse
(
JSON
.
stringify
(
copyDataList
.
value
))
for
(
let
i
=
0
;
i
<
dataList
.
value
.
length
;
i
++
)
{
if
(
datas
.
selectAll
)
{
dataList
.
value
[
i
].
singleChoice
=
true
;
datas
.
selectedDatas
.
push
(
dataList
.
value
[
i
].
FileId
);
}
else
if
(
datas
.
selectedDatas
.
length
>
0
&&
datas
.
selectedDatas
.
indexOf
(
dataList
.
value
[
i
].
FileId
)
!=
-
1
)
dataList
.
value
[
i
].
singleChoice
=
true
;
}
}
// 导航
const
BackInquire
=
()
=>
{
datas
.
selectAll
=
false
;
datas
.
selectedDatas
=
[];
let
Navigation
=
Navigations
.
value
[
Navigations
.
value
.
length
-
2
]
if
(
Navigation
&&
Navigation
.
FileId
){
breadPeelingInquire
(
Navigation
.
FileId
,
Navigations
.
value
.
length
-
2
)
}
else
breadPeelingInquire
(
0
,
0
)
}
const
breadPeelingInquire
=
(
FileId
:
number
,
index
:
number
)
=>
{
datas
.
selectAll
=
false
;
datas
.
selectedDatas
=
[];
Navigations
.
value
.
splice
(
index
+
1
,
Navigations
.
value
.
length
-
1
)
queryObj
.
FileId
=
FileId
refreshHandler
()
}
const
sellAdd
=
(
type
:
number
)
=>
{
searchData
.
value
.
sellId
=
0
searchData
.
value
.
sellTempId
=
0
SalesEditorStore
.
setSalesEditor
(
type
)
marketStore
.
setMarket
(
true
)
}
// 移动到文件夹
const
MoveFile
=
(
item
:
any
)
=>
{
if
(
item
)
journeyAdsDetails
.
value
=
item
else
{
datas
.
setFileList
=
[]
for
(
let
i
=
0
;
i
<
dataList
.
value
.
length
;
i
++
){
for
(
let
j
=
0
;
j
<
datas
.
selectedDatas
.
length
;
j
++
){
if
(
dataList
.
value
[
i
].
FileId
==
datas
.
selectedDatas
[
j
]){
datas
.
setFileList
.
push
(
{
FileId
:
dataList
.
value
[
i
].
FileId
,
FileType
:
dataList
.
value
[
i
].
FileType
}
)
}
}
}
}
isTreeFile
.
value
=
true
}
// 历史版本
const
history
=
(
row
:
any
)
=>
{
journeyAdsDetails
.
value
=
row
;
isHistoricalVersion
.
value
=
true
};
// 重命名
const
OffEdit
=
()
=>
{
for
(
let
i
=
0
;
i
<
dataList
.
value
.
length
;
i
++
)
{
dataList
.
value
[
i
].
editTitle
=
false
;
if
(
editObj
.
value
&&
editObj
.
value
.
FileId
&&
dataList
.
value
[
i
].
FileId
==
editObj
.
value
.
FileId
)
{
dataList
.
value
[
i
].
FileName
=
editObj
.
value
.
FileName
;
}
}
};
const
handleUpdateTitle
=
async
(
row
:
any
)
=>
{
if
(
!
row
.
FileName
)
row
.
FileName
=
editObj
.
value
.
FileName
;
row
.
editTitle
=
false
;
if
(
row
.
FileName
!=
editObj
.
value
.
FileName
)
{
editObj
.
value
.
FileName
=
row
.
FileName
;
try
{
let
queryMsg
=
{
FileId
:
row
.
FileId
,
Title
:
editObj
.
value
.
FileName
,
};
let
TemplateRes
=
await
ConfigService
.
ReNameTripOther
(
queryMsg
);
if
(
TemplateRes
.
data
.
resultCode
==
1
)
{
ElMessage
({
showClose
:
true
,
message
:
"重命名成功"
,
type
:
"success"
,
});
}
else
{
ElMessage
({
showClose
:
true
,
message
:
"重命名失败"
,
type
:
"warning"
,
});
}
}
catch
(
error
)
{}
}
};
const
startEditTitle
=
(
row
:
any
)
=>
{
row
.
editTitle
=
true
;
editObj
.
value
=
JSON
.
parse
(
JSON
.
stringify
(
row
));
};
// 全选按钮
const
clickSelectAll
=
()
=>
{
setTimeout
(()
=>
{
for
(
let
i
=
0
;
i
<
dataList
.
value
.
length
;
i
++
)
{
if
(
datas
.
selectAll
==
true
)
{
datas
.
selectedDatas
.
push
(
dataList
.
value
[
i
].
FileId
)
dataList
.
value
[
i
].
singleChoice
=
true
;
}
else
{
datas
.
selectedDatas
=
[];
isIndeterminate
.
value
=
false
;
dataList
.
value
[
i
].
singleChoice
=
false
;
}
}
},
100
);
};
const
singleChoice
=
(
row
:
any
)
=>
{
isIndeterminate
.
value
=
false
;
if
(
!
row
.
singleChoice
)
{
datas
.
selectedDatas
.
push
(
row
.
FileId
);
}
else
{
let
index
;
for
(
let
i
=
0
;
i
<
datas
.
selectedDatas
.
length
;
i
++
)
{
if
(
datas
.
selectedDatas
[
i
]
==
row
.
FileId
)
index
=
i
;
}
datas
.
selectedDatas
.
splice
(
index
,
1
);
isIndeterminate
.
value
=
true
;
}
let
checkedCount
=
datas
.
selectedDatas
.
length
;
let
datasList
=
dataList
.
value
.
length
;
if
(
datasList
>
0
&&
checkedCount
>
0
&&
datasList
==
checkedCount
)
datas
.
selectAll
=
true
;
if
(
datasList
>
0
&&
checkedCount
>
0
&&
datasList
>
checkedCount
)
{
datas
.
selectAll
=
""
;
isIndeterminate
.
value
=
true
;
}
if
(
datasList
==
0
&&
checkedCount
==
0
)
datas
.
selectAll
=
""
;
};
const
DeleteFile
=
async
(
item
:
any
)
=>
{
ElMessageBox
.
confirm
(
"此操作将删除该文件夹,是否确定?"
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
})
.
then
(
async
()
=>
{
try
{
let
queryMsg
=
{
FolderId
:
item
.
FileId
,
};
deleteLoading
.
value
=
ElLoading
.
service
({
lock
:
true
,
text
:
"正在处理"
,
});
let
pageRes
=
await
FolderService
.
RemoveTripFolder
(
queryMsg
);
if
(
pageRes
.
data
.
resultCode
==
1
)
{
ElMessage
({
showClose
:
true
,
message
:
`删除
${
queryObj
.
FileType
==
2
?
"广告"
:
"行程"
}
文件夹成功`
,
type
:
"success"
,
});
refreshHandler
();
}
else
{
ElMessage
({
showClose
:
true
,
message
:
`删除
${
queryObj
.
FileType
==
2
?
"广告"
:
"行程"
}
文件夹失败`
,
type
:
"warning"
,
});
}
deleteLoading
.
value
.
close
();
deleteLoading
.
value
=
null
;
}
catch
(
error
)
{}
})
.
catch
(()
=>
{});
};
const
DeleteTemplate
=
async
(
item
:
any
)
=>
{
ElMessageBox
.
confirm
(
"此操作将删除该模版,是否确定?"
,
"提示"
,
{
confirmButtonText
:
"确定"
,
cancelButtonText
:
"取消"
,
type
:
"warning"
,
})
.
then
(
async
()
=>
{
try
{
let
queryMsg
=
{
Id
:
item
.
FileId
,
};
deleteLoading
.
value
=
ElLoading
.
service
({
lock
:
true
,
text
:
"正在处理"
,
});
let
pageRes
=
await
ConfigService
.
sellSetRemoveTemplate
(
queryMsg
);
if
(
pageRes
.
data
.
resultCode
==
1
)
{
ElMessage
({
showClose
:
true
,
message
:
`删除
${
queryObj
.
FileType
==
2
?
"广告"
:
"行程"
}
成功`
,
type
:
"success"
,
});
refreshHandler
();
}
else
{
ElMessage
({
showClose
:
true
,
message
:
`删除
${
queryObj
.
FileType
==
2
?
"广告"
:
"行程"
}
失败`
,
type
:
"warning"
,
});
}
deleteLoading
.
value
.
close
();
deleteLoading
.
value
=
null
;
}
catch
(
error
)
{}
})
.
catch
(()
=>
{});
};
const
editDelete
=
async
(
row
:
any
,
type
:
Number
)
=>
{
if
(
type
==
1
)
{
if
(
row
.
FileType
)
DeleteTemplate
(
row
);
else
DeleteFile
(
row
);
}
else
{
if
(
row
.
FileType
)
{
let
list
=
[
{
id
:
"test-slide-1"
,
pageType
:
0
,
elements
:
[],
background
:
{
type
:
"solid"
,
color
:
"#ffffff"
,
},
},
];
useSlidesStore
().
setSlides
(
list
);
searchData
.
value
.
sellId
=
row
.
FileId
;
searchData
.
value
.
sellTempId
=
row
.
TempId
;
searchData
.
value
.
TemplateType
=
row
.
FileType
;
SalesEditorStore
.
setSalesEditor
(
2
);
marketStore
.
setMarket
(
false
);
}
else
{
// 2文件夹详情
if
(
type
==
2
)
{
console
.
log
(
row
.
FileId
,
row
.
ParentFileId
)
queryObj
.
FileId
=
row
.
FileId
;
Navigations
.
value
.
push
(
{
FileId
:
row
.
FileId
,
FileName
:
row
.
FileName
,
ParentFileId
:
row
.
ParentFileId
}
);
datas
.
selectAll
=
false
datas
.
selectedDatas
=
[]
isIndeterminate
.
value
=
false
refreshHandler
();
}
else
{
folderObj
.
value
.
id
=
row
.
FileId
;
folderObj
.
value
.
name
=
row
.
FileName
;
folderObj
.
value
.
type
=
row
.
FileType
;
}
}
}
};
const
querySearchHandler
=
async
()
=>
{
loading
.
value
=
true
;
try
{
if
(
queryObj
.
pageIndex
==
1
)
dataList
.
value
=
[];
let
pageRes
=
await
ConfigService
.
GetTripBrowsePage
(
queryObj
);
if
(
pageRes
.
data
.
resultCode
==
1
)
{
let
arrList
=
function
(
list
)
{
list
.
forEach
((
x
)
=>
{
x
.
show
=
false
;
x
.
singleChoice
=
false
;
x
.
Id
=
''
x
.
showSelect
=
false
if
(
datas
.
selectAll
)
{
x
.
singleChoice
=
true
;
datas
.
selectedDatas
.
push
(
x
.
FileId
);
}
else
if
(
datas
.
selectedDatas
.
length
>
0
&&
datas
.
selectedDatas
.
indexOf
(
x
.
FileId
)
!=
-
1
)
x
.
singleChoice
=
true
;
const
date1
=
new
Date
();
const
date2
=
new
Date
(
x
.
UpdateTime
);
x
.
Day
=
getDaysBetween
(
date1
,
date2
);
});
};
arrList
(
pageRes
.
data
.
data
.
pageData
);
datas
.
selectedDatas
=
Array
.
from
(
new
Set
(
datas
.
selectedDatas
))
dataList
.
value
=
dataList
.
value
.
concat
(
pageRes
.
data
.
data
.
pageData
);
copyDataList
.
value
=
dataList
.
value
queryObj
.
pageCount
=
pageRes
.
data
.
data
.
pageCount
;
getSort
()
}
loading
.
value
=
false
;
datas
.
journeyAds
.
RefreshLoading
=
false
;
}
catch
(
error
)
{
loading
.
value
=
false
;
datas
.
journeyAds
.
RefreshLoading
=
false
;
}
};
const
scrollingHandler
=
()
=>
{
if
(
SellTemplateRef
.
value
&&
!
loading
.
value
)
{
let
maxHeight
=
SellTemplateRef
.
value
.
scrollHeight
-
SellTemplateRef
.
value
.
offsetHeight
;
let
scrollTop
=
SellTemplateRef
.
value
.
scrollTop
;
if
(
(
maxHeight
-
scrollTop
==
0
||
maxHeight
-
scrollTop
<
1
)
&&
queryObj
.
pageCount
>
queryObj
.
pageIndex
)
{
queryObj
.
pageIndex
++
;
querySearchHandler
();
}
}
};
const
refreshHandler
=
()
=>
{
datas
.
journeyAds
.
RefreshLoading
=
true
;
queryObj
.
pageIndex
=
1
;
querySearchHandler
();
};
const
operaFolder
=
(
id
:
number
,
name
:
string
)
=>
{
folderObj
.
value
.
id
=
id
;
folderObj
.
value
.
name
=
name
;
folderObj
.
value
.
type
=
queryObj
.
FileType
;
};
watch
(
()
=>
searchData
.
value
.
SellTemplateType
,
(
n
,
o
)
=>
{
isIndeterminate
.
value
=
false
;
datas
.
selectAll
=
false
;
datas
.
selectedDatas
=
[];
queryObj
.
FileType
=
n
;
queryObj
.
FileId
=
0
;
refreshHandler
();
}
);
watch
(()
=>
queryObj
.
FileId
,(
n
,
o
)
=>
{
if
(
!
n
)
Navigations
.
value
=
[]
}
);
onMounted
(()
=>
{});
querySearchHandler
();
</
script
>
<
style
lang=
"scss"
scoped
>
@import
url("../../../assets/styles/common.css")
;
.SelectAllBox
{
position
:
relative
;
top
:
3px
;
}
.journeyAds-title
{
}
.journeyAds-TitleCenter
{
width
:
100%
;
height
:
18px
;
padding-bottom
:
21px
;
overflow
:
hidden
;
/* 隐藏超出部分 */
text-overflow
:
ellipsis
;
/* 显示省略号 */
white-space
:
wrap
;
/* 不换行 */
position
:
relative
;
padding-right
:
20px
;
}
.journeyAds-TitleCenter
span
{
position
:
absolute
;
right
:
16px
;
top
:
0px
;
}
.journeyAds-Input
{
padding-right
:
20px
;
position
:
relative
;
margin-bottom
:
2px
;
::v-deep
(
.el-textarea__inner
)
{
padding
:
5px
;
background
:
#f5f5f5
;
}
}
.journeyAds-container
{
position
:
relative
;
overflow
:
auto
;
}
.journeyAds-container
th
{
background
:
#fff
;
position
:
sticky
;
top
:
0px
;
z-index
:
2
;
}
.journeyAdsple-table
td
>
div
{
display
:
flex
;
}
.journeyAdsple-table
td
,
.journeyAds-container
th
{
border-bottom
:
1px
solid
#f6f6f6
;
}
.journeyAdsple-table
td
:first-child
,
.journeyAdsple-table
td
:nth-child
(
2
),
.journeyAds-container
th
:first-child
{
border
:
0
;
}
.journeyAdsple-table
td
{
padding-bottom
:
6px
;
}
.journeyAdsple-table
td
:nth-child
(
2
)
{
padding-bottom
:
0
;
}
.hoverShow
{
opacity
:
0
;
}
.journeyAdsple-table
:hover
.hoverShow
{
opacity
:
1
;
}
.active
{
color
:
$themeColor
;
}
</
style
>
\ No newline at end of file
src/views/SellTemplate/components/Example.vue
deleted
100644 → 0
View file @
46e39564
<
template
>
<div
ref=
"SellTemplateRef"
style=
"height: 100%; overflow: auto;"
>
<el-scrollbar
height=
"100%"
class=
"q-px-md"
>
<div
class=
"row items-center q-pt-md"
style=
"min-width:1000px; "
>
<el-checkbox
size=
"sm"
v-model=
"datas.selectAll"
@
click=
"clickSelectAll"
/>
<div
class=
"col row"
style=
"border-bottom: 1px solid #F6F6F6;margin-left: 65px;"
>
<div
class=
"col text-small q-pb-md"
>
文档名称
</div>
<div
class=
"row Example-right text-small"
>
<div
class=
"col text-center"
>
最近修改
</div>
<div
class=
"col text-center"
>
创建者
</div>
<div
class=
"text-center Example-More Example-Controls"
>
<Popover
trigger=
"click"
placement=
"bottom-start"
v-model:value=
"datas.showControls"
center
class=
"col"
>
<template
#
content
>
<div
class=
"column"
>
<div
class=
"pointer q-mb-sm"
>
重命名
</div>
<div
class=
"pointer"
>
历史版本
</div>
</div>
</
template
>
<div
class=
"select-btn row items-center"
><IconSetting
/></div>
</Popover>
</div>
</div>
</div>
</div>
<pre
style=
"min-width:1000px;height: 50px;"
v-for=
"(item,index) in dataList"
>
<div
class=
"row items-center text-5B5D62 Example-box"
>
<div
class=
"row items-center"
>
<el-checkbox
size=
"sm"
v-model=
"item.singleChoice"
@
click=
"singleChoice(item)"
/>
<img
class=
"q-px-lg"
:src=
"item.TemplateType==1?datas.pdfImg:datas.adsImg"
style=
"height: 25px;"
/>
</div>
<div
class=
"col row Example-borderBot q-pt-sm q-pb-md"
>
<div
class=
"col row"
>
<span>
{{item.Title}}
</span>
</div>
<div
class=
"row items-center Example-right text-small"
>
<div
class=
"col text-center"
>
{{item.UpdateTime}}
</div>
<div
class=
"col text-center"
>
{{item.CreateByName}}
</div>
<div
class=
"Example-More Example-Controls"
>
<Popover
trigger=
"click"
placement=
"bottom-start"
v-model:value=
"item.showMore"
center
class=
"col"
>
<
template
#
content
>
<div
class=
"column"
>
<div
class=
"pointer q-mb-sm"
>
重命名
</div>
<div
class=
"pointer"
>
历史版本
</div>
</div>
</
template
>
<div
class=
"select-btn row items-center"
><IconMore
/></div>
</Popover>
</div>
</div>
</div>
</div>
</pre>
<div>
<div
v-if=
"dataList.length == 0 && !loading"
class=
"q-mt-lg bg-white rounded"
style=
"padding: 30px 10px 30px 10px;"
>
<el-empty
description=
"暂无数据"
/>
</div>
<el-divider
class=
"no-bg q-mt-lg"
v-if=
'queryObj.pageCount == queryObj.pageIndex && !loading'
>
<span
class=
"text-samll bg-white"
style=
"background: #f3f6fb;padding: 0 10px;color:#a3a3a3"
>
已加载完成所有数据
</span>
</el-divider>
<div
style=
"height:40px;"
class=
"q-mt-md no-bg"
background=
"transparent"
v-loading=
"loading"
element-loading-text=
"正在加载中"
></div>
</div>
</el-scrollbar>
</div>
</template>
<
script
setup
lang=
"ts"
>
import
{
ref
,
reactive
,
provide
,
watch
,
inject
,
onMounted
}
from
'vue'
import
{
ElLoading
,
ElMessage
,
ElMessageBox
}
from
"element-plus"
;
import
ConfigService
from
'@/services/ConfigService'
import
{
injectKeyTemplate
}
from
'@/types/injectKey'
import
{
recentTime
}
from
'@/utils/common'
const
PopoverVisibleControls
=
ref
(
false
)
const
dataList
=
ref
([]
as
Array
<
any
>
)
const
searchData
=
ref
({}
as
any
)
searchData
.
value
=
inject
(
injectKeyTemplate
)
const
datas
=
reactive
({
selectAll
:
false
,
showControls
:
false
,
SellDatas
:{
currentMenu
:
3
,
},
pdfImg
:
'https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1708337830000_43.png'
,
adsImg
:
'https://viitto-1301420277.cos.ap-chengdu.myqcloud.com/Test/Upload/Goods/1708250377000_777.png'
,
})
let
TemplateType
=
0
if
(
searchData
.
value
.
SellTemplateType
)
TemplateType
=
searchData
.
value
.
SellTemplateType
const
queryObj
=
reactive
({
Title
:
''
,
pageIndex
:
1
,
pageSize
:
20
,
pageCount
:
0
,
//总页数
TemplateType
:
TemplateType
,
})
datas
.
SellDatas
=
inject
(
'SellDatas'
)
const
loading
=
ref
(
false
as
any
)
const
SellTemplateRef
=
ref
<
any
>
()
// 全选按钮
const
clickSelectAll
=
()
=>
{
}
const
singleChoice
=
(
row
:
any
)
=>
{
}
const
setTemplateType
=
(
Id
:
number
)
=>
{
console
.
log
(
Id
)
queryObj
.
TemplateType
=
Id
searchData
.
value
.
SellTemplateType
=
Id
queryObj
.
pageIndex
=
1
querySearchHandler
()
}
const
DeleteTemplate
=
async
(
item
:
any
)
=>
{
ElMessageBox
.
confirm
(
'此操作将删除该模版,是否确定?'
,
'提示'
,
{
confirmButtonText
:
'确定'
,
cancelButtonText
:
'取消'
,
type
:
'warning'
,
}
).
then
(
async
()
=>
{
try
{
let
queryMsg
=
{
Id
:
item
.
Id
}
deleteLoading
.
value
=
ElLoading
.
service
({
lock
:
true
,
text
:
'正在处理'
})
let
pageRes
=
await
ConfigService
.
sellSetRemoveTemplate
(
queryMsg
);
if
(
pageRes
.
data
.
resultCode
==
1
)
{
queryObj
.
pageIndex
=
1
ElMessage
({
showClose
:
true
,
message
:
`删除
${
item
.
TemplateType
==
2
?
'广告'
:
'行程'
}
成功`
,
type
:
'success'
,
})
querySearchHandler
()
}
else
{
ElMessage
({
showClose
:
true
,
message
:
`删除
${
item
.
TemplateType
==
2
?
'广告'
:
'行程'
}
失败`
,
type
:
'warning'
,
})
}
deleteLoading
.
value
.
close
()
deleteLoading
.
value
=
null
}
catch
(
error
)
{}
}).
catch
(()
=>
{})
}
const
editDelete
=
async
(
row
:
any
,
type
:
Number
)
=>
{
if
(
type
==
1
){
DeleteTemplate
(
row
)
}
else
{
let
list
=
[
{
id
:
'test-slide-1'
,
pageType
:
0
,
elements
:
[],
background
:
{
type
:
'solid'
,
color
:
'#ffffff'
,
},
}
]
useSlidesStore
().
setSlides
(
list
)
searchData
.
value
.
sellId
=
row
.
Id
searchData
.
value
.
sellTempId
=
row
.
TempId
searchData
.
value
.
TemplateType
=
row
.
TemplateType
SalesEditorStore
.
setSalesEditor
(
2
)
marketStore
.
setMarket
(
false
)
}
}
const
querySearchHandler
=
async
()
=>
{
loading
.
value
=
true
try
{
if
(
queryObj
.
pageIndex
==
1
)
dataList
.
value
=
[]
let
pageRes
=
await
ConfigService
.
sellGetTripOtherPage
(
queryObj
);
if
(
pageRes
.
data
.
resultCode
==
1
)
{
let
arrList
=
function
(
list
){
list
.
forEach
(
x
=>
{
x
.
show
=
false
x
.
showMore
=
false
});
}
arrList
(
pageRes
.
data
.
data
.
pageData
)
dataList
.
value
=
dataList
.
value
.
concat
(
pageRes
.
data
.
data
.
pageData
);
queryObj
.
pageCount
=
pageRes
.
data
.
data
.
pageCount
;
}
loading
.
value
=
false
}
catch
(
error
)
{
loading
.
value
=
false
}
}
const
scrollingHandler
=
()
=>
{
if
(
SellTemplateRef
.
value
&&
!
loading
.
value
){
let
maxHeight
=
SellTemplateRef
.
value
.
scrollHeight
-
SellTemplateRef
.
value
.
offsetHeight
let
scrollTop
=
SellTemplateRef
.
value
.
scrollTop
if
((
maxHeight
-
scrollTop
==
0
||
maxHeight
-
scrollTop
<
1
)
&&
queryObj
.
pageCount
>
queryObj
.
pageIndex
)
{
queryObj
.
pageIndex
++
querySearchHandler
()
}
}
}
watch
(()
=>
datas
.
SellDatas
.
currentMenu
,
()
=>
{
queryObj
.
pageIndex
=
1
querySearchHandler
()
})
onMounted
(()
=>
{
SellTemplateRef
.
value
.
addEventListener
(
"scroll"
,
scrollingHandler
);
})
querySearchHandler
()
</
script
>
<
style
lang=
"scss"
scoped
>
@import
url('../../../assets/styles/common.css')
;
.Example-box
{
}
.Example-right
{
width
:
300px
;
}
.Example-borderBot
{
border-bottom
:
1px
solid
#F6F6F6
;
}
.Example-Controls
{
width
:
50px
;
}
.Example-More
{
height
:
20px
;
font-size
:
12px
;
display
:
flex
;
flex-shrink
:
0
;
cursor
:
pointer
;
.btn
{
flex
:
1
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
&
:hover
{
background-color
:
$lightGray
;
}
}
.select-btn
{
width
:
30px
;
height
:
100%
;
display
:
flex
;
justify-content
:
center
;
align-items
:
center
;
&
:hover
{
background-color
:
$lightGray
;
}
}
.icon
{
margin-right
:
3px
;
font-size
:
14px
;
}
}
</
style
>
\ No newline at end of file
src/views/SellTemplate/components/journeyAds.vue
View file @
38e1bb2b
...
...
@@ -285,7 +285,7 @@ if (searchData.value.SellTemplateType)
const
queryObj
=
reactive
({
pageIndex
:
1
,
pageSize
:
2
0
,
pageSize
:
5
0
,
pageCount
:
0
,
//总页数
FileType
:
TemplateType
,
FileId
:
0
,
...
...
@@ -685,7 +685,7 @@ querySearchHandler();
.journeyAds-TitleCenter
{
width
:
100%
;
height
:
18px
;
padding-bottom
:
21
px
;
margin-bottom
:
3
px
;
overflow
:
hidden
;
/* 隐藏超出部分 */
text-overflow
:
ellipsis
;
/* 显示省略号 */
white-space
:
wrap
;
/* 不换行 */
...
...
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