<template> <div class="createPost-container"> <el-form ref="postForm" :model="postForm" :rules="rules" class="form-container"> <sticky :class-name="'sub-navbar '+postForm.status"> <el-button v-loading="loading" style="margin-left: 10px;" type="success" @click="effectPush" v-if="isEdit && !is_effect">生效</el-button> <el-button v-loading="loading" style="margin-left: 10px;" type="success" @click="submitForm" v-if="!is_effect">保存</el-button> </sticky> <div class="createPost-main-container"> <el-row> <Warning v-if="isEdit"/> <el-col :span="24"> <el-form-item style="margin-bottom: 40px;" prop="title"> <MDinput v-model="postForm.title" :maxlength="100" name="title" required > 推送标题 </MDinput> </el-form-item> <div class="postInfo-container"> <el-row> <el-col :span="8"> <el-form-item style="margin-bottom: 40px;" label-width="75px" label="推送ID:" v-if="isEdit"> <el-input :rows="1" v-model="postForm.id" type="text" class="article-textarea" style="width: 180px" disabled /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item style="margin-bottom: 40px;" label-width="75px" label="创建时间:" prop="create_time" v-if="isEdit"> <el-input :rows="1" v-model="postForm.create_time" type="text" class="article-textarea" style="width: 199px" disabled v-if="isEdit"/> </el-form-item> </el-col> <el-col :span="8"> <el-form-item style="margin-bottom: 40px;" label-width="75px" label="创建用户:" v-if="isEdit"> <el-input :rows="1" v-model="postForm.creator_name" type="text" class="article-textarea" style="width: 180px" disabled/> </el-form-item> </el-col> </el-row> <el-row> <el-col :span="8"> <el-form-item style="margin-bottom: 40px;" label-width="75px" label="推送落地:" prop="url" > <el-select v-model="postForm.url" :placeholder="'协议:'" clearable class="postInfo-container-item" style="width:230px"> <el-option v-for="item in URLOptions" :key="item.key" :label="item.display_name" :value="item.key"/> </el-select> </el-form-item> </el-col> <el-col :span="8"> <el-form-item label-width="80px" label="推送时间:" class="postInfo-container-item" prop="push_time" > <el-date-picker v-model="postForm.push_time" type="datetime" placeholder="选择日期时间" style="width: 199px" :picker-options="expireTimeOption" value-format="yyyy-MM-dd HH:mm:ss" /> </el-form-item> </el-col> <el-col :span="8"> <el-form-item style="margin-bottom: 40px;" label-width="135px" label="推送(帖子/小组)ID):" prop="group_topic_id"> <el-input :rows="1" v-model="postForm.group_topic_id" type="text" class="article-textarea" style="width: 180px" /> </el-form-item> </el-col> </el-row> </div> </el-col> </el-row> <el-form-item style="margin-bottom: 40px;" label-width="75px" label="推送内容:" prop="content"> <el-input :rows="1" v-model="postForm.content" type="textarea" class="article-textarea" autosize placeholder="请输入内容" /> <span v-show="contentShortLength" class="word-counter">{{ contentShortLength }}字</span> </el-form-item> <div style="margin-bottom: 20px;"> <el-form-item style="margin-bottom: 40px;" label-width="75px" label="推送头像:" prop="icon" :disabled="is_effect"> <span v-model="uploadType"></span> <Upload v-model="postForm.icon" :uploadType="uploadType" /> </el-form-item> </div> </div> </el-form> </div> </template> <script> import Upload from '@/components/Upload/singleImage3' import MDinput from '@/components/MDinput' import Sticky from '@/components/Sticky' // 粘性header组件 import Warning from './Warning' import { validateURL } from '@/utils/validate' import { fetchPushDetail, CreatePush, EffectPushTask } from '@/api/push' const defaultForm = { status: 'draft', title: '', content: '', icon: '', push_time: '', url: '', creator_name: '', group_topic_id: '', } const URLOptions = [ {'key': 'alpha://topic_detail?topic_id=', 'display_name': '推送帖子'}, {'key': 'alpha://group_detail?group_id=', 'display_name': '推送小组'}, ] const urlTypeKeyValue = URLOptions.reduce((acc, cur) => { acc[cur.key] = cur.display_name return acc }, {}) export default { name: 'PushDetail', components: { MDinput, Upload, Sticky, Warning}, props: { isEdit: { type: Boolean, default: false } }, data() { const validateRequire = (rule, value, callback) => { if (value === '') { this.$message({ message: rule.field + '为必传项', type: 'error' }) callback(new Error(rule.field + '为必传项')) } else { callback() } } return { postForm: Object.assign({}, defaultForm), loading: false, userListOptions: [], URLOptions: [ {'key': 'alpha://topic_detail?topic_id=', 'display_name': '推送帖子'}, {'key': 'alpha://group_detail?group_id=', 'display_name': '推送小组'}, ], expireTimeOption: { disabledDate(date){ return date.getTime() <= Date.now() - 86400000; } }, rules: { title: [{ validator: validateRequire, trigger: 'blur'}], content: [{ validator: validateRequire, trigger: 'blur'}], url: [{ validator: validateRequire, trigger: 'blur'}], icon: [{ validator: validateRequire, trigger: 'blur'}], push_time: [{ validator: validateRequire, trigger: 'blur'}], group_topic_id: [{ validator: validateRequire, trigger: 'blur'}], }, tempRoute: {}, uploadType: 1, // 图片类型 is_effect: false, } }, computed: { contentShortLength() { return this.postForm.content.length }, }, created() { if (this.isEdit) { const id = this.$route.params && this.$route.params.id this.fetchData(id) } else { this.postForm = Object.assign({}, defaultForm) } this.tempRoute = Object.assign({}, this.$route) }, methods: { fetchData(id) { fetchPushDetail(id).then(response => { this.postForm = response.data.data.data this.postForm.url = urlTypeKeyValue[response.data.data.data.url_prefix] this.is_effect = Boolean(response.data.data.data.is_effect) }).catch(err => { console.log(err) }) }, submitForm() { this.$refs.postForm.validate(valid => { if (valid) { this.loading = true this.postForm.creator_id = this.$store.getters.id // 创建用户ID CreatePush(this.postForm).then(response => { this.$notify({ title: '成功', message: response.data.data.message, type: 'success', duration: 2000 }) setTimeout(() => { this.$router.push('/push/list') }, 1000) }).catch(err => { this.$notify({ title: '失败', message: '操作失败', type: 'danger', duration: 2000 }) }); this.postForm.status = 'published' this.loading = false } else { console.log('error submit!!') return false } }) }, effectPush() { if (this.postForm.push_time < Date.now()){ this.$message.error("推送时间已过期, 请重新设置!!"); return false } this.is_effect = Boolean(1); const id = this.$route.params && this.$route.params.id EffectPushTask(id).then(response => { console.log(response.data.data.message) this.$message({ message: response.data.data.message, type: 'success' }) this.$router.go(0) }).catch(err => { }) } } } </script> <style rel="stylesheet/scss" lang="scss" scoped> @import "src/styles/mixin.scss"; .createPost-container { position: relative; .createPost-main-container { padding: 40px 45px 20px 50px; .postInfo-container { position: relative; @include clearfix; margin-bottom: 10px; .postInfo-container-item { float: left; } } .editor-container { min-height: 500px; margin: 0 0 30px; .editor-upload-btn-container { text-align: right; margin-right: 10px; .editor-upload-btn { display: inline-block; } } } } .word-counter { width: 40px; position: absolute; right: -10px; top: 0px; } } </style>