Browse Source

素材库组件间调用调整

dev
xuhuajiao 3 years ago
parent
commit
067f479caa
  1. 210
      src/views/components/MaterialCompontentList.vue
  2. 5
      src/views/components/MyAlbum.vue
  3. 118
      src/views/content/material/materialList/index.vue
  4. 11
      src/views/dashboard/HomeThemeGallery.vue
  5. 10
      src/views/immediateRelease/index.vue

210
src/views/components/MaterialCompontentList.vue

@ -1,210 +0,0 @@
<template>
<div ref="materialContent" class="material_content">
<div v-if="isToFolder" class="material_item cont_upload">
<el-button class="return_btn" round type="primary" @click="returnFolder">返回</el-button>
</div>
<!-- 文件夹list -->
<div v-for="(item,index) in materialFolders" :key="item.id" :class="['material_item', 'folder']" @dblclick="floderDbClick(item,index)">
<div class="icon_bg">
<svg v-if="!item.imgPath" class="font-icon icon" aria-hidden="true">
<use xlink:href="#icon-wenjianjia" />
</svg>
<img v-else :src="item.imgPath" />
</div>
<p class="file_name">{{ item.name }}</p>
</div>
<div v-for="(item, index) in materialList" :key="'list-'+index" :class="['material_item', 'item_cont', { 'item_multi': selectedListId.includes(item.material_id) }]">
<img v-if="item.img_path || item.material_type == 1" :src="item.img_path" :onerror="defaultImg" alt />
<div v-if="!item.img_path && item.material_type == 2" class="radio_img"></div>
<div class="item_format">
<span class="item_type">{{ item.deposit_url | getFileFormat }}</span>
<span v-if="item.material_type !== '0'" class="item_time">{{ item.duration | getSeconds }}</span>
</div>
<div class="file_name">{{ item.material_name }}</div>
<span v-if="isMultiSelected" class="checked_btn" @click="checkedItem(item)"></span>
</div>
</div>
</template>
<script>
import { getMaterialList } from '@/api/material/material'
import { getSeconds, getFileFormat } from '@/utils/index.js'
export default {
name: 'MaterialList',
components: {},
filters: {
getSeconds(s) {
return getSeconds(s)
},
getFileFormat(str) {
return getFileFormat(str)
}
},
props: {
isMultiSelected: {
type: Boolean,
required: true
},
activeItemIndex: {
type: Number,
required: true
}
},
data() {
return {
orga_id: '133221333123111', // ID
rootFolderId: null, // ID
thisFoldId: null, // ID
materialFolders: [], // list
materialList: [], // list
materialType: null,
materialTypeNot: null,
selectedMaterial: [], //
selectedListId: [], // material_id
selectinFolderid: [], // id -- in_folder_id
isToFolder: false, //
isReturn: false, //
currentFolderId: null // ID
}
},
computed: {
changePlaceholder() {
return this.publishType === 0 ? '即时发布 2022-01-01' : '定时发布 2022-01-01'
},
defaultImg() {
return 'this.src="' + require('@/assets/images/menu_bg_02.png') + '"'
}
},
watch: {
isMultiSelected(newName, oldName) {
if (newName === false) {
this.selectedListId = []
}
},
activeItemIndex(val) {
console.log(val)
if (val == 0) {
this.materialType = null
this.materialTypeNot = 2
} else {
this.materialType = val - 1
}
this.getMaterialList()
}
},
mounted() {
this.materialTypeNot = 2
this.getMaterialList()
},
methods: {
// list
getMaterialList() {
this.materialFolders = []
this.materialList = []
let params
if (this.isToFolder) {
let folder_id
if (this.isReturn) {
folder_id = this.rootFolderId
} else {
this.currentFolderId = localStorage.getItem('currentFolderId')
folder_id = this.currentFolderId
}
params = {
'folder_id': folder_id,
'material_name': null,
'material_type': this.materialType,
'material_type_not': this.materialTypeNot,
'orga_id': this.orga_id
}
} else {
console.log('文件夹外')
localStorage.removeItem('currentFolderId')
params = {
'folder_id': null,
'material_name': null,
'material_type': this.materialType,
'material_type_not': this.materialTypeNot,
'orga_id': this.orga_id
}
}
getMaterialList(params).then(res => {
if (res.code == 200) {
if (!this.isToFolder) {
localStorage.setItem('rootFolderId', res.data.thisFoldId)
}
this.materialFolders = res.data.materialFolders
this.materialList = res.data.pageThemeVO
// data
this.thisFoldId = res.data.thisFoldId
} else {
this.$message({
message: res.msg,
type: 'error'
})
}
})
},
returnFolder() {
this.isReturn = false
this.isToFolder = false
this.rootFolderId = localStorage.getItem('rootFolderId')
this.getMaterialList()
},
//
floderDbClick(item, index) {
this.isToFolder = true
this.currentFolderId = item.id
localStorage.setItem('currentFolderId', this.currentFolderId)
this.getMaterialList()
this.selectedListId = []
},
// -
checkedItem(item) {
const id = item.material_id
const inFolderId = item.in_folder_id
const type = item.material_type
const arr = this.selectedListId
if (arr.includes(id)) {
const index = arr.indexOf(id)
if (index > -1) {
arr.splice(index, 1)
this.selectinFolderid.splice(index, 1)
this.selectedMaterial.splice(index, 1)
}
} else {
this.selectedListId.push(id)
this.selectinFolderid.push(inFolderId)
this.selectedMaterial.push(item)
this.formatType = type
}
}
}
}
</script>
<style lang="scss" scoped>
.material_content {
display: flex;
flex-wrap: wrap;
.material_item {
position: relative;
width: 174px;
height: 182px;
border-radius: 4px;
margin: 0 20px 20px 0;
overflow: hidden;
}
.item_cont {
border-color: #dcdde3;
img {
width: 100%;
height: 148px;
}
.radio_img {
width: 100%;
height: 148px;
}
}
}
</style>

