sadjv3/anmo-admin/src/views/sysmission/missionAdd.vue

291 lines
9.2 KiB
Vue
Raw Normal View History

2024-06-04 10:03:14 +08:00
<template>
<div class="components-container main-cont">
<div style="position: relative;">
<span>任务标题</span>
<el-input style="width: 200px;" placeholder="请输入任务标题" v-model="title" autosize></el-input>&nbsp;&nbsp;&nbsp;&nbsp;
<span>任务分类</span>
<el-select v-model="classifyId" placeholder="请选择任务分类" style="width:200px;">
<el-option v-for="(item,index) in artiCletypes" :key="item.index" :label="item.classifyName" :value="item.id">
</el-option>
</el-select>&nbsp;&nbsp;&nbsp;&nbsp;
<span>幸运值</span>
<el-input style="width:200px;" placeholder="请输入幸运值" type="number" v-model="luckyValue" autosize></el-input>&nbsp;&nbsp;
<div style="display: flex;align-items: center;margin: 2% 0;">
<span style="margin-right: 5px;">标题图片</span>
<el-upload
v-model="titlePicture"
:class="{hide:hideUpload}"
action="https://admin.sjajk.com/sqx_fast/alioss/upload"
:limit=1
:on-success="handleUploadSuccess"
list-type="picture-card"
:on-remove="handleRemove"
:on-change="handleChange"
>
<i class="el-icon-plus"></i>
</el-upload>
</div>
<div style="position: absolute;right:0;top:5px;">
<el-button style='margin:0 0 20px 20px;' size="mini" type="primary" icon="document" @click="artiReleass">发布任务
</el-button>
</div>
</div>
<div class="tinymce-content">
<textarea id="tinymceId" :value="content" class="tinymce-textarea"/>
</div>
</div>
</template>
<script>
import load from './tinymce-components/dynamicLoadScript'
import toolbar from './tinymce-components/toolbar'
import plugins from './tinymce-components/plugins'
const tinymceCDN = 'https://cdn.jsdelivr.net/npm/tinymce-all-in-one@4.9.3/tinymce.min.js'
export default {
name: 'Tinymce',
data() {
return {
classifyId: '',
title: '',
luckyValue: '',
titlePicture:'',
isShow: false,
hideUpload: false,
limit:1,
hasChange: false,
hasInit: false,
tinymceId: 'tinymceId',
height: 235,
toolbar: [],
menubar: 'file edit insert view format table',
languageTypeList: {
'en': 'en',
'zh': 'zh_CN'
},
artiCletypes: [],
// 富文本内容
content: ''
}
},
watch: {
content(val) {
if (!this.hasChange && this.hasInit) {
this.$nextTick(() => window.tinymce.get(this.tinymceId).setContent(val || ''))
}
}
},
methods: {
handleChange(file, fileList){
this.hideUpload = fileList.length >= this.limit;
},
handleRemove(file, fileList) {
this.hideUpload = fileList.length >= this.limit;
},
//上传成功
handleUploadSuccess(file,fileList) {
this.titlePicture= file.data
},
// 添加任务
artiReleass(){
if (this.title == '') {
this.$notify({
title: '提示',
duration: 1800,
message: '请输入任务标题',
type: 'warning'
});
return
}
if (this.classifyId == '') {
this.$notify({
title: '提示',
duration: 1800,
message: '请选择任务分类',
type: 'warning'
});
return
}
if (this.luckyValue == '') {
this.$notify({
title: '提示',
duration: 1800,
message: '请选择任务幸运值',
type: 'warning'
});
return
}
if (this.content == '') {
this.$notify({
title: '提示',
duration: 1800,
message: '请选择任务内容',
type: 'warning'
});
return
}
this.$http({
url: this.$http.adornUrl('helpTaskPlatform/saveHelpTaskPlatform'),
method: 'post',
data: this.$http.adornData({
'title':this.title,
'classifyId':this.classifyId,
'content':this.content,
'luckyValue':this.luckyValue,
'titlePicture':this.titlePicture
})
}).then(({data}) => {
this.dialogFormVisible = false
this.$message({
message: '添加成功',
type: 'success',
duration: 1500,
onClose: () => {
this.$router.push({path: '/missionsye'});
}
})
})
},
init() {
load(tinymceCDN, (err) => {
if (err) {
this.$message.error(err.message)
return
}
this.initTinymce()
})
},
initTinymce() {
const _this = this
window.tinymce.init({
selector: `#${this.tinymceId}`,
images_upload_handler: function (blobInfo, success, failure) {
var xhr, formData;
xhr = new XMLHttpRequest();
xhr.withCredentials = false;
xhr.open('POST', "https://admin.sjajk.com/sqx_fast/alioss/upload");
xhr.onload = function () {
var json;
if (xhr.status != 200) {
failure('HTTP Error: ' + xhr.status);
return;
}
json =JSON.parse(xhr.responseText);
if (json == "" || json == null) {
failure('Invalid JSON: ' + xhr.responseText);
return;
}
success(json.data);
};
formData = new FormData();
formData.append('file', blobInfo.blob(), blobInfo.filename());
xhr.send(formData);
},
language: this.languageTypeList['zh'],
height: this.height,
body_class: 'panel-body ',
object_resizing: false,
toolbar: this.toolbar.length > 0 ? this.toolbar : toolbar,
plugins,
menubar: this.menubar,
end_container_on_empty_block: true,
powerpaste_word_import: 'clean',
code_dialog_height: 450,
code_dialog_width: 1000,
advlist_bullet_styles: 'square',
advlist_number_styles: 'default',
imagetools_cors_hosts: ['www.tinymce.com', 'codepen.io'],
default_link_target: '_blank',
link_title: false,
// Image
imagetools_toolbar: 'rotateleft rotateright | flipv fliph | editimage imageoptions',
nonbreaking_force_tab: true, // inserting nonbreaking space &nbsp; need Nonbreaking Space Plugin
init_instance_callback: editor => {
if (_this.content) {
editor.setContent(_this.content)
}
_this.hasInit = true
editor.on('NodeChange Change KeyUp SetContent', () => {
this.hasChange = true
this.content = editor.getContent()
})
},
setup(editor) {
editor.on('FullscreenStateChanged', (e) => {
_this.fullscreen = e.state
})
}
})
},
destroyTinymce() {
const tinymce = window.tinymce.get(this.tinymceId)
if (this.fullscreen) {
tinymce.execCommand('mceFullScreen')
}
if (tinymce) {
tinymce.destroy()
}
},
// 获取分类
classifySelect () {
this.tableDataLoading = true
this.$http({
url: this.$http.adornUrl('platformClassify/selectClassifyList'),
method: 'get',
params: this.$http.adornParams({
})
}).then(({data}) => {
this.tableDataLoading = false
let returnData = data.data;
this.artiCletypes = returnData
})
},
},
mounted() {
this.init()
this.classifySelect()
},
beforeDestroy() {
this.destroyTinymce()
},
activated() {
if (window.tinymce) {
this.initTinymce()
}
},
deactivated() {
this.destroyTinymce()
}
}
</script>
<style>
.main-cont {
max-width: 100%;
min-width: 80%;
padding-bottom:5%;
background-color: #fff;
}
.tinymce-container {
position: relative;
line-height: normal;
}
.tinymce-container >>> .mce-fullscreen {
z-index: 10000;
}
.tinymce-textarea {
visibility: hidden;
z-index: -1;
}
.hide .el-upload--picture-card {
display: none;
}
</style>