Browse Source

编辑发布

dev
xuhuajiao 3 years ago
parent
commit
972f4b5212
  1. 8
      src/utils/index.js
  2. 19
      src/views/ThemeGallery/index.vue
  3. 20
      src/views/components/MaterialCompontentList.vue
  4. 116
      src/views/immediateRelease/index.vue
  5. 16
      src/views/materialContent/materialList/index.vue
  6. 48
      src/views/publishContent/urgentMessage/index.vue

8
src/utils/index.js

@ -383,6 +383,7 @@ export function downloadFile(obj, name, suffix) {
document.body.removeChild(link)
}
// 获取当天的日期
export function getNowFormatDate() {
var date = new Date()
var seperator1 = '-'
@ -463,3 +464,10 @@ export function setWeekly(str) {
return str.split(',').map(i => a[i]).join('/')
}
}
// 根据url获取文件格式
export function getFileFormat(str) {
if (str) {
return str.substring(str.lastIndexOf('.') + 1, str.length)
}
}

19
src/views/ThemeGallery/index.vue

@ -41,7 +41,7 @@
</el-select>
</el-form-item>
<el-form-item label="所属机构" prop="is_all_name">
<el-select v-model="classifyForm.is_all_name" style="width: 360px;" @change="selectorganization" value-key="name">
<el-select v-model="classifyForm.is_all_name" style="width: 360px;" value-key="name" @change="selectorganization">
<el-option v-for="item in options" :key="item.key" :label="item.name" :value="item" />
</el-select>
</el-form-item>
@ -57,7 +57,7 @@
</template>
<script>
import { reqHeaderList, reqAddOrEdit } from "@/api/theme/theme.js";
import { reqHeaderList, reqAddOrEdit } from '@/api/theme/theme.js'
import ThemeGalleryList from '../components/ThemeGalleryList.vue'
export default {
name: 'ThemeGallery',
@ -83,7 +83,7 @@ export default {
is_all_name: '',
is_all: false,
id: '',
orga_ids: ["133221333123111"],
orga_ids: ['133221333123111'],
selectName: null,
direction: null,
selectNameList: []
@ -117,8 +117,7 @@ export default {
// lsit
tabItem: [],
activeIndex: 0,
activeIndex: 0
}
},
@ -131,7 +130,6 @@ export default {
reqHeaderList(orga_id).then(res => {
if (res.code == 200) {
this.tabItem = res.data
}
})
},
@ -175,7 +173,6 @@ export default {
} else {
this.classifyForm.is_all_name == '武汉图书馆'
}
} else {
this.layerTitle = '新增'
this.isAddEdit = 0
@ -183,13 +180,11 @@ export default {
this.classifyForm.class_name = ''
this.classifyForm.is_all_name = ''
}
},
//
upload() {
//
this.$refs.ThemeGalleryList.saveMaterial()
},
selectName(vId) {
this.classifyForm.id = vId.id
@ -208,7 +203,7 @@ export default {
class_name: this.classifyForm.class_name,
is_all: this.classifyForm.is_all,
id: this.classifyForm.id,
orga_ids: ["133221333123111"],
orga_ids: ['133221333123111']
}
reqAddOrEdit(params).then(res => {
if (res.code == 200) {
@ -218,8 +213,6 @@ export default {
})
this.addDialogVisible = false
this.getHeaderList()
}
})
} else {
@ -243,7 +236,7 @@ export default {
tabItemClick(tab, event) {
console.log(this.themeItemActive)
console.log(tab, event)
},
}
}
}

20
src/views/components/MaterialCompontentList.vue