5
src/views/components/MyAlbum.vue

@ -1,5 +1,5 @@
<template>
<div class="theme_img">
<div class="theme_img my_album">
<!-- 我的画册-创建文件夹btn -->
<div v-if="isToFolder" class="material_crumbs">
<el-breadcrumb separator-class="el-icon-arrow-right">
@ -493,6 +493,9 @@ export default {
}
}
}
.my_album{
display: block;
}
.material_crumbs {
padding: 0 0 15px 0;
line-height: 30px;

118
src/views/content/material/materialList/index.vue

@ -1,17 +1,20 @@
<template>
<div>
<div v-if="isToFolder" class="material_crumbs">
<div v-if="isToFolder && !isPublishLayer" class="material_crumbs">
<el-breadcrumb separator-class="el-icon-arrow-right">
<el-breadcrumb-item><a href="/content/material">素材库</a></el-breadcrumb-item>
<el-breadcrumb-item><a @click.stop="breadcrumbToMaterial">素材库</a></el-breadcrumb-item>
<el-breadcrumb-item>{{ currentFolder }}</el-breadcrumb-item>
</el-breadcrumb>
</div>
<div class="material_content">
<!-- 上传 / 创建文件夹 -->
<div class="material_item cont_upload">
<div v-if="!isPublishLayer" class="material_item cont_upload">
<Upload ref="uploadMaterial" :is-theme="isTheme" @saveMaterial="saveMaterial" />
<el-button v-if="!isToFolder && tabType == null" class="mkdir_btn" round type="primary" @click="handleMkdir(0)">创建文件夹</el-button>
<el-button v-if="isToFolder" class="return_btn" round type="primary"><a href="/content/material">返回</a></el-button>
<el-button v-if="isToFolder" class="return_btn" round type="primary"><a @click.stop="breadcrumbToMaterial">返回</a></el-button>
</div>
<div v-else-if="isToFolder" class="material_item cont_upload">
<el-button class="return_btn" round type="primary" @click="returnFolder">返回</el-button>
</div>
<!-- 文件夹list -->
<div v-for="(item,index) in materialFolders" :key="item.id" :class="['material_item', 'folder', { 'item_multi': folderChecked == index }]" @click.stop="editFolder(item,index)" @dblclick="floderDbClick(item,index)">
@ -22,7 +25,7 @@
<img v-else :src="item.imgPath" />
</div>
<p class="file_name">{{ item.name }}</p>
<span v-if="folderChecked == index" class="checked_btn"></span>
<span v-if="folderChecked == index && !isPublishLayer" class="checked_btn"></span>
</div>
<!-- 素材库list -->
<div v-for="(item, index) in materialList" :key="'list-'+index" :class="['material_item', 'item_cont', { 'item_multi': selectedListId.includes(item.material_id) }]" @click.stop="previewMaterial(item)">
@ -40,7 +43,7 @@
</div>
<!-- 素材点击预览 -->
<div class="">
<div v-if="!isPublishLayer">
<el-dialog
title="预览"
:visible.sync="previewVisible"
@ -53,7 +56,7 @@
</div>
<!-- 创建文件夹layer / 编辑 -->
<div class="publish_layer">
<div v-if="!isPublishLayer" class="publish_layer">
<el-dialog :title="layerTitle" :close-on-click-modal="false" :show-close="false" :visible.sync="mkdirVisible" width="616px">
<el-form ref="folderForm" :inline="true" :model="folderForm" size="small" label-width="100px">
<el-form-item
@ -78,23 +81,25 @@
</div>
<!-- 多选操作 -->
<div v-if="selectedListId.length != 0 || folderChecked != -1" class="multi_handle">
<div v-if="!isEditFolder && folderChecked == -1 && isMultiSelected">
<el-button type="button" class="mulit_btn" @click="publishHandle(0)">即时发布</el-button>
<el-button type="button" class="mulit_btn" @click="publishHandle(1)">定时发布</el-button>
<el-button type="button" class="mulit_btn" :disabled="selectedListId.length > 1" @click="editContent()">编辑</el-button>
<el-button type="button" class="mulit_btn" :disabled="selectedListId.length > 1" @click="downloadMaterial">下载</el-button>
<el-button type="button" class="mulit_btn" @click="moveingTo()">移动</el-button>
<el-button type="button" class="mulit_btn mulit_delt_btn" @click="deleteMyMaterial">删除</el-button>
</div>
<div v-else>
<el-button type="button" class="mulit_btn" @click="handleMkdir(1)">编辑</el-button>
<el-button type="button" class="mulit_btn mulit_delt_btn" @click="deleteMaterialFolder">删除</el-button>
<div v-if="!isPublishLayer">
<div v-if="selectedListId.length != 0 || folderChecked != -1" class="multi_handle">
<div v-if="!isEditFolder && folderChecked == -1 && isMultiSelected">
<el-button type="button" class="mulit_btn" @click="publishHandle(0)">即时发布</el-button>
<el-button type="button" class="mulit_btn" @click="publishHandle(1)">定时发布</el-button>
<el-button type="button" class="mulit_btn" :disabled="selectedListId.length > 1" @click="editContent()">编辑</el-button>
<el-button type="button" class="mulit_btn" :disabled="selectedListId.length > 1" @click="downloadMaterial">下载</el-button>
<el-button type="button" class="mulit_btn" @click="moveingTo()">移动</el-button>
<el-button type="button" class="mulit_btn mulit_delt_btn" @click="deleteMyMaterial">删除</el-button>
</div>
<div v-else>
<el-button type="button" class="mulit_btn" @click="handleMkdir(1)">编辑</el-button>
<el-button type="button" class="mulit_btn mulit_delt_btn" @click="deleteMaterialFolder">删除</el-button>
</div>
</div>
</div>
<!-- 移动至layer -->
<div class="wjj_layer">
<div v-if="!isPublishLayer" class="wjj_layer">
<el-dialog title="移动至" :close-on-click-modal="false" :show-close="false" :visible.sync="movingVisible" width="576px" height="384px">
<div class="wjj_list">
<div v-for="(item, index) in folderList" :key="index" :class="['wjj_item', { 'wjj_item_active': folderListChecked == index }]" @click="wjjSelected(item,index)">
@ -242,6 +247,11 @@ export default {
document.addEventListener('click', this.hiddenFolderActiveClick)
},
methods: {
breadcrumbToMaterial() {
this.$router.push('/content/material')
this.isToFolder = false
this.getMaterialList()
},
//
downloadMaterial() {
// console.log(this.selectedMaterial[0])
@ -270,8 +280,15 @@ export default {
},
// list
getMaterialList() {
this.materialFolders = []
this.materialList = []
let params
if (this.$route.query.folderTag) {
if (this.$route.query.folderTag || this.isToFolder) {
if (this.isReturn) {
this.currentFolderId = this.rootFolderId
} else {
this.currentFolderId = localStorage.getItem('currentFolderId')
}
this.isToFolder = true
this.currentFolder = localStorage.getItem('currentFolder')
this.currentFolderId = localStorage.getItem('currentFolderId')
@ -327,12 +344,17 @@ export default {
},
//
floderDbClick(item, index) {
this.isEditMaterial = false
this.$router.replace(
{
path: '/content/material', query: { folderTag: 1 }
}
)
this.isEditFolder = false
if (!this.isPublishLayer) {
this.isEditMaterial = false
this.$router.replace(
{
path: '/content/material', query: { folderTag: 1 }
}
)
} else {
this.isToFolder = true
}
this.currentFolder = item.name
this.currentFolderId = item.id
localStorage.setItem('currentFolder', this.currentFolder)
@ -340,7 +362,6 @@ export default {
this.getMaterialList()
this.selectedListId = []
this.folderChecked = -1
this.isEditFolder = false
},
//
hiddenFolderActiveClick() {
@ -349,23 +370,25 @@ export default {
},
//
editFolder(item, index) {
this.isEditMaterial = false
this.selectedListId = []
//
this.$emit('changedMultiSelected')
if (index != this.folderChecked) {
this.folderChecked = index
this.isEditFolder = true
this.folderForm = {
fid: item.fid,
id: item.id,
name: item.name,
img_path: item.imgPath,
orga_id: item.orgaId
if (!this.isPublishLayer) {
this.isEditMaterial = false
this.selectedListId = []
//
this.$emit('changedMultiSelected')
if (index != this.folderChecked) {
this.folderChecked = index
this.isEditFolder = true
this.folderForm = {
fid: item.fid,
id: item.id,
name: item.name,
img_path: item.imgPath,
orga_id: item.orgaId
}
} else {
this.folderChecked = -1
this.isEditFolder = false
}
} else {
this.folderChecked = -1
this.isEditFolder = false
}
},
//
@ -396,6 +419,13 @@ export default {
})
})
},
// - layer -
returnFolder() {
this.isReturn = false
this.isToFolder = false
this.rootFolderId = localStorage.getItem('rootFolderId')
this.getMaterialList()
},
// - /
submitForm(formName) {
this.folderForm.img_path = this.$refs.childUpload.imageUrl

11
src/views/dashboard/HomeThemeGallery.vue

@ -47,17 +47,6 @@ export default {
localStorage.removeItem('releaseId')
const selectedMaterial = this.$refs.ThemeGalleryList.selectedMaterial
localStorage.setItem('selectedMaterial', JSON.stringify(selectedMaterial))
// //
// const resultAudio = []
// this.selectedMaterial.map(item => {
// if (item.material_type == 2) {
// resultAudio.push(item)
// }
// })
// if (resultAudio.length > 1) {
// this.$message.error('1')
// return
// }
this.$router.push(
{
path: '/release', query: { tag: index }

10
src/views/immediateRelease/index.vue

@ -146,7 +146,7 @@
<!-- 主题库 -->
<div v-if="activeIndex === 1" class="theme_cont">
<!-- 主题库list -->
<ThemeGalleryList ref="ThemeGalleryList" :is-multi-selected="isMultiSelected" :mulit-text="mulitText" :show-item-info="false" />
<ThemeGalleryList ref="ThemeGalleryList" :is-multi-selected="isMultiSelected" :mulit-text="mulitText" :show-item-info="false" :is-my-album="isMyAlbum" />
</div>
<div class="upload_list_right">
<div class="mulit_btn" @click="multiSelectBtn">{{ mulitText }}</div>
@ -251,7 +251,6 @@
<script>
import draggable from 'vuedraggable'
import ThemeGalleryList from '@/views/components/ThemeGalleryList.vue'
// import MaterialList from '@/views/components/MaterialCompontentList.vue'
import MaterialList from '@/views/content/material/materialList/index'
import { getMaterialByType, FetchFindMaterialById } from '@/api/material/material'
import { ReqDeviceList } from '@/api/device/deviceList.js'
@ -278,6 +277,7 @@ export default {
data() {
return {
isPublishLayer: true,
isMyAlbum: false,
orga_id: '133221333123111',
selectedMaterial: [], //
publishType: 0, //
@ -390,8 +390,7 @@ export default {
releaseInfo: null,
isEditMaterial: [],
selectTotal: 0,
selectTotalTime: 0.00,
selectEditD: []
selectTotalTime: 0.00
}
},
computed: {
@ -1281,6 +1280,9 @@ export default {
.item_cont {
margin: 0 24px 20px 0;
}
::v-deep .material_content{
margin: 0;
}
}
}
.theme_cont {

Loading…
Cancel
Save