Commit d4ca7880 authored by zhengke's avatar zhengke

列表 组件

parent e12aaccf
......@@ -53,50 +53,13 @@
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':currentMenu==3||currentMenu==4?'20px':'0px'}">
<el-checkbox v-if="currentMenu==3||currentMenu==4"
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="[queryObj.OrderByType==1?'active':'']"><CaretTop /></el-icon>
<el-icon class="reactive"
style="top:-3px" :class="[queryObj.OrderByType==2?'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>
<journeyAdsList
:current-menu="currentMenu"
:list="dataList"
:msg="queryObj"
:selected-datas="datas.selectedDatas"
@UpdateData="UpdateData"
@success="success"
@refreshHandler="cribrosin"></journeyAdsList>
</table>
</div>
@refreshHandler="refreshHandler"></journeyAdsList>
<div
v-if="dataList.length == 0 && !loading"
class="q-mt-lg bg-white rounded"
......@@ -124,13 +87,6 @@
</el-scrollbar>
</div>
<TreeFile v-if="isTreeFile"
:selected-datas="datas.selectedDatas"
:set-file-list="datas.setFileList"
:file-type="queryObj.FileType"
@close="() => isTreeFile=false"
@success="success"></TreeFile>
</template>
<script setup lang="ts">
import { ApiResult } from '@/configs/axios';
......@@ -156,7 +112,6 @@
});
const PopoverVisibleControls = ref(false);
const isTreeFile = ref(false)
const Navigations = ref([] as Array<any>);
const isIndeterminate = ref(false);
const dataList = ref([] as Array<any>);
......@@ -185,28 +140,12 @@
const UpdateData = (obj:any) =>{
dataList.value = obj.list
singleChoice(obj.row)
}
const success = () => {
isTreeFile.value =false;
datas.selectAll = false;
datas.selectedDatas = [];
refreshHandler()
}
const cribrosin = (msg:any) =>{
if(msg&&msg.FileId!=undefined){
datas.selectAll = false
datas.selectedDatas = []
isIndeterminate.value = false
}
if(msg) queryObj = msg
refreshHandler()
}
const clickSort = () =>{
if(queryObj.OrderByType==2) queryObj.OrderByType = 1
else queryObj.OrderByType = 2
refreshHandler()
}
const sellAdd = (type:number) =>{
searchData.value.sellId = 0
......@@ -247,48 +186,6 @@
}
};
// 全选按钮
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 (checkedCount == 0) {
datas.selectAll = ""
isIndeterminate.value = false;
}
};
const querySearchHandler = async () => {
loading.value = true;
try {
......@@ -301,14 +198,6 @@
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);
......@@ -340,7 +229,13 @@
}
}
};
const refreshHandler = () => {
const refreshHandler = (obj:any) => {
if(obj){
if(obj.FileId) {
queryObj.FileId = obj.FileId
}
if(obj.OrderByType) queryObj.OrderByType = obj.OrderByType
}
datas.RefreshLoading = true;
queryObj.pageIndex = 1;
querySearchHandler();
......
......@@ -63,7 +63,6 @@
:props="defaultProps"
v-model="datas.FolderId"
:data="dataList"
default-expand-all
check-strictly
:render-after-expand="false"
style="width: 220px"
......
......@@ -112,6 +112,7 @@ import CopyFile from "./CopyFile.vue";
})
const emit = defineEmits<{
(event: 'close'): void
(event: 'refreshHandler'): void
}>()
const datas = reactive({
type: 1,
......@@ -186,6 +187,7 @@ import CopyFile from "./CopyFile.vue";
const refreshHandler = () => {
queryObj.pageIndex = 1;
querySearchHandler();
emit('refreshHandler')
};
querySearchHandler()
......
......@@ -56,7 +56,6 @@
:props="defaultProps"
v-model="datas.FolderId"
:data="dataList"
default-expand-all
check-strictly
:render-after-expand="false"
style="width: 220px"
......@@ -98,6 +97,10 @@ import FolderService from "@/services/FolderService";
fileType: {
type:Number,
required: 1
},
fileId:{
type: Number,
required: ''
}
})
const emit = defineEmits<{
......@@ -123,7 +126,7 @@ import FolderService from "@/services/FolderService";
FolderObj: {},
checkedKeys: null as any
})
datas.FolderId = props.details?props.details.ParentFileId:props.setFileList[0].ParentFileId
datas.FolderId = props.fileId
const show=ref(true)
const loading = ref(true)
const deleteLoading = ref<any>(null);
......
......@@ -70,100 +70,16 @@
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="[queryObj.OrderByType==1?'active':'']"><CaretTop /></el-icon>
<el-icon class="reactive"
style="top:-3px" :class="[queryObj.OrderByType==2?'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)" valign="middle" >
<div :class="{'share-icon-box':item.IsShare}" style="display: inline-block;">
<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;" />
</div>
</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>{{formatDateTimeToRead(item.UpdateTime&&item.UpdateTime!=''?item.UpdateTime:item.CreateTime)}}</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 icon="Position" @click.stop="()=>setFileShareHandler(item)">分享</el-dropdown-item>
<el-dropdown-item v-if="item.IsShare" icon="Hide" @click.stop="removeShareHandler(item)">取消分享</el-dropdown-item>
<el-dropdown-item icon="Expand" @click.stop="MoveFile(item)">移动至</el-dropdown-item>
<el-dropdown-item v-if="item.FileType" icon="CopyDocument" @click.stop="CopyTo(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>
<journeyAdsList
:current-menu="currentMenu"
:position="position"
:list="dataList"
:msg="queryObj"
:navigations="Navigations"
:selected-datas="datas.selectedDatas"
@UpdateData="UpdateData"
@success="success"
@refreshHandler="refreshHandler"></journeyAdsList>
<div
v-if="dataList.length == 0 && !loading"
class="q-mt-lg bg-white rounded"
......@@ -190,12 +106,6 @@
></div>
</el-scrollbar>
</div>
<ShareForm
:id="shareId"
:file-type="shareFileType"
v-if="shareId > 0"
@close="() => (shareId = 0,refreshHandler())"
></ShareForm>
<Folder
:folder-id="folderObj?.id"
:folder-name="folderObj?.name"
......@@ -206,28 +116,16 @@
@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"
:file-id="queryObj.FileId"
:msg="queryObj"
@close="() => {journeyAdsDetails = '';isTreeFile=false}"
@success="() => {
journeyAdsDetails = '';
isTreeFile=false;
datas.selectAll = false;
datas.selectedDatas = [];
refreshHandler()}"></TreeFile>
@success="success()"></TreeFile>
<CopyFile v-if="isCopyTo"
:details="journeyAdsDetails"
@close="() => {journeyAdsDetails = '';isCopyTo=false}"></CopyFile>
</template>
<script setup lang="ts">
import { ref, reactive, provide, watch, inject, onMounted, PropType } from "vue";
......@@ -244,6 +142,7 @@ import HistoricalVersion from "./HistoricalVersion.vue";
import TreeFile from "./TreeFile.vue";
import breadPeeling from "./breadPeeling.vue";
import { ApiResult } from "@/configs/axios";
import journeyAdsList from "./journeyAdsList.vue";
const SalesEditorStore = useSellTemplateStore();
const marketStore = useScreenStore();
......@@ -259,21 +158,13 @@ const props = defineProps({
});
const PopoverVisibleControls = ref(false);
const shareId = ref(0);
const shareFileType = ref(0)
const journeyAdsDetails = ref('');
const isHistoricalVersion = ref(false);
const isCopyTo = 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 NewDataList = ref([] as Array<any>);
const searchData = ref({} as any);
searchData.value = inject(injectKeyTemplate);
const deleteLoading = ref<any>(null);
const removeShareLoading = ref<any>(null);
const datas = reactive({
selectedDatas: [] as Array,
selectAll: false as any,
......@@ -306,24 +197,30 @@ const queryObj = reactive({
FileId: 0,
OrderByType: 2,//1 升序 2倒序
});
const editObj = reactive({});
//datas.journeyAds = inject('journeyAds')
const loading = ref(false as any);
const SellTemplateRef = ref<any>();
const CopyTo = (row:any) => {
isCopyTo.value = true
journeyAdsDetails.value = row
// 已选数据
const UpdateData = (obj:any) =>{
if(obj){
if(obj.list) dataList.value = obj.list
if(obj.selectedDatas) datas.selectedDatas = obj.selectedDatas
}
}
const clickSort = (type:any) =>{
if(queryObj.OrderByType==2) queryObj.OrderByType = 1
else queryObj.OrderByType = 2
const success = () => {
isTreeFile.value = false;
datas.selectedDatas = [];
for (let index = 0; index < dataList.value.length; index++) {
const element = dataList.value[index]
element.singleChoice = false;
}
refreshHandler()
}
// 导航
const BackInquire = () => {
datas.selectAll = false;
datas.selectedDatas = [];
let Navigation = Navigations.value[Navigations.value.length-2]
if(Navigation&&Navigation.FileId){
......@@ -332,7 +229,6 @@ const BackInquire = () => {
}
const breadPeelingInquire = (FileId:number,index:number)=> {
datas.selectAll = false;
datas.selectedDatas = [];
Navigations.value.splice(index+1, Navigations.value.length-1)
queryObj.FileId = FileId
......@@ -346,9 +242,7 @@ const sellAdd = (type:number) =>{
}
// 移动到文件夹
const MoveFile = (item:any) => {
if(item) journeyAdsDetails.value = item
else {
const MoveFile = () => {
datas.setFileList = []
for(let i=0;i<dataList.value.length;i++){
for(let j=0;j<datas.selectedDatas.length;j++){
......@@ -363,251 +257,11 @@ const MoveFile = (item:any) => {
}
}
}
}
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 removeShareHandler= async (item:any) =>{
if(removeShareLoading.value) return
removeShareLoading.value=ElLoading.service({
lock: true,
text: "正在处理",
})
let errmsg=''
try {
let response = await ConfigService.RemoveFileShareAsync([item.FileId])
if(response.data.resultCode==ApiResult.SUCCESS){
ElMessage.success({
message:'设置成功'
})
item.IsShare=false
} else errmsg='取消分享失败,请刷新重试'
} catch (error) {
errmsg = '取消分享失败,请刷新重试'
}
if(errmsg!='') {
ElMessage.error({
message:errmsg
})
}
removeShareLoading.value.close();
removeShareLoading.value = null;
}
// 全选按钮
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 () => {
if(loading.value) return
loading.value = true;
try {
if (queryObj.pageIndex == 1) dataList.value = [];
......@@ -619,14 +273,6 @@ const querySearchHandler = async () => {
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);
......@@ -658,7 +304,15 @@ const scrollingHandler = () => {
}
}
};
const refreshHandler = () => {
const refreshHandler = (obj:any) => {
if(obj){
if(obj.FileId) {
queryObj.FileId = obj.FileId
datas.selectedDatas = []
}
if(obj.OrderByType) queryObj.OrderByType = obj.OrderByType
if(obj.Navigations) Navigations.value = obj.Navigations
}
datas.journeyAds.RefreshLoading = true;
queryObj.pageIndex = 1;
querySearchHandler();
......@@ -682,16 +336,10 @@ const checkPositionHandler = (n:any)=>{
emit('destroy-position')
}
}
const setFileShareHandler=(item:any)=>{
shareFileType.value=item.FileType
shareId.value =item.FileId
}
watch(
() => searchData.value.SellTemplateType,
(n, o) => {
isIndeterminate.value = false;
datas.selectAll = false;
datas.selectedDatas = [];
queryObj.FileType = n;
queryObj.FileId = 0;
......
<template>
<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 v-if="currentMenu==3||currentMenu==4"
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="[queryObj.OrderByType==1?'active':'']"><CaretTop /></el-icon>
<el-icon class="reactive"
style="top:-3px" :class="[queryObj.OrderByType==2?'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>
<tr class="text-5B5D62 journeyAdsple-table pointer" v-for="(item,index) in dataList">
<td @click.stop="OffEdit()">
<td @click.stop="item.FileType?OffEdit():editDelete(item,2)">
<div v-if="currentMenu==3||currentMenu==4" 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="OffEdit()" valign="middle" >
<td style="width: 30px;" @click.stop="item.FileType?OffEdit():editDelete(item,2)" valign="middle" >
<div :class="{'share-icon-box':item.IsShare}" style="display: inline-block;">
<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;" />
</div>
</td>
<td class="journeyAds-title wrap row">
<div class="col" v-if="!item.editTitle" @click.stop="OffEdit()">
<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">
......@@ -35,8 +68,8 @@
v-if="item.editTitle"
@blur="handleUpdateTitle(item)"
/></td>
<td class="text-center" @click.stop="OffEdit()"><span>{{formatDateTimeToRead(item.UpdateTime&&item.UpdateTime!=''?item.UpdateTime:item.CreateTime)}}</span></td>
<td class="text-center" @click.stop="OffEdit()"><span>{{item.CreateName}}</span></td>
<td class="text-center" @click.stop="item.FileType?OffEdit():editDelete(item,2)"><span>{{formatDateTimeToRead(item.UpdateTime&&item.UpdateTime!=''?item.UpdateTime:item.CreateTime)}}</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>
......@@ -46,7 +79,7 @@
<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 icon="Position" @click.stop="()=>shareId=item.FileId">分享</el-dropdown-item>
<el-dropdown-item icon="Position" @click.stop="()=>setFileShareHandler(item)">分享</el-dropdown-item>
<el-dropdown-item v-if="item.IsShare" icon="Hide" @click.stop="removeShareHandler(item)">取消分享</el-dropdown-item>
<el-dropdown-item v-if="currentMenu==3||currentMenu==4" icon="Expand" @click.stop="MoveFile(item)">移动至</el-dropdown-item>
<el-dropdown-item @click.stop="CollectHandler(item)">
......@@ -64,6 +97,8 @@
</div>
</td>
</tr>
</table>
</div>
<ShareForm
:id="shareId"
v-if="shareId > 0"
......@@ -83,19 +118,23 @@
:details="journeyAdsDetails"
v-if="isHistoricalVersion"
@close="() => {journeyAdsDetails = '';isHistoricalVersion=false}"
@refreshHandler="emit('refreshHandler')"
></HistoricalVersion>
<TreeFile v-if="isTreeFile"
:details="journeyAdsDetails"
:selected-datas="props.selectedDatas"
:selected-datas="datas.selectedDatas"
:set-file-list="datas.setFileList"
:file-type="journeyAdsDetails.FileType"
:file-id="queryObj.FileId"
@close="() => {journeyAdsDetails = '';isTreeFile=false}"
@success="() => {
journeyAdsDetails = '';
isTreeFile=false;
emit('success')
emit('refreshHandler')}"></TreeFile>
datas.selectAll=false;
isIndeterminate=false;
datas.selectedDatas=[];
emit('success')}"></TreeFile>
<CopyFile v-if="isCopyTo"
:details="journeyAdsDetails"
......@@ -126,6 +165,10 @@ import CopyFile from "./CopyFile.vue";
type: Number,
default: 3,
},
position:{
type:Object as PropType<{FileId:number,FileType:1|2,Position:{FileId:number,FileName:string}[]}|null>,
default:null
},
list:{
type:Array,
required:[]
......@@ -138,6 +181,10 @@ import CopyFile from "./CopyFile.vue";
type:Array,
required:[]
},
navigations:{
type:Array,
required:[]
},
})
const emit = defineEmits<{
(event: 'close'): void,
......@@ -152,6 +199,8 @@ import CopyFile from "./CopyFile.vue";
type: number;
}>({ id: -1, name: "", parentId: 0, number: 1 });
const datas = reactive({
selectedDatas: [] as Array,
selectAll: false as any,
journeyAds: { RefreshLoading: false } as any,
fileList: [] as any,
setFileList: [] as any,
......@@ -170,9 +219,11 @@ import CopyFile from "./CopyFile.vue";
queryObj.value = props.msg
const shareId = ref(0);
const shareFileType = ref(0)
const journeyAdsDetails = ref('');
const isHistoricalVersion = ref(false);
const isCopyTo = ref(false);
const isIndeterminate = ref(false);
const isTreeFile = ref(false)
const Navigations = ref([] as Array<any>);
const searchData = ref({} as any);
......@@ -180,6 +231,14 @@ import CopyFile from "./CopyFile.vue";
const deleteLoading = ref<any>(null);
const removeShareLoading = ref<any>(null);
const editObj = reactive({});
const clickSort = (type:any) =>{
let obj = {
OrderByType: queryObj.value.OrderByType==2?1:2
}
emit('refreshHandler',obj)
}
// 收藏文件
const CollectHandler = async (row:any) => {
try {
......@@ -223,8 +282,8 @@ import CopyFile from "./CopyFile.vue";
else {
datas.setFileList = []
for(let i=0;i<dataList.value.length;i++){
for(let j=0;j<props.selectedDatas.length;j++){
if(dataList.value[i].FileId==props.selectedDatas[j]){
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,
......@@ -313,14 +372,60 @@ import CopyFile from "./CopyFile.vue";
removeShareLoading.value.close();
removeShareLoading.value = null;
}
// 全选按钮
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;
}
}
let obj = {
selectedDatas: datas.selectedDatas,
}
emit('UpdateData',obj)
}, 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);
if(datas.selectedDatas.length>0) isIndeterminate.value = true;
}
getSelectBox()
let obj = {
row: row,
list: dataList.value
selectedDatas: datas.selectedDatas,
list: dataList.value,
}
emit('UpdateData',obj)
};
const getSelectBox = () => {
let checkedCount = datas.selectedDatas.length;
let datasList = dataList.value.length;
if (checkedCount > 0 && datasList == checkedCount) {
datas.selectAll = true
};
if (checkedCount > 0 && (datasList > checkedCount||datasList < checkedCount)) {
datas.selectAll = ""
isIndeterminate.value = true;
}
if (checkedCount == 0) {
datas.selectAll = ""
isIndeterminate.value = false;
};
}
const DeleteFile = async (item: any) => {
ElMessageBox.confirm("此操作将删除该文件夹及其下的文件,是否确定?", "提示", {
confirmButtonText: "确定",
......@@ -424,7 +529,6 @@ import CopyFile from "./CopyFile.vue";
} else {
// 2文件夹详情
if (type == 2) {
queryObj.FileId = row.FileId;
Navigations.value.push(
{
FileId: row.FileId,
......@@ -432,7 +536,11 @@ import CopyFile from "./CopyFile.vue";
ParentFileId: row.ParentFileId
}
);
emit('refreshHandler',queryObj.value);
let obj = {
FileId: row.FileId,
Navigations: Navigations.value
}
emit('refreshHandler',obj);
} else {
folderObj.value.id = row.FileId;
folderObj.value.name = row.FileName;
......@@ -441,14 +549,69 @@ import CopyFile from "./CopyFile.vue";
}
}
};
watch(() => props.list, () => {
const operaFolder = (id: number, name: string) => {
folderObj.value.id = id;
folderObj.value.name = name;
folderObj.value.type = queryObj.FileType;
};
const checkPositionHandler = (n:any)=>{
if(n){
if(n.Position && n.Position.length>0){
Navigations.value=n.Position
queryObj.FileId = n.Position[n.Position.length-1].FileId
queryObj.FileType = 0
}else{
Navigations.value=[]
queryObj.FileId = 0
queryObj.FileType = n.FileType
}
emit('destroy-position')
}
}
const setFileShareHandler=(item:any)=>{
shareFileType.value=item.FileType
shareId.value =item.FileId
}
watch(() => props.list, (n,o) => {
if (props.list) {
nextTick(() => dataList.value =props.list )
nextTick(() => {
dataList.value = props.list
for (let index = 0; index < dataList.value.length; index++) {
const element = dataList.value[index];
if (datas.selectAll) {
element.singleChoice = true;
datas.selectedDatas.push(element.FileId);
} else if (
datas.selectedDatas.length > 0 &&
datas.selectedDatas.indexOf(element.FileId) != -1
) element.singleChoice = true;
}
})
}
})
watch(() => props.selectedDatas, (n,o) => {
datas.selectedDatas = props.selectedDatas
getSelectBox()
})
watch(() => props.navigations, (n,o) => {
Navigations.value = n
for (let index = 0; index < dataList.value.length; index++) {
const element = dataList.value[index];
element.singleChoice = false
}
datas.selectAll = false
datas.selectedDatas = []
isIndeterminate.value = false
let obj = {
selectedDatas: datas.selectedDatas,
}
emit('UpdateData',obj)
})
</script>
<style scoped>
<style lang="scss" scoped>
.journeyAds-title {
}
.journeyAds-TitleCenter {
......@@ -479,12 +642,24 @@ import CopyFile from "./CopyFile.vue";
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 {
border-bottom: 1px solid #f6f6f6;
}
.journeyAds-container th {
border-bottom: 1px solid #f6f6f6;
}
.journeyAds-container th:first-child {
border: 0;
}
.journeyAdsple-table td:first-child,
.journeyAdsple-table td:nth-child(2) {
border: 0;
......@@ -515,5 +690,8 @@ import CopyFile from "./CopyFile.vue";
height: 14px;
z-index: 2;
}
.active {
color: $themeColor;
}
</style>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment