Commit 38394a72 authored by 黄奎's avatar 黄奎

111

parents 4b906066 ccd06b45
......@@ -514,9 +514,6 @@ page {
.q-mt-lg{
margin-top:20px
}
.q-mb-md{
margin-bottom:10px
}
.q-mb-lg{
margin-bottom:20px
}
......@@ -738,7 +735,8 @@ page {
border:none !important;
}
.el-button:not(.is-link).none-border,.el-menu-item.none-border,
.el-button:not(.is-link).none-border:hover,.el-menu-item.none-border:hover{
.el-button:not(.is-link).none-border:hover,.el-menu-item.none-border:hover,
.el-dropdown.none-border:hover,.el-dropdown-menu.none-border:hover{
border: 0;
}
.el-avatar--square{
......
<template>
<el-dialog v-model="dialogFormVisible"
:show-close="false"
:title="dialogTitle" width="340"
:close-on-press-escape="false" :close-on-click-modal="false" >
<div>
<el-input v-model="addEditMsg.GName"
placeholder="请输入分组名称">
</el-input>
<el-input class="q-pt-lg" type="Number" v-model="addEditMsg.SortNum"
placeholder="排序">
</el-input>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="setGroup" :loading="setLoading">
确认
</el-button>
</div>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import { reactive, ref, onMounted, watch} from "vue";
import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
import CloudDiskService from '@/services/CloudDiskService'
import { ApiResult } from "@/configs/axios";
const dialogFormVisible = ref(true)
const dialogTitle = ref('')
const setLoading = ref(false)
// const addEditMsg = reactive({
// Id: '',
// GName: '',
// SortNum: null,
// })
const props = defineProps({
dialogType: {
type: Number,
required: true,
},
addEditMsg: {
type: Object,
required: '',
},
})
const emit = defineEmits<{
(event: 'close'): void,
(event: 'success'): void,
}>()
dialogTitle.value = props.dialogType==1?'新增分组名称':'编辑分组名称'
const close = () =>{
dialogFormVisible.value = false
emit('close')
}
const setGroup = async () =>{
if(!props.addEditMsg.GName) return ElMessage.warning({
showClose: true,
message: `请输入分组名称`,
})
setLoading.value = true
let pageRes = await CloudDiskService.SetPPTCloudGroup(props.addEditMsg);
if (pageRes.data.resultCode==ApiResult.SUCCESS) {
dialogFormVisible.value = false
emit('success')
}
setLoading.value = false
}
</script>
\ No newline at end of file
<template>
<el-dialog v-model="dialogFormVisible"
:show-close="false"
:title="dialogTitle" width="340"
:close-on-press-escape="false" :close-on-click-modal="false" >
<div v-loading="loadingGroup">
<el-select v-model="params.GId" placeholder="Select" style="width: 100%;"
@change="getGName">
<el-option
v-for="item in GroupList"
:key="item.Id"
:label="item.GName"
:value="item.Id"
>
</el-option>
</el-select>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="close">取消</el-button>
<el-button type="primary" @click="submit" :loading="setLoading">
确认{{dialogType==1?'复制':'移动'}}
</el-button>
</div>
</template>
</el-dialog>
</template>
<script lang="ts" setup>
import { reactive, ref, onMounted, watch} from "vue";
import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
import CloudDiskService from '@/services/CloudDiskService'
import { ApiResult } from "@/configs/axios";
const dialogFormVisible = ref(true)
const dialogTitle = ref('')
const setLoading = ref(false)
const loadingGroup = ref(false)
// const GroupList = ref([] as any)
const currentGroup = ref('' as any)
const props = defineProps({
dialogType: {
type: Number,
required: true,
},
DetailsId: {
type: String,
required: '',
},
GroupId: {
type: String,
required: '',
},
GroupList:{
type: Array,
required: [],
}
})
const params = reactive({
Id: '' as String,
GId: '' as String,
})
params.GId = props.GroupId
const emit = defineEmits<{
(event: 'close'): void,
(event: 'success'): void,
}>()
dialogTitle.value = props.dialogType==1?'复制文件':'移动文件'
const getGName = () =>{
let GroupArr = GroupList.value.filter(x=>x.Id==params.GId)
currentGroup.value = GroupArr[0].GName
}
const close = () =>{
dialogFormVisible.value = false
emit('close')
}
const submit = () => {
params.Id = props.DetailsId
let text = ''
if(props.dialogType==1)text = `复制到${currentGroup.value}分组下`
else text = `移动至${currentGroup.value}分组下`
ElMessageBox.confirm(
`${text}`,
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).then(() => {
setCopy()
}).catch(() => {})
}
const setCopy = async () =>{
setLoading.value = true
let pageRes;
if(props.dialogType==1) pageRes = await CloudDiskService.CloudFileCopy(params);
else pageRes = await CloudDiskService.CloudFileMove(params);
if (pageRes.data.resultCode==ApiResult.SUCCESS) {
dialogFormVisible.value = false
emit('success')
}
setLoading.value = false
}
const querySearchGroup = async () =>{
if(loadingGroup.value) return
loadingGroup.value = true
try {
// let datasRes = await CloudDiskService.GetPPTCloudLists('');
// if (datasRes.data.resultCode==ApiResult.SUCCESS) {
// GroupList.value = datasRes.data.data.list
// GroupList.value.unshift({
// Id: '',
// GName: '全部',
// RecordNum: datasRes.data.data.TotalNum
// })
// let GroupArr = GroupList.value.filter(x=>x.Id==params.GId)
// if(GroupArr.length==0) params.GId = ''
// }
loadingGroup.value = false
} catch (error) {
loadingGroup.value = false
}
}
querySearchGroup()
let GroupArr = props.GroupList.filter(x=>x.Id==params.GId)
if(GroupArr.length==0) params.GId = ''
</script>
\ No newline at end of file
......@@ -2,13 +2,13 @@
<div class="CloudDisk-form row">
<div class="CloudDisk-L">
<div class="row CloudDisk-L-inquire">
<el-input class="grow" v-model="GName"
placeholder="搜索分组名称" @keyup.enter="querySearchGroup"
<el-input style="width: 123px;" v-model="GName"
placeholder="搜索分组名称" clearable @keyup.enter="querySearchGroup"
@input="SearchGroup">
</el-input>
<el-button type="primary" @click="addEditGroup">添加</el-button>
</div>
<div class="CloudDisk-L-Center fz14" v-loading="deleteLoading">
<div class="CloudDisk-L-Center fz14" v-loading="loadingGroup">
<div class="CloudDisk-L-Title row flex-between cusor-pointer"
v-for="(item,index) in GroupList" :key="index" @click.stop="Search(item)"
:class="[queryObj.CloudGroupId==item.Id?'active':'']">
......@@ -102,7 +102,6 @@
v-model:current-page="queryObj.pageIndex"
:page-size="queryObj.pageSize"
small-padding
small="small"
layout="prev, pager, next"
:total="total"
@size-change="handleSizeChange"
......@@ -112,25 +111,12 @@
</div>
</div>
<el-dialog v-model="dialogFormVisible"
:title="dialogTitle" width="340" @close="close">
<div>
<el-input v-model="addEditMsg.GName"
placeholder="请输入分组名称">
</el-input>
<el-input class="q-pt-lg" type="Number" v-model="addEditMsg.SortNum"
placeholder="排序">
</el-input>
</div>
<template #footer>
<div class="dialog-footer">
<el-button @click="dialogFormVisible = false">取消</el-button>
<el-button type="primary" @click="setGroup" :loading="setLoading">
确认
</el-button>
</div>
</template>
</el-dialog>
<NewEditCloudDisk
v-if="dialogFormVisible"
:dialogType="dialogType"
:addEditMsg="addEditMsg"
@close="close"
@success="dialogFormVisible=false,querySearchGroup()"></NewEditCloudDisk>
</template>
<script lang="ts" setup>
import { Plus, Top, Bottom, Delete, Edit } from "@element-plus/icons-vue";
......@@ -143,11 +129,12 @@ import AliyunUpload from '@/utils/upload/aliyun'
import { useUserStore } from "@/store";
import { storeToRefs } from 'pinia'
import { ApiResult } from "@/configs/axios";
import NewEditCloudDisk from './NewEdit'
const { token, userInfo } = storeToRefs(useUserStore())
const dialogFormVisible = ref(false)
const dialogTitle = ref('')
const dialogType = ref(0)
const queryObj = reactive({
pageIndex: 1,
pageSize: 11,
......@@ -167,11 +154,9 @@ const GroupId = ref(''|Number)
const imgDiskRef = ref<any>()
const dataList = ref([] as any)
const loading = ref(false)
const loadingGroup = ref(false)
const GroupList = ref([] as any)
const setLoading = ref(false)
const deleteLoading = ref(false)
const deleteImgLoading = ref<any>(null)
const props = defineProps({
active: '' as any,
show: false as Boolean
......@@ -180,7 +165,8 @@ const props = defineProps({
const GroupObj = ref({} as any)
const emit = defineEmits<{
(event: 'setImg'): void
(event: 'setImg'): void,
(event: 'getImg'): void,
}>()
watch(() => props.active, () => {
......@@ -294,27 +280,14 @@ const deleteImg = (item:any) => {
const addEditGroup = () =>{
dialogFormVisible.value = true
dialogTitle.value = '添加分组名称'
}
const setGroup = async () =>{
if(!addEditMsg.GName) return ElMessage.warning({
showClose: true,
message: `请输入分组名称`,
})
setLoading.value = true
let pageRes = await CloudDiskService.SetPPTCloudGroup(addEditMsg);
if (pageRes.data.resultCode==ApiResult.SUCCESS) {
dialogFormVisible.value = false
querySearchGroup()
}
setLoading.value = false
dialogType.value = 1
}
const close = () =>{
addEditMsg.Id = ''
addEditMsg.GName = ''
addEditMsg.SortNum = null
dialogFormVisible.value = false
}
const EditGroup = (item:any) =>{
......@@ -323,11 +296,11 @@ const EditGroup = (item:any) =>{
addEditMsg.GName = data.GName
addEditMsg.SortNum = data.SortNum
dialogFormVisible.value = true
dialogTitle.value ='编辑分组名称'
dialogType.value = 2
}
// 删除
const deleteGroup = (item:any) => {
const deleteGroup = async (item:any) => {
ElMessageBox.confirm(
`此操作将删除该分组,是否确定?`,
'提示',
......@@ -337,13 +310,13 @@ const deleteGroup = (item:any) => {
type: 'warning',
}
).then(async () => {
loadingGroup.value = true
try {
deleteLoading.value = true
let dataRes = await CloudDiskService.RemovePPTCloudGroup(item.Id)
loadingGroup.value = false
if (dataRes.data.resultCode == 1) {
querySearchGroup()
}
deleteLoading.value = false
} catch (error) {}
}).catch(() => {})
......@@ -353,6 +326,8 @@ const SearchGroup = () => {
if(GName.value=='') querySearchGroup()
}
const querySearchGroup = async () =>{
if(loadingGroup.value) return
loadingGroup.value = true
try {
let datasRes = await CloudDiskService.GetPPTCloudList(GName.value);
if (datasRes.data.resultCode==ApiResult.SUCCESS) {
......@@ -363,9 +338,11 @@ const querySearchGroup = async () =>{
RecordNum: datasRes.data.data.TotalNum
})
}
loadingGroup.value = false
} catch (error) {
loadingGroup.value = false
}
}
const SearchImg = () =>{
if(queryObj.FileName=='') Search()
......@@ -380,6 +357,7 @@ const Search = (item:any=null) =>{
}
const querySearchHandler = async () =>{
if(loading.value) return
loading.value = true
try {
// if(queryObj.pageIndex == 1) dataList.value =[]
......
......@@ -84,7 +84,7 @@ import { useSellTemplateStore,useSlidesStore } from '@/store'
import { useScreenStore } from "@/store/screen";
import { storeToRefs } from "pinia";
import { injectKeyTemplate } from '@/types/injectKey'
import { createOpEditorLink, createSaleCreateLink, managerTemplateLink } from '@/utils/common'
import { noDataImg, createOpEditorLink, createSaleCreateLink, managerTemplateLink, createSaleEditorLink } from '@/utils/common'
import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
import { useRouter } from "vue-router";
import UserCard from "@/components/User/UserCard.vue";
......@@ -92,8 +92,6 @@ import { Delete,View } from '@element-plus/icons-vue';
import { VIEWPORT_SIZE, VIEWPORT_VER_SIZE } from '@/configs/canvas'
import foote from '@/components/footer/index.vue';
import { noDataImg } from "@/utils/common";
const slidesStore = useSlidesStore()
const {
......@@ -228,9 +226,16 @@ const getTemplate = async (item:any) => {
* 页面跳转
*/
const goToTemplate = (item: any) => {
if((searchData.value.TempId2&&searchData.value.TempId2!=item.TempId)||!searchData.value.TempId2) slidesStore.ClearSlides()
searchData.value.TempId = item.TempId
if((searchData.value.TempId2&&searchData.value.TempId2!=item.TempId)||!searchData.value.TempId2) {
slidesStore.ClearSlides()
}
let url = ''
if(model.value==2) url = createSaleCreateLink(item.TempId,item.TemplateType)
else if(model.value==2&&searchData.value.TempId2) {
let Editor = searchData.value.SalesEditor
url = createSaleEditorLink(Editor.id,item.TempId,Editor.type,Editor.pid,Editor.e,Editor.c)
}
else if(model.value==0 && router.currentRoute.value.params.configId) url = createOpEditorLink(parseInt(router.currentRoute.value.params.configId.toString()),item.TempType,item.TempId)
else if(model.value==1) {
searchData.value.currentMenu = null
......
......@@ -3,6 +3,27 @@ import Api,{ HttpResponse, Result } from './../utils/request';
class CloudDiskService{
static async CloudFileCopy(params:any):Promise<HttpResponse>{
return Api.Post("ppt_CloudFileCopy",params)
}
static async CloudFileMove(params:any):Promise<HttpResponse>{
return Api.Post("ppt_CloudFileMove",params)
}
static async UpdateCloudInfoName(params:any):Promise<HttpResponse>{
return Api.Post("ppt_UpdateCloudInfoName",params)
}
static async GetPPTCloudLists(GName:String):Promise<HttpResponse>{
let msg = {GName}
return Api.Post("ppt_GetPPTCloudList",msg)
}
static async GetPPTCloudInfoPages(params:any):Promise<HttpResponse>{
return Api.Post("ppt_GetPPTCloudInfoPage",params)
}
static async CheckCloudInfo(parms:any):Promise<HttpResponse>{
let msg = parms
return Api.Post("ppt_CheckCloudInfo",msg)
......@@ -15,11 +36,11 @@ class CloudDiskService{
static async GetPPTCloudList(GName:String):Promise<HttpResponse>{
let msg = {GName}
return Api.Post("ppt_GetMyCloudList",msg)//ppt_GetPPTCloudList
return Api.Post("ppt_GetMyCloudList",msg)
}
static async GetPPTCloudInfoPage(params:any):Promise<HttpResponse>{
return Api.Post("ppt_GetMyPPTCloudInfoPage",params)//ppt_GetPPTCloudInfoPage
return Api.Post("ppt_GetMyPPTCloudInfoPage",params)
}
static async RemovePPTCloudGroup(Id:Number):Promise<HttpResponse>{
......
......@@ -7,7 +7,7 @@
<el-tabs v-model="activeName" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane label="平台资料库" name="1">
<template v-if="userInfo.iv||userInfo.it">
<el-row class="q-mb-md">
<el-row>
<el-col :span="6">
<el-select v-model="datas.queryMsg.Type" class="m-2"
@change="SearchHandler()">
......@@ -28,7 +28,7 @@
<!-- <el-input v-model="datas.queryMsg.Name" placeholder="输入关键字快速查找" clearable class="input-with-select q-pl-lg" @change="SearchHandler()"></el-input> -->
</el-col>
</el-row>
<div class="row UploadPicture-box" v-loading="datas.loading">
<div class="row UploadPicture-box q-pt-lg" v-loading="datas.loading">
<div v-for="(item,index) in datas.imgList" class="UploadPicture-list" :key="item.ID">
<div class="UploadPicture-listBox">
<img :src="item.Path" class="" @click="getImgs(item,index)"/>
......@@ -44,7 +44,7 @@
<el-pagination
v-model:current-page="datas.queryMsg.pageIndex"
:page-size="datas.queryMsg.pageSize"
small="small"
small-padding
layout="prev, pager, next"
:total="datas.queryMsg.total"
@size-change="handleSizeChange"
......@@ -377,16 +377,18 @@ getImgList()
}
.UploadPicture-box{
flex-wrap: wrap;
margin-left: -10px;
}
.UploadPicture-list{
width: 150px;
margin: 5px;
width: calc(25% - 10px) !important;
margin-bottom: 10px;
margin-left: 10px;
}
.UploadPicture-listBox{
width: 150px;
height: 0;
position: relative;
padding-bottom: 56.25%;
padding-bottom: 64.96%;
}
.UploadPicture-list img{
width: 100%;
......
......@@ -224,7 +224,6 @@ const journeyAdsDetails = ref<Object>()
const psdVisibleStatus = ref(false)
const { market, model, ConfigId, CoverImg, dataLoading, TempId, TempType, SourceLoading } = storeToRefs(useScreenStore())
const routers = useRouter();
// 返回到首页 type 1 模版列表页 0 销售在线模版页
const goBack = (type:any) =>{
mainBackVisible.value = false
......@@ -241,11 +240,19 @@ const goBack = (type:any) =>{
mainStore.setToolbarState(ToolbarStates.SLIDE_DESIGN)
let path ='/'
const t = useSlidesStore().viewportRatio<0?1:2
searchData.value.SalesEditor = null
if(model.value==0) {
path = `/market/op/${ConfigId.value}/${TempType.value}`
router.push({path})
}else if(model.value==2){
if(type==1) path = `/market/create`
if(type==1) {
searchData.value.SalesEditor = router.currentRoute.value.params
searchData.value.TempId2 = queryObj.value.TempId
marketStore.setMarket(true)
SalesBackStore.setSalesBack(1)
searchData.value.TempId = 0
path = `/market/create/${queryObj.value.TemplateType==1?'trip':'ad'}${searchData.value.currentMenu>=0?'/'+searchData.value.currentMenu:''}`
}
else if(searchData.value.currentMenu>=0) {
path = `/space/${searchData.value.currentMenu}`
searchData.value.currentMenu = null
......@@ -258,13 +265,7 @@ const goBack = (type:any) =>{
}
// 返回是否清空数据
const setNewDatas = (type,i) => {
if(type) {
marketStore.setMarket(true)
if(model.value==2) {
if(searchData.value.TempId) searchData.value.TempId2 = searchData.value.TempId
SalesBackStore.setSalesBack(1)
}
}else {
if(!type) {
searchData.value.TempId2 = 0
searchData.value.sellId = 0
searchData.value.sellTempId = 0
......@@ -272,8 +273,6 @@ const setNewDatas = (type,i) => {
SalesBackStore.setSalesBack(0)
SalesEditorStore.setSalesEditor(0)
}
searchData.value.TempId = 0
// i 1模版权限 0无模版权限
CoverImgStore.setCoverImg(null)
}
// 导入PSD
......
......@@ -522,7 +522,8 @@ const GetTripTemplate = async () =>{
queryObj.value.TempType = dataRes.data.data.TempType
queryObj.value.TemplateType = dataRes.data.data.TemplateType
queryObj.value.AuthType = dataRes.data.data.AuthType
queryObj.value.Title = dataRes.data.data.Title
if(queryObj.value.Width){
VIEWPORT_SIZE.Value = queryObj.value.Height
VIEWPORT_VER_SIZE.Value = queryObj.value.Width
......@@ -943,7 +944,6 @@ const contextmenusThumbnailItem = (): ContextmenuItem[] => {
},
]
}
if(searchData.value.sellId&&!searchData.value.TempId) sellGetTripTemplate()
if(!viewSlideShow) {
GetTripTemplate()
......
......@@ -237,7 +237,7 @@ import { useSellTemplateStore, useSlidesStore } from '@/store'
import { useScreenStore } from "@/store/screen";
import { storeToRefs } from "pinia";
import { injectKeyTemplate } from '@/types/injectKey'
import { createOpEditorLink, createSaleCreateLink, managerTemplateLink } from '@/utils/common'
import { createOpEditorLink, createSaleCreateLink, managerTemplateLink, createSaleEditorLink } from '@/utils/common'
import { ElLoading, ElMessage, ElMessageBox } from "element-plus";
import { useRouter } from "vue-router";
import UserCard from "@/components/User/UserCard.vue";
......@@ -428,9 +428,16 @@ const getTemplate = (item:any,index:Number) => {
* 页面跳转
*/
const goToTemplate = (item: any) => {
if((searchData.value.TempId2&&searchData.value.TempId2!=item.TempId)||!searchData.value.TempId2) slidesStore.ClearSlides()
searchData.value.TempId = item.TempId
if((searchData.value.TempId2&&searchData.value.TempId2!=item.TempId)||!searchData.value.TempId2) {
slidesStore.ClearSlides()
}
let url = ''
if(model.value==2) url = createSaleCreateLink(item.TempId,item.TemplateType)
if(model.value==2&&!searchData.value.TempId2) url = createSaleCreateLink(item.TempId,item.TemplateType)
else if(model.value==2&&searchData.value.TempId2) {
let Editor = searchData.value.SalesEditor
url = createSaleEditorLink(Editor.id,item.TempId,Editor.type,Editor.pid,Editor.e,Editor.c)
}
else if(model.value==0 && router.currentRoute.value.params.configId) url = createOpEditorLink(parseInt(router.currentRoute.value.params.configId.toString()),item.TempType,item.TempId)
else if(model.value==1) url = managerTemplateLink(item.TempId,item.TemplateType)
if(url!='') {
......
<template>
<div class="q-px-md q-pt-lg column full-height" ref="currentRootDom">
<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="q-pl-md">
<span class="pointer">云盘</span>
</span>
</h5>
<div class="select-btn q-pl-lg pointer q-mt-sm">
<el-icon>
<RefreshRight
v-if="!RefreshLoading"
@click="querySearchGroup(),refreshHandler()"
/>
<Refresh v-else />
</el-icon>
</div>
</div>
</div>
<div class="col full-width full-height q-ml-md">
<div class="CloudDisk-form row full-height">
<div class="CloudDisk-L">
<div class="row CloudDisk-L-inquire">
<el-input style="width: 123px;" v-model="GName"
placeholder="搜索分组名称" clearable @keyup.enter="querySearchGroup"
@input="SearchGroup">
</el-input>
<el-button @click="addEditGroup">添加</el-button>
</div>
<div class="CloudDisk-L-Center fz14" v-loading="loadingGroup">
<div class="CloudDisk-L-Title row flex-between cusor-pointer"
v-for="(item,index) in GroupList" :key="index"
:class="[queryObj.CloudGroupId==item.Id?'active':'']">
<span class="block" @click="refreshHandler(item)">{{item.GName}}</span>
<div class="row">
<template v-if="item.Id">
<el-dropdown class="q-pl-lg CloudDisk-L-TitleR" trigger="click">
<div class="CloudDisk-L-Title-M row items-center flex-center">
<el-icon size="16"><MoreFilled /></el-icon>
</div>
<template #dropdown>
<el-dropdown-menu class="q-pa-md">
<el-dropdown-item @click.stop="EditGroup(item)">
<el-button type="default" link icon="Edit" size="small">重命名</el-button>
</el-dropdown-item>
<el-dropdown-item v-if="!item.IsCanDelete" @click.stop="deleteGroup(item)">
<el-button type="default" link icon="Delete" size="small">删除分组</el-button>
</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</template>
<div class="CloudDisk-L-TitleR" @click="refreshHandler(item)" v-else></div>
<span class="CloudDisk-L-TitleR" @click="refreshHandler(item)" v-if="item.RecordNum>0">{{item.RecordNum?item.RecordNum:''}}
</span>
</div>
</div>
</div>
</div>
<div class="CloudDisk-R grow">
<div class="row flex-center CloudDisk-R-inquire">
<el-input v-model="queryObj.FileName" placeholder="请输入图片名称搜索" clearable @keyup.enter="refreshHandler"
@input="SearchImg">
<template #append>
<el-button type="primary" style="color: white;" @click="refreshHandler">搜索</el-button>
</template>
</el-input>
</div>
<div ref="imgDiskRef" class="full-height" style="padding-top: 10px; overflow: auto;"
:style="{'padding-bottom':queryObj.pageCount == queryObj.pageIndex && !loading?'20px':'85px'}">
<div class="CloudDisk-R-Center row">
<FileInput @change="files => insertImageElement(files)">
<div class="CloudDisk-R-Box">
<div class="CloudDisk-R-Plus column items-center cusor-pointer">
<el-icon class="el-input__icon" size="30px" title="">
<Plus/>
</el-icon>
<span>添加图片</span>
</div>
</div>
</FileInput>
<template v-for="(item,index) in dataList">
<el-dropdown trigger="click">
<div class="CloudDisk-R-Box cursor-pointer">
<div class="CloudDisk-R-Img">
<el-image :src="item.FilePath" style="width: 100%; height: 100%;"
fit="cover"/>
</div>
<span class="title block">
{{item.FileName}}
</span>
</div>
<template #dropdown>
<div class="cloudDownName microsoft">
<div class="col row items-center user-nickname" style="color:#000;" v-if="editorTarget!=item.DetailsId">
<span class="grow">{{item.FileName}}</span>
<IconPencli size="14" class="q-ml-md cusor-pointer editor-pencli" @click="setNameHandler(item)"></IconPencli>
</div>
<div class="col row items-center" v-else>
<el-input v-model="nickNam" placeholder="请输入用户昵称" size="small" class="col" />
<el-button link size="small" class="q-ml-sm" type="primary" @click="setCloudNameHandler(item)"
:loading="editLoading">确认</el-button>
<el-button link size="small" style="margin-left: 5px;" @click="setNameHandler">取消</el-button>
</div>
</div>
<div class="cloudDownText row flex-between">
<span>类型</span>
<span>图片</span>
</div>
<div class="cloudDownText row flex-between">
<span>格式</span>
<span>{{item.FileName.split('.')[1]}}</span>
</div>
<div class="cloudDownText row flex-between" v-if="item.WithHeight">
<span>尺寸</span>
<span>{{item.WithHeight}} px</span>
</div>
<div class="cloudDownText cloudDownTextLin row flex-between">
<span>大小</span>
<span>{{item.FileSize}} kb</span>
</div>
<el-dropdown-menu class="q-pa-md microsoft">
<el-dropdown-item icon="CopyDocument" @click="CopyTo(item)">复制到</el-dropdown-item>
<el-dropdown-item icon="Expand" @click="MoveFile(item)">移动到</el-dropdown-item>
<el-dropdown-item icon="Delete" @click="deleteImg(item)">删除</el-dropdown-item>
</el-dropdown-menu>
</template>
</el-dropdown>
</template>
</div>
<div v-if='queryObj.pageCount == queryObj.pageIndex && !loading' class="text-center q-pt-lg">
<!-- <img :src="noDataImg(2)" width="118" /> -->
</div>
<template v-else>
<div style="height:40px;" class="no-bg" background="transparent" v-loading="loading" element-loading-text="正在加载中"></div>
</template>
</div>
<!-- <div v-if="queryObj.pageCount>1" class="q-mt-md" style="display: flex;justify-content: center;">
<el-pagination
v-model:current-page="queryObj.pageIndex"
:page-size="queryObj.pageSize"
small-padding
layout="prev, pager, next"
:total="total"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
/>
</div> -->
</div>
</div>
</div>
</div>
<NewEditCloudDisk
v-if="dialogFormVisible"
:dialogType="dialogType"
:addEditMsg="addEditMsg"
@close="close"
@success="close(),dialogFormVisible=false,querySearchGroup()"></NewEditCloudDisk>
<copyMove
v-if="dialogCMVisible"
:dialogType="dialogType"
:DetailsId="addEditMsg.Id"
:GroupId="GroupId"
:GroupList="GroupAll"
@close="close"
@success="close(),dialogCMVisible=false,SearchGroup(),refreshHandler()"></copyMove>
</template>
<script setup lang="ts">
import { ref, reactive, watch, inject, onMounted, PropType } from "vue";
import { ElMessage } from "element-plus";
import { ArrowLeft,CopyDocument } from "@element-plus/icons-vue";
import CloudDiskService from "@/services/CloudDiskService";
import { injectKeyTemplate } from "@/types/injectKey";
import { useSellTemplateStore, useScreenStore } from "@/store";
import { ApiResult } from "@/configs/axios";
import NewEditCloudDisk from '@/components/CloudDisk/NewEdit'
import copyMove from '@/components/CloudDisk/copyMove'
import { noDataImg } from "@/utils/common";
const RefreshLoading = ref(false)
const queryObj = reactive({
pageIndex: 1,
pageSize: 71,
CloudGroupId: '',
FileName: '',
total: 0
})
const loading = ref(false as any)
const dataList = ref([] as Array<any>);
const currentRootDom = ref()
const GName= ref('')
const addEditMsg = reactive({
Id: '',
GName: '',
SortNum: null,
})
const dialogFormVisible = ref(false)
const dialogType = ref(0)
const loadingGroup = ref(false)
const GroupList = ref([] as any)
const GroupAll = ref([] as any)
const imgDiskRef = ref<any>()
const editorTarget = ref('')
const nickNam = ref(''|| Number)
const GroupId = ref(''|Number)
const dialogCMVisible = ref(false)
const editLoading = ref(false)
const CopyTo = (row:any) =>{
addEditMsg.Id = row.DetailsId
GroupId.value = row.CloudGroupId
dialogType.value = 1
dialogCMVisible.value = true
}
const MoveFile = (row:any) =>{
addEditMsg.Id = row.DetailsId
GroupId.value = row.CloudGroupId
dialogType.value = 2
dialogCMVisible.value = true
}
const setCloudNameHandler = async (target:any)=>{
if(editLoading.value || nickNam.value=='' || !nickNam.value) return
editLoading.value = true
let params = {
Id: target.DetailsId,
FileName: nickNam.value
}
let dataRes = await CloudDiskService.UpdateCloudInfoName(params)
if (dataRes.data.resultCode==ApiResult.SUCCESS) {
refreshHandler()
}
editLoading.value = false
}
const setNameHandler = (target:any) =>{
if(target){
editorTarget.value = target.DetailsId
nickNam.value = target.FileName
}else{
editorTarget.value = ''
nickNam.value = ''
}
}
// 删除
const deleteImg = (item:any) => {
let text
if(item.IsCanDelete) text = '删除此图会影响模板正常使用,将无法恢复,是否确定?'
else text = '此操作将删除该图,是否确定?'
ElMessageBox.confirm(
`${text}`,
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).then(async () => {
try {
loading.value = true
let dataRes = await CloudDiskService.RemovePPTCloudInfo(item.DetailsId)
if (dataRes.data.resultCode==ApiResult.SUCCESS) {
querySearchHandler()
}
loading.value = false
} catch (error) {}
}).catch(() => {})
}
const addEditGroup = () =>{
dialogFormVisible.value = true
dialogType.value = 1
}
const close = () =>{
addEditMsg.Id = ''
addEditMsg.GName = ''
addEditMsg.SortNum = null
dialogFormVisible.value = false
dialogCMVisible.value = false
GroupId.value = ''
dialogType.value = 0
}
const EditGroup = (item:any) =>{
let data = JSON.parse(JSON.stringify(item))
addEditMsg.Id = data.Id
addEditMsg.GName = data.GName
addEditMsg.SortNum = data.SortNum
dialogFormVisible.value = true
dialogType.value = 2
}
const insertImageElement = async (files: FileList) => {
let name = files[0].name.split('.')
const loadingObj = ElLoading.service({
text:'正在上传图',
lock:true
})
const hash = await calculateFileHash(files[0])
if(hash!='') {
await checkedUploadFileExsit(files[0],hash)
}else{
await uoloadFileToService(files[0])
}
loadingObj.close()
}
const checkedUploadFileExsit = async (file:File,hash:any)=>{
let parms = {
fname: file.name,
gid: queryObj.CloudGroupId,
hi: hash
}
const dataRes = await CloudDiskService.CheckCloudInfo(parms)
if (dataRes.data.resultCode==ApiResult.SUCCESS) {
queryObj.CloudGroupId = ''
queryObj.FileName = dataRes.data.data.SourceFileName
refreshHandler()
} else {
if(dataRes.data.message=='不存在此文件!') await uoloadFileToService(file)
}
}
const uoloadFileToService = async (file:File)=>{
let parms = {
isppt: '1',
uid: token.value,
gid: queryObj.CloudGroupId
}
let filePath="tripImg/";
let url = await AliyunUpload.UploadCloudDisk(file, filePath, parms);
if(url) {
querySearchGroup()
refreshHandler()
}
}
const calculateFileHash = (file:File, algorithm = 'SHA-256') => {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = (event) => {
if(event && event.target && event.target.result){
const buffer:any = event.target.result;
if(crypto && crypto.subtle && crypto.subtle.digest){
crypto.subtle.digest(algorithm, buffer)
.then(hashBuffer => {
const hashArray = Array.from(new Uint8Array(hashBuffer));
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
resolve(hashHex);
})
.catch(error => resolve(''));
}else{
resolve('')
}
}else{
resolve('')
}
};
reader.onerror = reject;
reader.readAsArrayBuffer(file); // Read only the first 1MB of the file
});
}
// 删除
const deleteGroup = async (item:any) => {
ElMessageBox.confirm(
`此操作将删除该分组,是否确定?`,
'提示',
{
confirmButtonText: '确定',
cancelButtonText: '取消',
type: 'warning',
}
).then( async () => {
loadingGroup.value = true
try {
let dataRes = await CloudDiskService.RemovePPTCloudGroup(item.Id)
loadingGroup.value = false
if (dataRes.data.resultCode == 1) {
querySearchGroup()
}
} catch (error) {}
}).catch(() => {})
}
const SearchGroup = () => {
if(GName.value=='') querySearchGroup()
}
const querySearchGroup = async () =>{
if(loadingGroup.value) return
loadingGroup.value = true
try {
let datasRes = await CloudDiskService.GetPPTCloudLists(GName.value);
if (datasRes.data.resultCode==ApiResult.SUCCESS) {
GroupList.value = datasRes.data.data.list
GroupList.value.unshift({
Id: '',
GName: '全部',
RecordNum: datasRes.data.data.TotalNum
})
if(!GName.value) GroupAll.value = GroupList.value
}
loadingGroup.value = false
} catch (error) {
loadingGroup.value = false
}
}
const SearchImg = () =>{
if(queryObj.FileName=='') refreshHandler()
}
const refreshHandler = (row:any) => {
// currentRootDom.value.click()
if(row) queryObj.CloudGroupId = row.Id
RefreshLoading.value = true;
queryObj.pageIndex = 1;
querySearchHandler();
};
const querySearchHandler = async () => {
loading.value = true;
try {
if (queryObj.pageIndex == 1) dataList.value = [];
let pageRes = await CloudDiskService.GetPPTCloudInfoPages(queryObj);
if (pageRes.data.resultCode==ApiResult.SUCCESS) {
let arrList = function (list) {
list.forEach((x) => {
x.show = false;
});
};
arrList(pageRes.data.data.pageData);
dataList.value = dataList.value.concat(pageRes.data.data.pageData);
queryObj.pageCount = pageRes.data.data.pageCount;
}
loading.value = false;
RefreshLoading.value = false;
} catch (error) {
ElMessage.error({
message:'数据加载异常,请刷新页面'
})
loading.value = false;
RefreshLoading.value = false;
}
};
const scrollingHandler = () =>{
if(imgDiskRef.value && !loading.value){
let maxHeight = imgDiskRef.value.scrollHeight - imgDiskRef.value.offsetHeight
let scrollTop = imgDiskRef.value.scrollTop
if(maxHeight - scrollTop==0 && queryObj.pageCount > queryObj.pageIndex) {
queryObj.pageIndex++
querySearchHandler()
}
}
}
querySearchGroup()
querySearchHandler()
onMounted(()=>{
imgDiskRef.value.addEventListener("scroll", scrollingHandler);
})
</script>
<style lang="scss" scoped>
.CloudDisk-R-inquire::v-deep(.el-button){
border-top-left-radius: 0;
border-bottom-left-radius: 0;
/* height: 36px; */
}
.CloudDisk-L{
border-right: 1px solid #E9E9E9;
padding: 0 20px 22px 0;
}
.CloudDisk-L-inquire{
margin-bottom: 20px;
}
.CloudDisk-L-inquire .el-input{
width: 112px;
/* height: 36px; */
}
.CloudDisk-L-inquire .el-button{
/* height: 36px; */
margin-left: 20px;
}
.CloudDisk-L-Title:first-child{
}
.CloudDisk-L-Title{
padding: 0 10px;
font-weight: 400;
font-family: PingFang SC;
border-radius: 8px;
margin-bottom: 3px;
}
.CloudDisk-L-Title span:first-child{
width: 108px;
padding: 11px 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.CloudDisk-L-Title span:last-child{
color: #BBC7C3;
}
.CloudDisk-L-TitleR{
padding: 11px 0;
}
.CloudDisk-L-Title-M{
width: 24px;
height: 24px;
border-radius: 4px;
margin-right: 6px;
border: 0 !important;
}
.CloudDisk-L-Title-M:hover{
background: #BED0FB;
color: #fff;
}
.CloudDisk-L-Title.active{
color: #3556F9 ;
background: #EEF3FF;
}
.CloudDisk-L-Title.active .CloudDisk-L-Title-M{
/* background: #BED0FB; */
}
.CloudDisk-L-Title:hover{
background: #EEF3FF ;
}
.CloudDisk-L-Title:hover span:first-child{
color: #3556F9 ;
}
.CloudDisk-R-inquire{
padding-left: 24px;
padding-right: 20px;
}
.CloudDisk-R-inquire .el-input{
width: 30vw;
padding-bottom: 10px;
/* height: 36px; */
}
.CloudDisk-R-Center{
flex-wrap: wrap;
}
.CloudDisk-R-Plus{
width: 85px;
height: 85px;
border-radius: 8px;
border: 2px dashed #CECECE;
color:#cecece;
}
.CloudDisk-R-Plus:hover{
border-color: #000000;
color:#000000;
}
.CloudDisk-R-Plus .el-icon{
margin-top: 13px;
}
.CloudDisk-R-Plus span{
// font-family: PingFang SC;
font-weight: 400;
font-size: 14px;
// color: #CECECE;
}
.CloudDisk-R-Box{
width: 87px;
margin-left: 24px;
margin-bottom: 24px;
position: relative;
}
.CloudDisk-R-Img{
width: 85px;
height: 85px;
margin-bottom: 9px;
border-radius: 8px;
overflow: hidden;
/* border:2px solid transparent; */
/* background: #8790F3; */
box-shadow: 0px 0px 13px 0px #eee;
border-radius: 8px;
border-color:#eee;
}
.CloudDisk-R-Img .el-image{
width: 85px;
}
.title{
width: 85px;
line-height: 17px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
font-family: PingFang SC;
font-weight: 400;
font-size: 14px;
color: #000000;
}
.CloudDisk-L-Center{
height: 95%;
overflow-y: scroll;
}
.CloudDisk-R-Box.active .CloudDisk-R-Img{
width: 85px;
height: 85px;
background: #8790F3;
box-shadow: 0px 0px 13px 0px #0D3EBC;
border-radius: 8px;
border-color:#3556F9;
}
.CloudDisk-R-Box .close-btn{
position: absolute;
top: -10px;
right: 0px;
width: 20px;
height: 20px;
line-height: 12px;
background: #fff;
border:1px solid #AFAFAF;
text-align: center;
color:#AFAFAF;
border-radius: 50%;
z-index: 3;
display: none;
}
.CloudDisk-R-Box.active2:hover .close-btn{
display: block;
}
.cloudDownName{
min-width: 200px;
padding: 10px 20px 15px 20px;
font-size: 14px;
color: #000;
}
.cloudDownText{
padding: 0 20px 10px 20px;
font-size: 14px;
}
.cloudDownTextLin{
border-bottom: 1px solid #F0F0F0;
}
.user-nickname .editor-pencli{
/* visibility: hidden; */
}
.user-nickname:hover .editor-pencli{
/* visibility:visible; */
}
</style>
\ No newline at end of file
......@@ -30,6 +30,11 @@
<div class="tabs-items">
<div class="item" :class="{'active':currentMenu==-1}" @click="setCurrentMenuHandler(-1)" v-if="userInfo.iv||userInfo.it"><el-icon color="#564bec" class="q-mr-md" size="16"><Delete /></el-icon>回收站</div>
</div>
<div class="tabs-items" v-if="userInfo.iv||userInfo.it">
<div class="q-mb-md q-ml-lg text-small">我的云盘</div>
<div class="item" :class="{'active':currentMenu==5}" @click="setCurrentMenuHandler(5)"><el-icon color="#564bec" class="q-mr-md" size="16"><MostlyCloudy /></el-icon>云盘空间</div>
</div>
</div>
<div class="col">
<BrowsingHistory :current-menu="currentMenu" v-if="currentMenu==0"></BrowsingHistory>
......@@ -37,6 +42,7 @@
<journeyAds :position="position" :current-menu="currentMenu" v-if="currentMenu==3||currentMenu==4" @destroy-position="()=>position=null"></journeyAds>
<RecycleBin :current-menu="currentMenu" v-if="currentMenu==-1"></RecycleBin>
<ShareList :position="position" v-if="currentMenu==2" @destroy-position="()=>position=null"></ShareList>
<CloudDiskList v-if="currentMenu==5"></CloudDiskList>
</div>
</template>
<script setup lang="ts">
......@@ -48,6 +54,7 @@ import StarTarget from './StarTarget.vue'
import ShareList from './Share.vue';
import journeyAds from './journeyAds.vue'
import RecycleBin from './RecycleBin.vue'
import CloudDiskList from './CloudDiskList.vue'
import { Plus,ArrowDown,Clock,Star,Share,Picture,Management,Delete,Setting } from '@element-plus/icons-vue';
import { useRouter } from 'vue-router';
import { openNewBlank } from '@/utils/common';
......
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