@ -15,9 +15,9 @@
</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.material_type == 2" class="radio_img"></div>
<div v-if="!item.img_path && item.material_type == 2" class="radio_img"></div>
<div class="item_format">
<span class="item_type">{{ materialPostfix[index] }}</span>
<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>
@ -28,13 +28,16 @@
<script>
import { getMaterialList } from '@/api/material/material'
import { getSeconds } from '@/utils/index.js'
import { getSeconds, getFileFormat } from '@/utils/index.js'
export default {
name: 'MaterialList',
components: {},
filters: {
getSeconds(s) {
return getSeconds(s)
},
getFileFormat(str) {
return getFileFormat(str)
}
},
props: {
@ -56,7 +59,6 @@ export default {
materialList: [], // list
materialType: null,
materialTypeNot: null,
materialPostfix: [], //
selectedMaterial: [], //
selectedListId: [], // material_id
selectinFolderid: [], // id -- in_folder_id
@ -80,6 +82,7 @@ export default {
}
},
activeItemIndex(val) {
console.log(val)
if (val == 0) {
this.materialType = null
this.materialTypeNot = 2
@ -90,6 +93,7 @@ export default {
}
},
mounted() {
this.materialTypeNot = 2
this.getMaterialList()
},
methods: {
@ -131,16 +135,8 @@ export default {
}
this.materialFolders = res.data.materialFolders
this.materialList = res.data.pageThemeVO
// data
this.thisFoldId = res.data.thisFoldId
//
this.materialList.forEach((item, key) => {
this.materialPostfix[key] = item.deposit_url.substring(
item.deposit_url.lastIndexOf('.') + 1,
item.deposit_url.length
)
})
} else {
this.$message({
message: res.msg,

116
src/views/immediateRelease/index.vue

@ -77,7 +77,7 @@
<img v-if="(item.img_path|| item.imgPath) || (item.material_type == 1 || item.type == 1)" :src="(item.img_path||item.imgPath)" :onerror="defaultImg" alt />
<div v-if="(!item.img_path|| !item.imgPath) && (item.material_type == 2|| item.type == 2)" class="radio_img"></div>
<div class="item_format">
<span class="item_type">{{ materialPostfix[index] }}</span>
<span class="item_type">{{ (item.deposit_url || item.depositUrl) | getFileFormat }}</span>
<span v-if="item.material_type != '0' || item.type != '0'" class="item_time">{{ item.duration | getSeconds }}</span>
</div>
<div class="file_name">{{ item.material_name || item.name }}</div>
@ -122,8 +122,8 @@
<el-button round class="delt_btn" @click="clearDevice()">清空</el-button>
</el-col>
</el-row>
<el-tag v-for="tag in deviceTags" :key="tag.device_id" closable :disable-transitions="true" :hit="false" color="#cbe3ff" @close="deltTags(tag)">
{{ tag.device_name }}
<el-tag v-for="tag in deviceTags" :key="(tag.device_id || tag.deviceId)" closable :disable-transitions="true" :hit="false" color="#cbe3ff" @close="deltTags(tag)">
{{ tag.device_name || tag.deviceName }}
</el-tag>
</div>
</el-col>
@ -168,18 +168,20 @@
</div>
<div v-for="(item, index) in selectedEditData" :key="index" class="edit_material">
<div class="edit_img">
<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>
<!-- <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> -->
<img v-if="(item.img_path|| item.imgPath) || (item.material_type == 1 || item.type == 1)" :src="(item.img_path||item.imgPath)" :onerror="defaultImg" alt />
<div v-if="(!item.img_path|| !item.imgPath) && (item.material_type == 2|| item.type == 2)" class="radio_img"></div>
<span class="">{{ index+1 }}</span>
</div>
<div class="edit_cont">
<div class="edit_cont_base">
<p>{{ item.material_name }}</p>
<span>{{ materialPostfix[index] }}</span>
<span>{{ item.file_size | formatBytes }}</span>
<p>{{ item.material_name || item.name }}</p>
<span>{{ (item.deposit_url || item.depositUrl) | getFileFormat }}</span>
<span>{{ (item.file_size||item.fileSize) | formatBytes }}</span>
</div>
<!-- <div v-if="item.material_type == 0" class="edit_cont_set"> -->
<el-form v-if="item.material_type == 0" :ref="setMaterialForm" :model="setMaterialForm.form" class="edit_cont_set" size="small">
<el-form v-if="item.material_type == 0 || item.type == 0" :ref="setMaterialForm" :model="setMaterialForm.form" class="edit_cont_set" size="small">
<div class="set_time">
<span>展示时长</span>
<el-form-item :prop="'form.'+index+'.showTime'" style="width: 100px">
@ -262,7 +264,7 @@ import MaterialList from '../components/MaterialCompontentList.vue'
import { getMaterialByType, FetchFindMaterialById } from '@/api/material/material'
import { ReqDeviceList } from '@/api/device/deviceList.js'
import { FetchSaveRelease, FetchGetReleaseDetailsById } from '@/api/release/release.js'
import { getSeconds, formatBytes, parseTime } from '@/utils/index.js'
import { getSeconds, formatBytes, parseTime, getFileFormat } from '@/utils/index.js'
export default {
name: 'ImmediateRelease',
components: {
@ -276,13 +278,15 @@ export default {
},
formatBytes(bytes, decimals) {
return formatBytes(bytes, decimals)
},
getFileFormat(str) {
return getFileFormat(str)
}
},
data() {
return {
orga_id: '133221333123111',
selectedMaterial: [], //
materialPostfix: [],
publishType: 0, //
themeType: null,
page: 1,
@ -309,17 +313,6 @@ export default {
release_deviceDTOs: [], // {"device_id": "id"}
release_end: '', // yyyy-MM-dd HH:mm:ss
release_id: null, // id null
// {
// "duration": (s),
// "effect": ,
// "material_id": "id",
// "material_name": "",
// "img_path","",
// "bgm_path":"",
// "file_size":"",
// "ranking": ,
// "rm_id": "id null"
// }
release_materialDTOs: [],
release_start: null, // yyyy-MM-dd HH:mm:ss
release_type: '' //
@ -397,7 +390,10 @@ export default {
}
],
activeIndex: 0,
activeItemIndex: 0
activeItemIndex: 0,
release_id: null,
releaseInfo: null,
isEditMaterial: []
}
},
computed: {
@ -411,15 +407,6 @@ export default {
created() {
this.selectedMaterial = []
this.selectedMaterial = JSON.parse(localStorage.getItem('selectedMaterial'))
//
if (this.selectedMaterial) {
this.selectedMaterial.forEach((item, key) => {
this.materialPostfix[key] = item.deposit_url.substring(
item.deposit_url.lastIndexOf('.') + 1,
item.deposit_url.length
)
})
}
},
mounted() {
if (this.$route.path === '/release') {
@ -437,22 +424,23 @@ export default {
methods: {
editRelease() {
const release_id = JSON.parse(localStorage.getItem('releaseId'))
this.release_id = release_id
const params = {
release_id: release_id
}
FetchGetReleaseDetailsById(params).then(res => {
if (res.code == 200) {
console.log(res.data)
const releaseInfo = res.data.release
this.releaseInfo = releaseInfo
this.form.orga_id = releaseInfo.orgaId
this.form.relaase_name = releaseInfo.relaaseName
this.form.release_cycle = releaseInfo.releaseCycle
if (this.form.release_cycle == 2) {
if (releaseInfo.releaseWeekly) {
this.selectWeekly = releaseInfo.releaseWeekly.split(',')
}
}
this.form.is_topping = releaseInfo.isTopping
this.form.release_device = releaseInfo.releaseDevice
if (releaseInfo.releaseType == 1) {
const arr = []
arr.push(parseTime(releaseInfo.releaseStart))
@ -461,13 +449,12 @@ export default {
} else {
this.form.release_start = parseTime(releaseInfo.releaseStart)
}
if (releaseInfo.actualEnd) {
this.form.actual_end = releaseInfo.actualEnd
}
this.form.bgm_main = releaseInfo.bgmMain
this.form.release_deviceDTOs = res.data.release_devices
// list
const materialIds = []
this.isEditMaterial = res.data.release_materials
res.data.release_materials.map((item) => {
materialIds.push(item.materialId)
})
@ -476,10 +463,12 @@ export default {
}
FetchFindMaterialById(params).then(res => {
if (res.code == 200) {
console.log(res.data)
this.selectedMaterial = res.data
}
})
// list
this.form.release_device = releaseInfo.releaseDevice
this.deviceTags = res.data.release_devices
} else {
this.$message.error(res.msg)
}
@ -492,8 +481,16 @@ export default {
this.form.orga_id = this.orga_id
//
this.form.release_type = this.publishType
//
this.form.actual_end = this.publishType == 0 ? null : ''
//
if (this.release_id) {
if (this.releaseInfo.actualEnd) {
this.form.actual_end = this.releaseInfo.actualEnd
}
this.form.release_id = this.release_id
} else {
this.form.actual_end = null
this.form.release_id = null
}
//
if (this.form.release_device) {
if (this.form.release_device == 1) {
@ -505,7 +502,7 @@ export default {
}
this.form.release_deviceDTOs = this.deviceTags.map(item => {
const json = {}
json.device_id = item.device_id
json.device_id = item.device_id || item.deviceId
return json
})
}
@ -528,7 +525,7 @@ export default {
if (this.selectedMaterial) {
this.form.release_materialDTOs = this.selectedMaterial.map((item, index) => {
const json = {}
if (item.material_type == 0) {
if (item.material_type == 0 || item.type == 0) {
json.duration = (item.showTime || item.showAnimationName || item.showAnimation) ? item.showTime : 15
json.effect = (item.showTime || item.showAnimationName || item.showAnimation) ? item.showAnimation : 0
json.bgm_path = (item.showAudioName || item.showAudioUrl) ? item.showAudioUrl : null
@ -537,17 +534,21 @@ export default {
json.effect = 0
json.bgm_path = null
}
json.material_id = item.material_id
json.material_name = item.material_name
json.img_path = item.img_path
json.file_size = item.file_size
json.material_id = item.material_id || item.id
json.material_name = item.material_name || item.name
json.img_path = item.img_path || item.imgPath
json.file_size = item.file_size || item.fileSize
if (this.release_id) {
json.rm_id = this.isEditMaterial[index].id
} else {
json.rm_id = null
}
json.ranking = index + 1
return json
})
// bgm
const isBgm = this.selectedMaterial.find(item => {
return item.material_type == 2
return item.material_type == 2 || item.type == 2
})
if (isBgm) {
this.form.bgm_main = isBgm.deposit_url
@ -599,7 +600,7 @@ export default {
this.deviceTags.push(tag)
} else {
const result = this.deviceTags.find((item) => {
return item == tag
return (item.device_id || item.deviceId) == tag.device_id
})
if (!result) {
this.deviceTags.push(tag)
@ -629,13 +630,6 @@ export default {
getMaterialByType(params).then(res => {
if (res.code == 200) {
this.audioListData = res.data.content
//
this.audioListData.forEach((item, key) => {
this.materialPostfix[key] = item.deposit_url.substring(
item.deposit_url.lastIndexOf('.') + 1,
item.deposit_url.length
)
})
} else {
this.$message({
message: res.msg,
@ -712,7 +706,7 @@ export default {
if (!this.isMainBgm) {
this.audioListData[index].material_type = 2
const resultIndex = this.selectedMaterial.findIndex((item, key) => {
return item.material_type == 2
return item.material_type == 2 || item.type == 2
})
if (resultIndex == -1) {
this.selectedMaterial.push(this.audioListData[index])
@ -751,7 +745,6 @@ export default {
// -tab
tabItem(index) {
this.activeItemIndex = index
console.log(this.activeItemIndex)
},
// btn
multiSelectBtn(type) {
@ -777,13 +770,6 @@ export default {
this.selectContVisible = false
this.selectedMaterial = []
this.selectedMaterial = this.$refs.MaterialList.selectedMaterial
//
this.selectedMaterial.forEach((item, key) => {
this.materialPostfix[key] = item.deposit_url.substring(
item.deposit_url.lastIndexOf('.') + 1,
item.deposit_url.length
)
})
localStorage.setItem('selectedMaterial', JSON.stringify(this.selectedMaterial))
this.mulitText = '多选'
},

16
src/views/materialContent/materialList/index.vue

@ -29,7 +29,7 @@
<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">{{ materialPostfix[index] }}</span>
<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>
@ -103,13 +103,16 @@
import { getMaterialList, saveMaterialFolder, deleteMaterialFolder, saveMaterial, deleteMyMaterial, moveMyMaterial } from '@/api/material/material'
import Upload from '../../components/upload'
import UploadCover from '../../components/upload_cover'
import { getSeconds } from '@/utils/index.js'
import { getSeconds, getFileFormat } from '@/utils/index.js'
export default {
name: 'Material',
components: { Upload, UploadCover },
filters: {
getSeconds(s) {
return getSeconds(s)
},
getFileFormat(s) {
return getFileFormat(s)
}
},
props: {
@ -140,7 +143,6 @@ export default {
formatType: null, // 0 img 1 video 2 audio
materialId: null, // id
materialImgPath: '', //
materialPostfix: [], //
materialDuration: 0, //
materialName: '', //
uploadFileUrl: null, //
@ -216,14 +218,6 @@ export default {
this.materialList = res.data.pageThemeVO
// data
this.thisFoldId = res.data.thisFoldId
//
this.materialList.forEach((item, key) => {
this.materialPostfix[key] = item.deposit_url.substring(
item.deposit_url.lastIndexOf('.') + 1,
item.deposit_url.length
)
// item.material_name = item.material_name.split('.')[0]
})
})
},
// /

48
src/views/publishContent/urgentMessage/index.vue

@ -42,41 +42,65 @@
<div class="publish_layer">
<el-dialog :title="form.notice_id==null? '紧急发布':'编辑'" :close-on-click-modal="false" :show-close="false" :visible.sync="messageVisible" width="872px">
<el-form ref="form" :model="form" size="small" label-width="100px">
<el-form-item label="文本颜色" prop="context_color" :rules="[
<el-form-item
label="文本颜色"
prop="context_color"
:rules="[
{ required: true, message: '请选择文本颜色', trigger: '' },
]">
]"
>
<colorPicker v-model="form.context_color" class="txt_color" @change="headleChangeColor" />
<el-input v-show="false" v-model="form.context_color" />
</el-form-item>
<el-form-item label="文本内容" prop="context" :rules="[
<el-form-item
label="文本内容"
prop="context"
:rules="[
{ required: true, message: '请输入文本内容', trigger: 'blur' },
]">
]"
>
<el-input v-model="form.context" type="textarea" rows="6" style="width: 674px" />
</el-form-item>
<el-form-item label="文本大小" prop="context_size_name" :rules="[
<el-form-item
label="文本大小"
prop="context_size_name"
:rules="[
{ required: true, message: '请选择文本大小', trigger: 'change' },
]">
]"
>
<el-select v-model="form.context_size_name" size="small" class="filter-item" @change="selectSize">
<el-option v-for="item in sizeData" :key="item.key" :label="item.name" :value="item" />
</el-select>
</el-form-item>
<el-form-item label="文本位置" prop="context_position_name" :rules="[
<el-form-item
label="文本位置"
prop="context_position_name"
:rules="[
{ required: true, message: '请选择文本位置', trigger: 'change' },
]">
]"
>
<el-select v-model="form.context_position_name" size="small" value-key="name" class="filter-item" @change="selectPosition">
<el-option v-for="item in positionData" :key="item.key" :label="item.name" :value="item" />
</el-select>
</el-form-item>
<el-form-item label="滚动速度" prop="context_speed_name" :rules="[
<el-form-item
label="滚动速度"
prop="context_speed_name"
:rules="[
{ required: true, message: '请选择滚动速度', trigger: 'change' },
]">
]"
>
<el-select v-model="form.context_speed_name" size="small" class="filter-item" @change="selectSpeed">
<el-option v-for="item in speedData" :key="item.key" :label="item.name" :value="item" />
</el-select>
</el-form-item>
<el-form-item label="选择设备" prop="notice_device" :rules="[
<el-form-item
label="选择设备"
prop="notice_device"
:rules="[
{ required: true, message: '请选择设备', trigger: 'change' },
]">
]"
>
<el-radio-group v-model="form.notice_device" @change="clearCheckbox()">
<el-radio :label="1" value="all">所有设备</el-radio>
<el-radio :label="2" value="other">部分设备<i v-if="form.notice_device === 2" class="radio_tip" @click="addDeviceTag()">添加</i></el-radio>

Loading…
Cancel
Save