Geen omschrijving

PublishArticle.vue 15KB

    <template> <div class="publishArticle block-wrapper main-content"> <div class="wrapper-left content-wrapper"> <el-form :model="ruleForm" :rules="rules" ref="ruleForm" class="form-main"> <el-form-item class="upload-fa"> <div class="update-rw"> <div class="up"> <h2><span>* </span>上传文章封面图片</h2> PNG/JPG/JPEG格式,大小2M以内 </div> </div> <el-upload class="avatar-uploader" :action="uploadUrl" :show-file-list="false" ref="uploadLogo" :on-success="handleAvatarSuccess" :before-upload="beforeAvatarUpload" prop="imageUrl"> <div v-if="ruleForm.imageUrl" :style="{backgroundImage: 'url(' + ruleForm.imageUrl + ')'}" class="avatar"></div> <i v-else class="el-icon-plus avatar-uploader-icon"></i> </el-upload> </el-form-item> <input type="hidden" v-model="articleId"> <el-form-item label="文章标题" prop="artTit"> <el-input v-model="ruleForm.artTit" placeholder="请填写文章标题"></el-input> </el-form-item> <dynamicTags :tagInfo="tagInfo" :industry="ruleForm.industry" ref="subjectTags" v-on:turnTags="turnTags($event)" :dy="dy" :dynamicTagsLength="5"></dynamicTags> <el-form-item label="文章正文"> <!-- <el-input type="textarea" :rows="4" v-model="ruleForm.artDesc" placeholder=" 请填写详细描述"></el-input> --> <UE :id="artUe" :text="ruleForm.artDesc" ref="ueBox"></UE> </el-form-item> <el-form-item></el-form-item> </el-form> </div> <div class="wrapper-right"> <el-row class="content-wrapper operate-box"> <el-col :span="8" @click.native="articleAdd('ruleForm')"> <em class="operateicon icon-issue"></em> <p style="color:#28b8fa">发布</p> </el-col> <el-col :span="8" @click.native="clickTiming('ruleForm')"> <em class="operateicon icon-timeissue"></em> <p>定时发布</p> </el-col> <el-col :span="8" @click.native="articleDraft('ruleForm', 2)"> <em class="operateicon icon-preview"></em> <p>预览</p> </el-col> <el-col :span="8" @click.native="articleDraft('ruleForm', 1)"> <em class="operateicon icon-draft"></em> <p>存草稿</p> </el-col> <el-col :span="8" class="nodelete" v-show="!ifDelete"> <em class="operateicon icon-delete"></em> <p>删除</p> </el-col> <el-col :span="8" v-show="ifDelete" @click.native="articleDelete"> <em class="operateicon icon-delete"></em> <p>删除</p> </el-col> </el-row> </div> <!-- timing --> <el-dialog title="文章定时发布" :visible.sync="dialogFormVisible" width="400px"> <el-form> <el-form-item label="请设置文章发布的时间:"> <el-date-picker v-model="timingDate" type="datetime" default-time="12:00:00" :default-value="defaultTime" :placeholder="placeTime" format="yyyy-MM-dd HH:mm:ss" style="width:100%"> </el-date-picker> </el-form-item> </el-form> <div slot="footer" class="dialog-footer"> <el-button @click="dialogFormVisible = false">取 消</el-button> <el-button type="primary" @click="articleTiming">确 定</el-button> </div> </el-dialog> <BackTop></BackTop> </div> </template> <script type="text/ecmascript-6"> import Cookies from 'js-cookie'; import httpUrl from '@/libs/http'; import util from '@/libs/util'; import dynamicTags from '../../sub-component/DynamicTags'; import UE from './editorUE'; export default { data() { return { dy:'', plf_user: '', platSource: '', tagInfo: { lableTit: '关键词', placeholder: '请填写相关的关键词,如:腐蚀防护、石墨烯、纳米材料' }, artUe: 'artUeditorId', // uedtior的id uploadUrl: httpUrl.kxQurey.cachedFile, articleId: '', timingDate: '', defaultTime: new Date().toISOString(), ruleForm: { artTit: '', artDesc: '', industry: '', imageUrl: '', // 临时地址 imgName: '' // 图片的name }, rules: { artTit: [ { required: true, message: '请填写文章标题', trigger: 'blur' } ] }, dialogFormVisible: false, ifDelete: false }; }, created() { this.articleId = util.urlParse('arId'); if (this.articleId) { this.getArticle(); } this.plf_user = Cookies.get('plf_user'); this.platSource = Cookies.get('platSource'); this.ifDelete = true; // this.$refs.subjectTags }, computed: { placeTime: function() { let d = new Date(); return new Date(d.getTime() - d.getTimezoneOffset() * 60000).toISOString().replace('T', ' ').replace(/\..+$/, ''); } }, methods: { getArticle() { this.$axios.get(httpUrl.kxQurey.article.query, { params: { articleId: this.articleId } }).then((res) => { if (res.success) { this.ruleForm.artTit = res.data.articleTitle; this.ruleForm.imageUrl = util.ImageUrl('article/' + res.data.articleImg, false); this.ruleForm.industry = res.data.subject; this.dy = res.data.subject; this.$refs.ueBox.setUEContent(res.data.articleContent); } }); }, turnTags(msg) { this.ruleForm.industry = msg; }, getDataParams(publishTime) { this.ruleForm.artDesc = this.$refs.ueBox.getUEContent(); // 调用子组件方法 let $data = {}; $data.ownerId = this.plf_user; $data.articleType = '3'; $data.articleTitle = this.ruleForm.artTit; $data.articleContent = this.ruleForm.artDesc; $data.subject = this.ruleForm.industry; $data.articleImg = this.ruleForm.imgName; $data.colNum = '7'; if (this.articleId) { $data.articleId = this.articleId; }; if (publishTime !== '') { $data.publishTime = publishTime; }; return $data; }, validImgIfVoid() { // 判断图片是否上传 if (!this.ruleForm.imageUrl) { this.$alert('请上传文章封面图片', '提示', { confirmButtonText: '确定', type: 'warning', center: true }); return false; } }, articleAdd(formName) { // 发布文章 this.validImgIfVoid(); this.$refs[formName].validate((valid) => { if (valid) { let paramsData = this.getDataParams(); this.$axios.post(httpUrl.kxQurey.article.save, paramsData).then((res) => { if (res.success) { this.$alert('文章发布成功!', '提示', { confirmButtonText: '确定', type: 'success', center: true }); } else { this.$message({ message: '需求发布失败,请重新发布!', type: 'warning' }); }; console.log(res); }).catch(error => { console.log(error); }); } else { console.log('error submit!!'); return false; } }); }, clickTiming(formName) { this.validImgIfVoid(); this.$refs[formName].validate((valid) => { if (valid) { this.dialogFormVisible = true; } else { console.log('error submit!!'); return false; } }); }, articleTiming() { // 定时发布文章 let opublishTime = util.dateFormatter(this.placeTime, true, true); if (this.timingDate) { opublishTime = util.dateFormatter(this.timingDate, true, true); } let paramsData = this.getDataParams(opublishTime); this.$axios.post(httpUrl.kxQurey.article.timing, paramsData).then((res) => { if (res.success) { this.$alert('文章定时发布时间设置成功!', '提示', { confirmButtonText: '确定', type: 'success', center: true, callback: action => { this.$router.push({path: '/ContentManagement'}); } }); this.dialogFormVisible = false; this.ifDelete = true; }; }); }, articleDraft(formName, num) { // 预览文章/存草稿 this.validImgIfVoid(); let paramsData = this.getDataParams(); this.$refs[formName].validate((valid) => { if (valid) { this.$axios.post(httpUrl.kxQurey.article.draft, paramsData).then((res) => { if (res.success) { if (num === 1) { this.articleId = res.data; this.$alert('文章已保存草稿', '提示', { confirmButtonText: '确定', type: 'success', center: true, callback: action => { this.$router.push({path: '/ContentManagement'}); } }); } else if (num === 2) { this.articleId = res.data; this.$router.push({path: '/PreviewArticle', query: {id: res.data}}); } this.ifDelete = true; } else { if (res.code === 90) { this.$alert('由于操作时间过久,上传图片已失效,请重新上传。', '提示', { confirmButtonText: '确定', type: 'warning', center: true }); } else { this.$alert('文章保存失败!', '提示', { confirmButtonText: '确定', type: 'warning', center: true }); } }; }); } else { console.log('error submit!!'); return false; } }); }, articleDelete() { // 删除文章 this.$confirm('确认删除该文章', '提示', { confirmButtonText: '确定', cancelButtonText: '取消', type: 'warning' }).then(() => { this.$axios.post(httpUrl.kxQurey.article.del, { params: { articleId: this.articleId } }).then((res) => { if (res.success) { this.$router.push({path: '/ContentManagement'}); } console.log(res); }); }).catch(() => { this.$message({ type: 'info', message: '已取消删除' }); }); }, // upload img handleAvatarSuccess(res, file) { this.ruleForm.imageUrl = URL.createObjectURL(file.raw); this.ruleForm.imgName = res.data[0].cacheKey; }, beforeAvatarUpload(file) { const isJPG = file.type === 'image/jpeg'; const isPNG = file.type === 'image/png'; const isLt2M = file.size / 1024 / 1024 < 2; if (!isJPG && !isPNG) { this.$message.error('请上传PNG/JPG/JPEG格式的图片'); } if (!isLt2M) { this.$message.error('上传logo大小不能超过 2MB!'); } return (!isJPG || !isPNG) && isLt2M; } // upload img }, components: { dynamicTags, UE } }; </script> <style lang="stylus" rel="stylesheet/stylus"> .publishArticle .form-main width:100% .form-line border-top:1px dashed #ccc margin-bottom:20px .el-form-item__label float:none .shortW width:300px .code-btn .el-input-group__append padding:0 overflow:hidden img width:100px height:38px cursor: pointer .upload-fa position:relative .avatar-uploader .el-upload display:flex align-items:center justify-content:center border: 1px dashed #d9d9d9 border-radius: 6px cursor: pointer position: relative width: 100% height: 190px overflow: hidden &:hover border-color: $mainColor .avatar-uploader-icon font-size: 40px color: #8c939d width: 100% height: 190px line-height: 190px text-align: center .avatar width:100% height:190px background-size:cover background-position:center .update-rw position:absolute display:flex justify-content:center align-items:center text-align:center line-height:20px width:100% top:66% color:$secondaryFont h2 font-size:16px span color:#f56c6c .operate-box border-top:4px solid #28b8fa .el-col-8 text-align:center margin-bottom:12px cursor:pointer color:$commonFont .operateicon display:inline-block; width:18px; height:18px; &.icon-issue bg-image('/static/comimg/g_article_icon_fabu_hig.png') &.icon-timeissue bg-image('/static/comimg/g_article_icon_dingshi_nor.png') &.icon-preview bg-image('/static/comimg/g_article_icon_yulan_nor.png') &.icon-draft bg-image('/static/comimg/g_article_icon_caogao_nor.png') &.icon-delete bg-image('/static/comimg/g_article_icon_shanchu_nor.png') &:hover color:#28b8fa .icon-timeissue bg-image('/static/comimg/g_article_icon_dingshi_hig.png') .icon-preview bg-image('/static/comimg/g_article_icon_yulan_hig.png') .icon-draft bg-image('/static/comimg/g_article_icon_caogao_hig.png') .icon-delete bg-image('/static/comimg/g_article_icon_shanchu_hig.png') &.nodelete cursor:auto opacity:.6 &:hover color:$commonFont .icon-delete bg-image('/static/comimg/g_article_icon_shanchu_nor.png') </style>